Ich habe ein Problem mit der Art und Weise, wie JAXB die gebundenen Klassen für ein XML-Schema erzeugt (welches ich aus Gründen der Genauigkeit nicht modifizieren kann). ich eine XSD zuordnen möchten: Datum Typ einer Joda Zeit LOCALDATE Objekt und here, here und here lesen, habe ich die folgenden DateAdapter Klasse:JAXB, Custom Bindings, Adapter1.class und 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");
}
}
Und ich fügte der folgenden meiner globalen Einbindemappe :
<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>
Das Problem ist, dass, wenn ich versuche, mein Projekt zu maven kompilieren, ist es mit dem folgenden Fehler fehl:
[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
... und hier wird es merkwürdig. JAXB erzeugt eine Klasse Adapter1, die Folgendes enthält:
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));
}
}
...., die die Quelle des Zusammenstellungsfehler ist.
Nun meine Fragen sind:
- ist, dass mein Adapter XMLAdapter überschreibt, kann ich nicht die Methoden statisch machen .... wie kann ich das vermeiden?
- Kann ich die Generierung von Adapter1.class insgesamt vermeiden? Vielleicht mit der Annotation auf Packet-Level XmlJavaTypeAdapters, und wenn ja, wie mache ich das genau? (JAXB erzeugt bereits ein eigenes Paket-info.java ....)
Hoffe, ich machte meine Situation klar.
Danke
Was ist, wenn ich mit 'xjc' meine' JAXB' Klassen bin zu erzeugen? Meine Anmerkung würde überschrieben werden. –