JAXB : Как настроить XML-сериализацию двойных полей

У меня есть унаследованный класс с множеством общедоступных двойных полей. Все двойные поля инициализируются с помощью Double.MAX_VALUE , чтобы указать, что они пусты . (Унаследованная сериализация закодирована так, чтобы игнорировать поле и не сериализовать, если поле равно Double.MAX_VALUE ).

Сейчас мы пытаемся сериализовать этот класс в Xml с помощью JAXB Marshaller. Он работает нормально, за исключением того, что мы хотим предотвратить создание Xml для полей, которые равны Double.MAX_VALUE .

Мы не используем отдельную схему JAXB, а просто размечаем наши классы различными javax.xml.bind.annotation аннотациями. Если используется схема, вы можете добавить элемент , чтобы указать настраиваемый преобразователь 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 . Все поля типа double содержатся в 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());

Но значения типа double по-прежнему не обрабатываются XmlAdapter . Я знаю, что упускаю что-то базовое, но не знаю, что именно.

7
задан vsminkov 12 September 2016 в 21:04
поделиться