Tengo un problema con la forma en que JAXB genera las clases enlazadas para un esquema XML (que, en aras de la precisión, no puedo modificar). que desea asignar un xsd: tipo de fecha a un objeto LocalDate Joda-tiempo y, leyendo here, here y here, creé la siguiente DateAdapter clase:JAXB, enlaces personalizados, Adapter1.class y 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");
}
}
Y añadí lo siguiente a mi archivo de enlace mundial :
<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>
el problema es que, cuando intento compilar mi proyecto maven, se produce un error con el siguiente error:
[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
... y aquí es donde las cosas se ponen raras. JAXB genera una adapter1 clase que contiene lo siguiente:
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));
}
}
.... que es la fuente del error de compilación.
Ahora, mis preguntas son:
- es que mi adaptador es reemplazar XmlAdapter, no puedo hacer que los métodos estáticos .... ¿cómo puedo evitar esto?
- ¿Puedo evitar la generación de Adapter1.class por completo? Tal vez usando la anotación de nivel de paquete XmlJavaTypeAdapters, y si es así, ¿cómo lo hago exactamente? (JAXB genera ya un paquete-info.java propio ...)
Espero que haya aclarado mi situación.
Gracias
¿Qué pasa si estoy generando mis clases '' JAXB' con xjc'? Mi anotación se sobrescribe. –