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?