2012-05-17 5 views
6

JAXBを(JaxWSとCXFの混乱によって)使用しており、BigDecimal型を文字列(数値)とint(指数部)にマーシャリングしようとしています。 。JAXBプログラムにXmlAdapterをグローバルに適用するにはどうすればよいですか?

私が試みているのは、XmlAdapterを使用してBigDecimalを自分の型BigDecimalUnScaledに変換することです。 @XmlJavaTypeAdapterアノテーションをフィールドに直接置く限り、これは正常に動作します。しかし、私が本当にやりたいことは、Webサービスの実装に入れて、個々の戻りオブジェクトを個別にマーシャリングすることなく、すべてのBigDecimalにグローバルに適用させることです。私はこれを行うことができる方法はありますか?

など。

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 

私はアダプターを実装に入れようとしましたが、機能しません。

アイデア?

答えて

6

あなたはパッケージレベルであなたのXmlAdapterを登録し、それがそのパッケージ内のそのタイプのすべてのフィールド/プロパティに適用することができます:

COM /例/ package-info.java

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

import javax.xml.bind.annotation.adapters.*; 
詳細情報

+2

私が見る限り、これはパッケージ情報がモデルオブジェクトフォルダにある必要があるため、私のサービスのすべてのインスタンスに適用することができません。それをサービスのパッケージに入れても機能しません - 私はすでにそれを試みました。 – Andrew

関連する問題