मैं जेएक्सबी unmarshalling के साथ एक समस्या में भाग रहा हूँ। मुझे लगता है कि मैंने इसे ठीक से कोड किया है, लेकिन मेरी unmarshalled वस्तु शून्य पैरामीटर के साथ वापस आती है। नतीजतन, मुझे लगता है कि जब unmarshalling, JAXB उपयुक्त XML संरचना नहीं देख रहा है कि यह उम्मीद कर रहा है। हालांकि, मुझे कोई त्रुटि संदेश या कोई अपवाद नहीं मिला है।जेएक्सबी unmarshalling डीबग कैसे करें?
क्या अनचाहे प्रक्रिया के माध्यम से कदम उठाने के लिए वैसे भी है, यह देखने के लिए कि यह कहां/क्यों मेरे ऑब्जेक्ट को पॉप्युलेट करने में विफल रहा है?
वास्तविक unmarshalling कोड काफी सांसारिक है:
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());
}
हालांकि, जब मैं इसे कहते हैं, मैं प्रकार clazz की एक वस्तु लौट आए (उम्मीद के रूप में) मिलता है, लेकिन आबादी वाले।
डीओएम ऑब्जेक्ट जिसे मैं अनारशल करने की कोशिश कर रहा हूं वह किसी तृतीय पक्ष API द्वारा उत्पन्न होता है। मैं पहले से ही unmarshalling के साथ कुछ बेहद अजीब व्यवहार में भाग गया है, यही कारण है कि मैं प्रक्रिया को डीबग करने में सक्षम होना चाहता हूँ। उदाहरण के लिए, यदि मैं DOM ऑब्जेक्ट (यानी: doc.getByElementName ("myElement") के भीतर एक उप-तत्व को अनमर्शल करने का प्रयास करता हूं। आइटम (0)), यह चुपचाप विफल रहता है। हालांकि, अगर मैं दस्तावेज़ को एक स्ट्रिंग में रूपांतरित करता हूं, और इसे एक नए दस्तावेज़ में पुनः आयात करता हूं, तो यह इसे ठीक से परिवर्तित करता है।
मुझे इस मुद्दे को डीबग करने के बारे में जानने के लिए काफी निराश होना शुरू हो रहा है।
किसी भी अंतर्दृष्टि के लिए धन्यवाद!
एरिक
लिंक के लिए धन्यवाद। पहले कभी कोशिश नहीं की; इसे एक शॉट दे देंगे। लेकिन यह देखते हुए कि मैंने एक्सएसडी से जेएक्सबी कक्षाएं उत्पन्न की हैं, ऐसा लगता है कि यह पीछे की तरफ जा रहा है। लेकिन मुझे अभी भी यह एक सुरुचिपूर्ण समाधान नहीं मिला है। जेएक्सबी एक पूर्ण ब्लैक बॉक्स की तरह काम कर रहा है, और बिना किसी संकेतक के यह बताता है कि यह क्या कर रहा है, मुझे नहीं पता कि यह क्यों विफल रहा है। मुझे यह देखने के लिए एक तरीका खोजना अच्छा लगेगा कि यह "क्या" कर रहा है और/या जहां समस्याएं झूठ बोल रही हैं। –
सुझाव के लिए धन्यवाद। मैंने सत्यापनकर्ता का उपयोग करने की कोशिश की, और यह एक त्रुटि फेंक रहा है जिसे मैं समझ नहीं पा रहा हूं। मैंने इसके लिए एक अलग धागा बनाया है (http://stackoverflow.com/questions/8761930/jaxb-unmarshal- validation-throws-cvc-elt-1-cannot-find-the-declaration-of-eleme)। यदि आप कुछ भी सुझाव दे सकते हैं, तो मैं इसकी सराहना करता हूं। धन्यवाद। –
दरअसल, यह अब तक का सबसे अच्छा तरीका है क्योंकि [अन्य दृष्टिकोण] (http://stackoverflow.com/a/10227684/1864054) बस अच्छे और/या उत्पादक परिणाम नहीं देते हैं। हालांकि, मैं परीक्षण संदेशों को उत्पन्न करने के लिए 'साबुनयूआई' का उपयोग करने के खिलाफ अनुशंसा करता हूं क्योंकि यह किसी भी (नकली) डेटा मानों के बिना संदेश कंकाल उत्पन्न करता है, जो आपको त्रुटि प्रवणता, विशेष रूप से बड़े संदेशों के लिए मैन्युअल रूप से टाइप करने के लिए मजबूर करता है। इसके बजाय, अल्टोवा का XMLSpy चमत्कार करता है। आपको बस इतना करना है कि 'एसओएपी' मेनू से 'नया एसओएपी अनुरोध बनाएं' आइटम चुनें और वॉयला !, आपको पूरी तरह से काम कर रहा है (नकली) संदेश। – Withheld