2012-05-17 3 views
6

ich JAXB bin mit (durch ein Chaos von JAXWS und CXF) und versucht, die BigDecimal Typ in einen String (Zahl) und int (Exponent) Marschall, weil wir jetzt ein vorderes Ende haben, die durch nicht interpretieren kann BigDecimal Fragen locale .Wie bewerbe ich mich global eine XMLAdapter zu einem JAXB-Programm?

Was ich versuche ist ein XMLAdapter verwenden BigDecimal in meine eigene Art, BigDecimalUnScaled zu konvertieren. Dies funktioniert gut, solange ich meine @XmlJavaTypeAdapter Annotation setzen direkt auf dem Feld. Aber was ich wirklich tun möchte es auf meine Web-Service-Implementierung setzen und haben es global für alle BigDecimals gelten ohne jede Rückkehr Objekt zu einzelnen Marschall hat. Kann ich das irgendwie machen?

z.

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 

Ich habe versucht, nur den Adapter auf die Implementierung setzen, aber es funktioniert nicht.

Irgendwelche Ideen?

Antwort

6

Sie können Ihre XmlAdapter auf Paketebene registrieren und haben es auf alle Bereiche anwenden/Eigenschaften dieses Typs in diesem Paket:

com/example/package-info.java

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

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

Weitere Informationen

+2

Soweit ich dies entweder nicht funktionieren sehen kann, wie die Paket-Info im Modellobjektordner sein muss, ist es für alle Instanzen meines Dienstes machen. Es funktioniert nicht - ich habe das schon ausprobiert. – Andrew

Verwandte Themen