JAXB: Comment personnaliser la sérialisation Xml des champs doubles

J'ai un héritage de la classe, avec beaucoup de public double champs. Tous les doubles champs sont initialisés avec Double.MAX_VALUE pour indiquer qu'ils sont vides. (L'héritage de la sérialisation est codé de manière à ignorer le champ et de ne pas sérialiser si le champ est égal à Double.MAX_VALUE).

Nous essayons maintenant de sérialiser cette classe Xml en utilisant JAXB Marshaller. Il fonctionne très bien, sauf que nous voulons éviter la création de Xml pour les champs qui égale Double.MAX_VALUE.

Nous ne sommes pas à l'aide d'un distinct JAXB schéma, juste le marquage de nos classes avec différents javax.xml.bind.annotation Annotations. Si un schéma est utilisé, vous pouvez ajouter un <javaType> élément pour spécifier un Type de données personnalisé convertisseur. Est-il possible de faire cela à l'aide d'Annotations ou par programmation?

Après avoir essayé approche recommandé ci-dessous, je ne peux toujours pas XmlAdapter ramassé:

@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;

Ma classe de haut niveau est: tta.canal d'amenée d'eau.les données.iserver.OrderBlotter, qui contient une liste de tta.canal d'amenée d'eau.les données.iserver.OrderResponseWrappers qui s'étend com.eztech.OrderResponse. Tous les doubles champs sont contenus dans com.eztech.OrderResponse.

Mon code de test unitaire est le suivant:

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());

Mais le double des valeurs n'est pas toujours gérés par la XmlAdapter. Je sais que je suis absent quelque chose de base, mais je ne suis pas sûr de ce qu'il est.

OriginalL'auteur Sam Goldberg | 2010-11-10