Sto incontrando un problema con unMarshalling di JAXB. Penso di averlo codificato correttamente, ma il mio oggetto unmarshalled restituisce con parametri null. Di conseguenza, suppongo che quando non si esegue il riarmo, JAXB non stia vedendo la struttura XML appropriata che si aspetta. Tuttavia, non ricevo alcun messaggio di errore o eccezione generata.Come eseguire il debug di unMarshalling di JAXB?
Esiste comunque un passaggio nel processo di annullamento della memoria per vedere esattamente dove/perché non riesce a popolare il/i mio/i oggetto/i?
Il codice di deserializzazione reale è abbastanza banale:
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());
}
Tuttavia, quando lo chiamo io, ho un oggetto di tipo restituito Clazz (come previsto), ma disabitata.
L'oggetto DOM che sto provando a unmarshal è generato da un'API di terze parti. Ho già incontrato alcuni comportamenti estremamente strani con l'unmarshalling, motivo per cui mi piacerebbe essere in grado di eseguire il debug del processo. Ad esempio, se provo a unmarshal un sottoelemento all'interno dell'oggetto DOM (ad esempio: doc.getByElementName ("myElement"). Item (0)), fallisce silenziosamente. Tuttavia, se converto il documento in una stringa e lo reimportiamo in un nuovo documento, lo converte correttamente.
Sto iniziando a diventare piuttosto frustrato non sapendo come eseguire il debug del problema.
Grazie per eventuali approfondimenti!
Eric
Grazie per il link. Mai provato prima; gli daremo un colpo. Ma dato che ho generato le classi JAXB da un XSD, sembra di tornare indietro. Ma ancora non trovo che sia una soluzione elegante. JAXB si comporta come una scatola nera completa, e senza indicatori che spiegano cosa sta facendo, non ho idea di cosa sia il motivo per cui sta fallendo. Mi piacerebbe trovare un metodo per permettermi di "vedere" cosa sta facendo e/o dove si trovano i problemi. –
Grazie per il suggerimento. Ho provato a utilizzare il validatore e sta generando un errore che non capisco. Ho creato un thread separato per questo (http://stackoverflow.com/questions/8761930/jaxb-unmarshal-validation-throws-cvc-elt-1-cannot-find-the-declaration-of-eleme). Se puoi suggerire qualcosa, lo apprezzerei molto. Grazie. –
In effetti, questo è l'approccio migliore che ho trovato finora perché [altri approcci] (http://stackoverflow.com/a/10227684/1864054) semplicemente non producono risultati buoni e/o produttivi. Tuttavia, mi raccomando di non utilizzare 'soapUI' per generare messaggi di test poiché genera uno scheletro di messaggi senza alcun valore di dati (falsi), costringendo a digitare manualmente tutto ciò che è soggetto ad errori, specialmente per i messaggi di grandi dimensioni. Invece, XMLSpy di Altova fa miracoli. Tutto quello che devi fare è selezionare la voce 'create New SOAP request 'dal menu' SOAP' e, voilà !, hai un messaggio perfettamente funzionante (falso) – Withheld