Comment déboguer JAXB unmarshalling?
Je suis confronté à un problème avec JAXB unmarshalling. Je crois que je l'ai correctement codé, mais mon unmarshalled objet renvoie null paramètres. Par conséquent, je suis en supposant que lorsque unmarshalling, JAXB est de ne pas voir le XML approprié de la structure qu'il attend. Cependant, je ne reçois pas tous les messages d'erreur ou toutes les exceptions levées.
Est-il de toute façon à l'étape par le biais de la unmarshalling processus afin de voir exactement où/pourquoi il n'arrive pas à remplir mon objet(s)?
Le réel unmarshalling code est assez banales:
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());
}
Cependant, lorsque je l'appelle, je reçois un objet de type clazz retourné (comme prévu), mais déserte.
L'objet DOM que je suis en train de unmarshal est généré par un tiers de l'API. J'ai déjà couru dans certains extrêmement bizarre comportements avec les unmarshalling, c'est pourquoi je voudrais être en mesure de déboguer le processus. Par exemple, si j'essaie de unmarshal un sous-élément à l'intérieur de l'objet DOM (ie: doc.getByElementName("myElement").item(0)), il échoue silencieusement. Cependant, si je convertir le document à une chaîne, et de les réimporter dans un nouveau document, puis il la convertit bien.
Je commence à être assez frustré de ne pas savoir comment déboguer ce problème.
Merci pour les idées!
Eric
OriginalL'auteur Eric B. | 2012-01-05
Vous devez vous connecter pour publier un commentaire.
Une approche que l'on pourrait faire est d'utiliser JAXB pour générer un schéma XML à partir de votre annoté classes. C'est ce que JAXB s'attend à ce que le document d'entrée. Puis de valider votre document XML par rapport à ce schéma XML pour voir si elle est conforme à JAXB attentes.
Merci pour la suggestion. J'ai essayé d'utiliser le validateur, et c'est de lancer une erreur que je ne comprends pas. J'ai créé un sujet séparé pour que (stackoverflow.com/questions/8761930/...). Si vous pouvez suggérer quoi que ce soit, je vous en serais très reconnaissante. Merci.
En effet, c'est la meilleure approche que j'ai trouvé jusqu'à présent parce que d'autres approches il vous suffit de ne pas produire de bons et/ou à la production des résultats. Cependant, je déconseille l'utilisation de
soapUI
pour générer des messages de test, car il génère un message squelette sans (faux) valeurs de données, ce qui vous oblige à taper manuellement tout ce qui est source d'erreurs, en particulier pour les gros messages. Au lieu de cela, Altova est XMLSpy fonctionne à merveille. Tout ce que vous devez faire est de sélectionner lacreate New SOAP request" item from the
SAVON menu et le tour est joué!, vous avez parfaitement le travail (faux) message.OriginalL'auteur Blaise Doughan
À partir de la documentation javadoc: public class DefaultValidationEventHandler s'étend Objet implémente ValidationEventHandler JAXB 1.0 validation par défaut du gestionnaire d'événement. C'est le gestionnaire par défaut pour tous les objets créés à partir d'un JAXBContext qui est de la gestion du schéma dérivé le code généré par un JAXB 1.0 liaison compilateur. Ce gestionnaire des causes de la unmarshal et valider les opérations de l'échec sur la première erreur ou erreur fatale.
OriginalL'auteur Oversteer