2012-05-17 19 views
6

Estoy usando JAXB (a través de un desastre de JaxWS y CXF) y tratando de ordenar el tipo BigDecimal en una cadena (número) e int (exponente) porque ahora tenemos una interfaz que no puede interpretar BigDecimal gracias a problemas de configuración regional .¿Cómo aplico globalmente un XmlAdapter a un programa JAXB?

Lo que estoy intentando es usar un XmlAdapter para convertir BigDecimal en mi propio tipo, BigDecimalUnScaled. Esto funciona bien siempre que coloque mi anotación @XmlJavaTypeAdapter directamente en el campo. Sin embargo, lo que realmente me gustaría hacer es ponerlo en la implementación de mi servicio web y aplicarlo globalmente a todos los BigDecimales sin tener que ordenar cada objeto devuelto. ¿Hay alguna manera de que pueda hacer esto?

E.g.

Interface DummyWebService 
-- Get Return Object (Return object is a POJO with say an ID and a BigDecimal value) 

Implementation default 
-- No type annotation, uses default BigDecimal marshaller 

Marshalled Implementation 
-- XmlTypeAdapters implementation, should globally use BigDecimal 

He intentado simplemente poner el adaptador en la implementación, pero no funciona.

¿Alguna idea?

Respuesta

6

Puede registrar su XmlAdapter en el nivel de paquete y tienen que aplicar a todos los campos/propiedades de ese tipo dentro de ese paquete:

com/example/package-info.java

@XmlJavaTypeAdapters({ 
    @XmlJavaTypeAdapter(value=BigDecimalAdapter.class, type=BigDecimal.class) 
}) 
package com.example; 

import javax.xml.bind.annotation.adapters.*; 

Para más información

+2

Por lo que puedo ver, esto tampoco funcionará, ya que la información del paquete debe estar en la carpeta del objeto modelo, por lo que es aplicable a todas las instancias de mi servicio. Ponerlo en el paquete del servicio no funciona, ya lo intenté. – Andrew

Cuestiones relacionadas