Dire JAXB pour unmarshal <xs:dateTime> à ce Jour de classe à l'aide d'annotations
Lors de l'utilisation de JAXB avec Java-tout d'Abord, les champs ou les propriétés de type java.util.Date
sont maintenue en ordre et unmarshalled comme xs:dateTime
et tout fonctionne comme prévu.
Mais si le type du champ ou de la propriété est Object
, JAXB unmarshals xs:dateTime
à XMLGregorianCalendarImpl
.
J'ai besoin de trouver un moyen qui rend JAXB unmarshal date-valeurs de temps java.util.Date
par lui-même à l'aide d'annotations. Sinon, je vais avoir besoin de passer par tous les unmarshalled valeurs dans chaque cas d'utilisation.
Même si il y avait quelques après-unmarshall-crochet de définir dans les classes contenant les champs Objet et convertir les instances manuellement serait bon. Mais je ne pouvais pas trouver quelque chose qui peut être utilisé de cette manière que ce soit.
Remarque que j'ai un accès limité à la JAXB contexte, tel qu'il est utilisé à l'intérieur de Apache CXF.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir le type de la propriété sur @XmlElement.
Edit:
Puisque vous ne connaissez pas le type que vous pourriez utiliser un XmlAdapter. Si le unmarshalled valeur est une XMLGregorianCalendar convertir une Date. Pour plus d'info sur XmlAdapter voir:
En plus de Blaise Doughan réponse:
J'ai enfin pu comprendre cela, merci pour l'aide de Blaise Doughan. En fait sa réponse travaille avec juste un petit changement: si il y a plusieurs types devraient être unmarshalled en tant qu'Objet de propriété, il doit y avoir plusieurs
@XmlElement
annotations placées sur l'aide@XmlElements
annotation.Voici mon code maintenant:
Remarque: la définition de "nom" est nécessaire pour faire ce travail, car il devrait être un moyen pour le marshaller /unmarshaller à identifier le type de contenu.
Il y a deux problèmes mineurs ici:
Vous devez spécifier une liste de tous les types attendus (ce qui est logique, étant donné le cas de regroupement)
Il n'y a aucun moyen de spécifier un nom unique pour cette propriété. Dans mon cas, où JAXB est utilisé dans CXF services web, le code généré à partir de WSDL dans .NET les noms de ce domaine en tant que "Point". Si il y avait un moyen, par exemple, pour envelopper les éléments XML en un autre qui a un nom unique, le code généré peut être un peu plus agréable.