У меня есть унаследованный класс с множеством открытых двойных полей.Все двойные поля инициализируются с Double.MAX_VALUE
, чтобы указать, что они пусты.(Унаследованная сериализация закодирована, чтобы игнорировать поле и не сериализовать, если поле равно Double.MAX_VALUE
).
Сейчас мы пытаемся сериализовать этот класс в Xml, используя JAXB Marshaller.Он работает нормально, за исключением того, что мы хотим предотвратить генерацию Xml для полей, равных Double.MAX_VALUE
.
Мы не используем отдельную схему 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
.Я знаю, что упускаю что-то простое, но я не уверен, что это такое.