【发布时间】:2011-05-08 02:03:07
【问题描述】:
我有一个遗留类,有很多公共双字段。所有双字段都用Double.MAX_VALUE 初始化,表示它们是空的。 (遗留序列化被编码为忽略字段并且如果字段等于Double.MAX_VALUE则不序列化)。
我们现在正在尝试使用 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,其中包含一个扩展 com.eztech.OrderResponse 的 tta.penstock.data.iserver.OrderResponseWrappers 列表。所有双字段都包含在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 仍然无法处理双精度值。我知道我缺少一些基本的东西,但我不确定它是什么。
【问题讨论】:
标签: java jaxb xml-serialization