I have a legacy class with lots of open double fields. All double fields are initialized with the Double.MAX_VALUE symbol to indicate that they are empty. (Inherited serialization is encoded to ignore the field and not serialize if the field is Double.MAX_VALUE ).
Now we are trying to serialize this class in Xml using the JAXB Marshaller. It works fine, except that we want to prevent Xml generation for fields that are Double.MAX_VALUE .
We do not use a separate JAXB scheme, simply marking our classes with various javax.xml.bind.annotation Annotations. If a schema is used, you can add a <javaType> element to specify your own DataType converter. Is there a way to do this using annotations or programmatically?
Having tried the approach recommended below, I still cannot get the 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;
My top level class is tta.penstock.data.iserver.OrderBlotter, which contains a list of tta.penstock.data.iserver.OrderResponseWrappers, which extends com.eztech.OrderResponse . All double fields are contained in com.eztech.OrderResponse .
My unit test code does the following:
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());
But double values ββare still not processed by the XmlAdapter . I know that I have something missing, but I'm not sure what it is.