java inheritance jaxb unmarshalling

java - Cómo invocar JAXB XMLAdapter directamente



inheritance unmarshalling (1)

Para el objeto raíz, necesitaría hacer algo como:

XmlAdapter<AdaptedFoo, Foo> xmlAdapter = new FooAdapter(); AdaptedFoo adaptedFoo = (AdaptedFoo) unmarshaller.unmarshal(xml); Foo foo = xmlAdapter.unmarshal(adaptedFoo);

Me estoy equivocando con la limitación de los adaptadores XMLA de jaxb cuando intento desasignar un objeto raíz directamente, sin que sea un campo en otro objeto y, por lo tanto, eludir el @XmlJavaTypeAdapter

Prefiero no envolver mis objetos porque esto cambiará el xml que se serializará en nuestra base de datos. Y parece que es posible llamar directamente al adaptador XMLAdapter, siguiendo estas respuestas en otra parte:

[1] http://www.coderanch.com/t/505457/XML/jaxb-xmladapter-rootElement [2] http://markmail.org/message/etvbyzn3e3idpa7q#query:+page:1+mid:cetzvq37nifr6tk6+ state: results [3] JaxB inheritance clasificando clases abstractas

Pero no pude averiguar cómo harías eso :(

Hubiera supuesto que sería algo así como

AdaptedFoo adaptedFoo = (new MyAdapter()).unmarshall(fooXml)

Pero esa no es la interfaz para el método unmarshal de XMLAdapter. En mi caso, el xml debe convertirse a un objeto AdaptedFoo antes de que pueda desasignarse.

eg. public BackgroundJob unmarshal(AdaptedFoo adaptedFoo)

¿Necesito un paso extra de clasificación para convertir myXml a un objeto AdaptedFoo y luego llamar a mi XMLAdapter para convertirlo a la subclase deseada? ¿O hay una manera más elegante?

¿Cuál es el proceso recomendado?