2012-05-17 9 views
6

Sto usando JAXB (attraverso un pasticcio di JaxWS e CXF) e sto tentando di eseguire il marshalling del tipo BigDecimal in una stringa (numero) e int (esponente) perché ora abbiamo un front-end che non può interpretare BigDecimal grazie ai problemi di localizzazione .Come faccio a applicare globalmente un XmlAdapter a un programma JAXB?

Quello che sto provando è usare un XmlAdapter per convertire BigDecimal nel mio tipo, BigDecimalUnScaled. Funziona bene finché metto la mia annotazione @XmlJavaTypeAdapter direttamente sul campo. Tuttavia, quello che mi piacerebbe davvero fare è metterlo sull'implementazione del mio servizio Web e farlo applicare globalmente a tutti i BigDecimals senza dover effettuare il marshalling individuale di ciascun oggetto restituito. C'è un modo per farlo?

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 

Ho provato a mettere l'adattatore solo sull'implementazione, ma non funziona.

Qualche idea?

risposta

6

È possibile registrare la XmlAdapter a livello di pacchetto e lo hanno si applica a tutti i campi/proprietà di tale tipo all'interno di quel pacchetto:

com/es/package-info.java

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

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

Per ulteriori informazioni

+2

Per quanto posso vedere, questo non funzionerà in quanto le informazioni sul pacchetto devono essere nella cartella dell'oggetto modello, rendendola applicabile a tutte le istanze del mio servizio. Metterlo sul pacchetto del servizio non funziona - l'ho già provato. – Andrew

Problemi correlati