我有一個遺留類,有很多公共雙字段。所有雙字段都使用Double.MAX_VALUE
進行初始化,以表明它們爲空。 (如果字段等於Double.MAX_VALUE
,則遺留序列化被編碼爲忽略該字段並且不序列化)。JAXB:如何自定義雙字段的Xml序列化
我們現在試圖使用JAXB Marshaller將此類序列化爲Xml。它工作正常,除了我們想防止爲等於Double.MAX_VALUE
的字段生成Xml。
我們沒有使用單獨的JAXB模式,只是用各種javax.xml.bind.annotation
註釋標記我們的類。如果使用模式,則可以添加<javaType>
元素來指定自定義DataType轉換器。有沒有辦法使用註釋或編程方式來做到這一點?
後想辦法推薦下面,我仍然不能得到XmlAdapter
回升:
@XmlJavaTypeAdapters({
@XmlJavaTypeAdapter(value=EmptyDoubleValueHandler.class, type=Double.class), @XmlJavaTypeAdapter(value=EmptyDoubleValueHandler.class, type=double.class)})
package tta.penstock.data.iserver;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
我頂層類是:tta.penstock.data.iserver.OrderBlotter,其中包含TTA的列表。 penstock.data.iserver.OrderResponseWrappers,其延伸com.eztech.OrderResponse
。所有雙字段都包含在com.eztech.OrderResponse
中。
我的單元測試代碼執行以下操作:
JAXBContext context = JAXBContext.newInstance(new Class[] { OrderBlotter.class, OrderResponseWrapper.class, OrderResponse.class});
Marshaller marshaller = context.createMarshaller();
StringWriter stringWriter = new StringWriter();
marshaller.marshal(blotter, stringWriter);
System.out.println("result xml=\n" + stringWriter.toString());
但雙重價值還沒有得到由XmlAdapter
處理。我知道我錯過了一些基本的東西,但我不確定它是什麼。
我在看那種方法。問題在於標記遺留類中的所有雙字段是有問題的。我正在尋找一個全局的「鉤子」,我們可以在其中指定或放置上面列出的適配器類型。也就是說,「對於這個類中的每個雙字段,都使用這個XmlAdapter」。 – 2010-11-10 22:07:57
您還可以爲包添加@XmlAdapter註釋(package-info.java可以包含註釋!) - 查看java文檔。這可能會使這種方法可行 – StaxMan 2010-11-11 04:05:18
我已經更新了我的答案,包括了StaxMan的建議。 – 2010-11-11 14:34:35