Ho un problema con il modo in cui JAXB genera le classi associate per uno schema XML (che, per motivi di precisione, non posso modificare). Voglio mappare un xsd: tipo di data a un oggetto LocalDate Joda-time e, leggendo here, here e here, ho creato il seguente DateAdapter classe:JAXB, associazioni personalizzate, Adapter1.class e Joda-time
public class DateAdapter extends XmlAdapter<String,LocalDate> {
private static DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyyMMdd");
public LocalDate unmarshal(String v) throws Exception {
return fmt.parseLocalDate(v);
}
public String marshal(LocalDate v) throws Exception {
return v.toString("yyyyMMdd");
}
}
E ho aggiunto il seguente al mio file vincolante globale :
<jaxb:globalBindings>
<jaxb:javaType name="org.joda.time.LocalDate" xmlType="xs:date"
parseMethod="my.classes.adapters.DateAdapter.unmarshal"
printMethod="my.classes.adapters.DateAdapter.marshal" />
</jaxb:globalBindings>
il problema è che, quando cerco di Maven compilare il mio progetto, non riesce con il seguente errore:
[ERROR] \My\Path\MyProject\target\generated-sources\xjc\my\classes\generated\Adapter1.java:[20,59] non-static method unmarshal(java.lang.String) cannot be referenced from a static context
[ERROR] \My\Path\MyProject\target\generated-sources\xjc\my\classes\generated\Adapter1.java:[24,59] non-static method marshal(org.joda.time.LocalDate) cannot be referenced from a static context
... e questo è dove le cose diventano strane. JAXB genera un'adapter1 classe che contiene il seguente:
public class Adapter1
extends XmlAdapter<String, LocalDate>
{
public LocalDate unmarshal(String value) {
return (my.classes.adapters.DateAdapter.unmarshal(value));
}
public String marshal(LocalDate value) {
return (my.classes.adapters.DateAdapter.marshal(value));
}
}
.... che è la fonte della errore di compilazione.
Ora, le mie domande sono:
- è che il mio adattatore è prevalente XMLAdapter, non posso fare i metodi statici .... come posso evitare questo?
- Posso evitare la generazione di Adapter1.class del tutto ?? Forse usando l'annotazione a livello di pacchetto XmlJavaTypeAdapters, e se sì, come faccio a farlo esattamente ?? (JAXB genera già un pacchetto-info.java a sé stante ....)
Spero di aver chiarito la mia situazione.
Grazie
Che cosa succede se sto generando i miei 'classi JAXB' con' xjc'? La mia annotazione verrebbe sovrascritta. –