Tengo un problema con el desasignamiento de JAXB. Creo que lo he codificado correctamente, pero mi objeto no organizado vuelve con parámetros nulos. En consecuencia, estoy asumiendo que, al desasociar, JAXB no está viendo la estructura XML adecuada que está esperando. Sin embargo, no recibo ningún mensaje de error ni se lanzan excepciones.¿Cómo depurar el desasignamiento de JAXB?
¿Hay alguna forma de paso a través del proceso de desmaterialización para ver exactamente dónde/por qué no está completando mi objeto (s)?
El código unmarshalling real es bastante mundanas:
public <T> T unmarshall(Node node, Class<T> clazz) throws JAXBException {
// Creating an unmarshaller
Unmarshaller u = JAXBContext.newInstance(clazz).createUnmarshaller();
// unmarshal an instance node into Java content
return clazz.cast(u.unmarshal(node, clazz).getValue());
}
Sin embargo, cuando la llamo, me sale un objeto de tipo clazz devuelto (como se esperaba), pero no poblada.
El objeto DOM que intento anular es generado por una API de terceros. Ya me encontré con comportamientos extremadamente extraños con el desemparejamiento, por lo que me gustaría poder depurar el proceso. Por ejemplo, si trato de desempaquetar un subelemento dentro del objeto DOM (es decir: doc.getByElementName ("myElement"). Item (0)), falla silenciosamente. Sin embargo, si convierto el documento en una cadena y lo vuelvo a importar en un documento nuevo, entonces lo convierte bien.
Estoy empezando a sentirme bastante frustrado al no saber cómo solucionar este problema.
¡Gracias por cualquier idea!
Eric
Gracias por el enlace. Nunca lo había intentado antes; le dará una oportunidad. Pero dado que generé las clases JAXB de un XSD, parece ir hacia atrás. Pero todavía no creo que sea una solución elegante. JAXB está actuando como una caja negra completa, y sin ningún indicador que explique lo que está haciendo, no tengo idea de por qué está fallando. Me encantaría encontrar un método que me permita "ver" qué está haciendo y/o dónde están los problemas. –
Gracias por la sugerencia. Intenté usar el validador, y está arrojando un error que no entiendo. He creado un hilo separado para eso (http://stackoverflow.com/questions/8761930/jaxb-unmarshal-validation-throws-cvc-elt-1-cannot-find-the-declaration-of-eleme). Si puede sugerir algo, lo agradecería enormemente. Gracias. –
De hecho, ese es el mejor enfoque que he encontrado hasta ahora porque [otros enfoques] (http://stackoverflow.com/a/10227684/1864054) simplemente no producen resultados buenos y/o productivos. Sin embargo, recomendaría no usar 'soapUI' para generar mensajes de prueba ya que genera un esqueleto de mensaje sin ningún valor de datos (falso), lo que le obliga a escribir manualmente todo lo que es propenso a errores, especialmente para mensajes grandes. En cambio, XMLSpy de Altova funciona de maravilla. Todo lo que tiene que hacer es seleccionar el elemento 'create New SOAP request 'del menú' SOAP' y, ¡listo !, tiene un mensaje perfectamente funcional (falso) – Withheld