Sto utilizzando Spring 3 IOC e JAXB/JAX-WS in un servizio Web che ho scritto. In questo momento sto riscontrando un leggero problema con i dati che devono essere arrotondati prima di tornare al consumatore poiché non sono in grado di gestire la precisione completa dei valori.Ad ogni modo passare un parametro costruttore ad un adattatore JAXB?
Per ridurre al minimo l'impatto sul progetto WS e sui calcoli, ho scelto di utilizzare un XaxAdapter Jaxb per arrotondare i valori al momento del marshalling della mia risposta. Tutto funziona bene
Il mio problema ora è che mi piacerebbe renderlo flessibile. Cioè: in alcuni casi, ho bisogno di arrotondare a 2 cifre decimali, in alcuni 4, ecc. In questo momento, devo creare un TwoDecimalAdapter e un FourDecimalAdapter e utilizzare quello appropriato, se necessario, nelle definizioni del mio modello. Questo significa duplicazione del codice.
Esiste comunque un modo per creare un adattatore di arrotondamento generico e passare un parametro ad esso? Per esempio, invece di:
@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(value=FourDecimalRoundingAdapter.class,type=java.math.BigDecimal.class)
mi piacerebbe essere in grado di fare qualcosa di simile:
@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(value=new RoundingAdapter(4),type=java.math.BigDecimal.class)
Ovviamente questo non funziona come JAXB un'istanza l'adattatore stesso, ma c'è alcuna tecnica Posso usare per passare i parametri all'adattatore? Mi piacerebbe poter dichiarare l'adattatore per arrotondare in primavera e usarlo in quel modo, ma ancora una volta, non sono in grado di escogitare una soluzione riutilizzabile.
Grazie,
Eric
che sembrerebbe abbastanza semplice nel contesto in cui sarei stato il controllo della smistamento/unmarshalling me stesso. Ma nel contesto di JAX-WS, dove magicamente fa tutto il lavoro per me senza dovermi occupare di me stesso, come faccio ad indicargli che voglio usare il nuovo RoundingAdapter (4)? Non istanzia mai nessun marshaller/unmarshaller con JAX-WS .... –