2010-03-15 11 views
6

Desidero personalizzare il marshalling delle date in JAXB. È una variante di questa già richiesta question. Penserei che userei un XMLAdapter, come specifica le domande this answer.Come personalizzare JAXB Marshalling se si generano bean JAXB da XML

Ma non posso farlo esattamente, perché sto andando al contrario, generando i bean JAXB da un .XSD - Non posso aggiungere annotazioni ai bean JAXB perché sono codice generato.

Ho provato a chiamare Marshaller.setAdapter(), ma senza fortuna.

  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 
      } 
} 

Se la parte rilevante della mia fagioli JAXB generato assomiglia a questo:

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

Quando faccio questo, ciò che lo smistamento data/XMLGregorianCalendar predefinita accade. È come se non avessi fatto tutto.

Qualsiasi aiuto è apprezzato.

Grazie,

Charles

risposta

2

il modo preferito per cambiare il tipo associato in Java XJC generato è quello di utilizzare una personalizzazione vincolante.

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

JAXB ha un tavolo incorporato che determina quali classi Java sono utilizzati per rappresentare quello schema XML incorporato tipi, ma questo può essere personalizzato.

Uno dei casi di utilizzo comuni per personalizzazione è quello di sostituire il XMLGregorianCalendar con l' calendario gentile o Data. XMLGregorianCalendar è progettato per essere al 100% compatibile con il sistema/tempo la data di XML Schema, come ad esempio fornendo infinita precisione in sotto-secondi e anni, ma spesso la facilità d'uso di quelle classi Java familiari conquistare precisa Compatibilità.

Quella pagina non dice come collegare in realtà la personalizzazione, però, in modo da avere uno sguardo qui per vedere come fare:

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

+0

Grazie, che funziona. Ero nuovo di JAXB e non mi ero reso conto che potevi personalizzare i binding in quel modo. –

+0

Questo sito web java.net è stato rimosso e quindi l'URL del tutorial non funziona più. C'è un nuovo URL per quel tutorial? –

Problemi correlati