2010-03-15 4 views
6

Je souhaite personnaliser le regroupement des dates dans JAXB. C'est une variante de ceci déjà demandé question. Je pense que je voudrais utiliser un XMLAdapter, comme le spécifie this answer questions.Comment personnaliser JAXB Marshalling si vous générez des beans JAXB à partir de XML

Mais je ne peux pas faire exactement cela, parce que je vais dans l'autre sens, générant les beans JAXB à partir d'un. XSD - Je ne peux pas ajouter des annotations aux beans JAXB car ils sont générés par le code.

J'ai essayé d'appeler Marshaller.setAdapter(), mais sans succès.

  final Marshaller marshaller = getJaxbContext().createMarshaller(); 
      marshaller.setSchema(kniSchema); 
      marshaller.setAdapter(new DateAdapter()); 
      ... 
      private static class DateAdapter extends XmlAdapter<String, XMLGregorianCalendar> { 
      @Override 
      public String marshal(XMLGregorianCalendar v) throws Exception { 
       return "hello"; //Just a test to see if it's working 
      } 
      @Override 
      public XMLGregorianCalendar unmarshal(String v) throws Exception { 
       return null; // Don't care about this for now 
      } 
} 

Lorsque la partie pertinente de mon produit haricot JAXB ressemble à ceci:

@XmlSchemaType(name = "date") 
    protected XMLGregorianCalendar activeSince; 

Quand je le fais, ce que la marshalling date/XMLGregorianCalendar par défaut se produit. C'est comme si je ne faisais pas tout.

Toute aide est appréciée.

Merci,

Charles

Répondre

2

La meilleure façon de changer le type lié à Java généré XJC est d'utiliser une personnalisation obligatoire.

https://jaxb.dev.java.net/guide/Using_different_datatypes.html

JAXB a une table intégrée qui détermine quelles classes Java sont utilisées pour représenter ce schéma XML intégré types, mais cela peut être personnalisé.

L'un des cas d'utilisation communs pour la personnalisation est de remplacer le XMLGregorianCalendar avec le calendrier ou date convivial. XMLGregorianCalendar est conçu pour être 100% compatible avec la date de schéma XML /système de temps, comme la fourniture infinie précision en sous-secondes et années, mais souvent la facilité d'utilisation de ces classes familières Java gagnent plus Precise compatibilité.

cette page ne vous dit pas comment câbler réellement la personnalisation, cependant, donc un coup d'oeil ici pour voir comment faire:

http://jaxb.java.net/tutorial/section_5_6_1-Overriding-the-Datatype.html#Overriding%20the%20Datatype

+0

Merci, ça fonctionne. J'étais nouveau à JAXB et je n'avais pas réalisé que vous pouviez personnaliser les fixations comme ça. –

+0

Le site Web java.net a été supprimé et l'URL du didacticiel ne fonctionne plus. Y a-t-il une nouvelle URL pour ce tutoriel? –

Questions connexes