2011-09-27 2 views
6

Ho un problema con JAXB. Ho creato le mie classi Java tramite xjc (usando un XSD-schema) e ha un legame globale per le XML-Datatypes xs: data xs: dateTime e xs: il momento delle java.util.Calendar con parse e il metodo di stampa.Java: JAXB: Marshelling di JAXBElement <Calendar> a xs: data non corretta

Tutto funziona bene fino a quando ho segnato alcuni xs: i campi data come nillable. Xjc crea wrapper JAXBElement per tali proprietà. Se questi campi vengono rimossi, la data viene stampata includendo le informazioni sull'ora che portano a errori di convalida.

Esiste un possibilty per forzare il Marshaller per convertirlo in xs: date al posto di xs: dateTime?

posso specificare un binding per quei campi che ottiene una speciale XMLAdapater ewhich converte questi campi?

La proprietà all'interno del Java di classe sembra che:

@XmlElementRef(name = "dateField", namespace = "namespace", type = JAXBElement.class) 

protected JAXBElement<Calendar> dateField; 

e le corrispondenti XSD-assomiglia

<xs:element name="dateField" minOccurs="0" nillable="true" type="xs:date" /> 

Qualcuno mi può aiutare per favore?

Grazie e cordiali saluti,

Arne

+0

Sei sicuro di voler 'nillable = "true"' in primo luogo? Non puoi rendere l'elemento opzionale, invece? Non ho mai visto un vero bisogno o ho sentito che mi mancava. –

risposta

1

Avete veramente bisogno di mappare il calendario all'interno di un JAXBElement ?, non sarebbe corretto utilizzare l'eredità XMLGregorianCalendar invece (e quindi è possibile convertirlo in una data)?