2012-05-17 8 views
6

Używam JAXB (przez bałagan JaxWS i CXF) i próbuję wprowadzić typ BigDecimal do ciągu znaków (liczba) i int (wykładnik), ponieważ mamy teraz front end, który nie może interpretować BigDecimal dzięki problemom locale .Jak globalnie zastosować XmlAdapter do programu JAXB?

Próbuję użyć XmlAdapter, aby przekonwertować BigDecimal na mój własny typ BigDecimalUnScaled. Działa to dobrze, o ile umieszczę adnotację @XmlJavaTypeAdapter bezpośrednio na polu. Jednak to, co naprawdę chciałbym zrobić, to umieścić go w mojej implementacji usług sieci Web i mieć globalne zastosowanie do wszystkich BigDecimals bez konieczności indywidualnego kontrolowania każdego obiektu zwracającego. Czy mogę to zrobić?

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 

Próbowałem po prostu wprowadzenie adaptera do realizacji, ale to nie działa.

Wszelkie pomysły?

Odpowiedz

6

Można rejestrować XmlAdapter na poziomie pakietu i ma ona zastosowanie do wszystkich pól/właściwości tego typu w ramach tego pakietu:

com/example/package-info.java

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

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

Aby uzyskać więcej informacji

+2

O ile widzę, to nie zadziała, ponieważ informacje o pakiecie muszą znajdować się w folderze modelu, co oznacza, że ​​ma zastosowanie do wszystkich wystąpień mojej usługi. Umieszczenie go w pakiecie usługi nie działa - już próbowałem tego. – Andrew

Powiązane problemy