एक वेब सेवा एक वस्तु डबल्यूएसडीएल द्वारा परिभाषित लौटा रहा है होने के लिए:जेएक्सबी का उपयोग कर सेवा से लौटे 'anyType' से जावा ऑब्जेक्ट कैसे बनाया जाए?
<s:complexType mixed="true"><s:sequence><s:any/></s:sequence></s:complexType>
जब मैं इस वस्तु की क्लास की जानकारी का प्रिंट आउट, यह रूप में आता है:
class com.sun.org.apache.xerces.internal.dom.ElementNSImpl
लेकिन मैं इस unmarshall करने की जरूरत है निम्नलिखित वर्ग की एक वस्तु के रूप आपत्ति:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"info",
"availability",
"rateDetails",
"reservation",
"cancellation",
"error" })
@XmlRootElement(name = "ArnResponse")
public class ArnResponse { }
मैं जानता हूँ कि प्रतिक्रिया, सही है क्योंकि मुझे पता है कि मार्शल इस वस्तु के XML करने के लिए:
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(rootResponse, System.out);
बाहर प्रिंट कौन सा:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:SubmitRequestDocResponse xmlns:ns2="http://tripauthority.com/hotel">
<ns2:SubmitRequestDocResult>
<!-- below is the object I'm trying to unmarshall -->
<ArnResponse>
<Info />
<Availability>
<!-- etc-->
</Availability>
</ArnResponse>
</ns2:SubmitRequestDocResult>
</ns2:SubmitRequestDocResponse>
मैं ElementNSImpl
वस्तु मैं ArnResponse
वस्तु मैं इसे का प्रतिनिधित्व करता है पता है में दिखाई दे रही है कैसे कर सकते हैं?
इसके अतिरिक्त, मैं ऐपइंजिन पर चल रहा हूं, जहां फ़ाइल का उपयोग प्रतिबंधित है।
किसी भी मदद
अद्यतन के लिए धन्यवाद:
मैं @XmlAnyElement(lax=true)
एनोटेशन जोड़ दिया है तो तरह,:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"content"
})
@XmlSeeAlso(ArnResponse.class)
public static class SubmitRequestDocResult {
@XmlMixed
@XmlAnyElement(lax = true)
protected List<Object> content;
लेकिन यह कोई फर्क नहीं पड़ता।
क्या यह इस तथ्य के साथ कुछ करना है कि सामग्री List
है?
यहाँ कोड है, जहां मैं सर्वर से इसे वापस प्राप्त करने के बाद सामग्री का उपयोग करने के लिए कोशिश कर रहा हूँ है:
List list = rootResponse.getSubmitRequestDocResult().getContent();
for (Object o : list) {
ArnResponse response = (ArnResponse) o;
System.out.println(response);
}
कौन सा आउटपुट है:
जनवरी 31, 2012 10:04: 14 AM com.districthp.core.server.ws.alliance.AllianceApi getRates गंभीर: com.sun.org.apache.xerces.internal.dom.ElementNSImpl com.districthp.core.server.ws में ढाला नहीं जा सकता है। alliance.response.ArnResponse
उत्तर:
axtavt के जवाब चाल किया था। यह काम किया:
Object content = ((List)result.getContent()).get(0);
JAXBContext context = JAXBContext.newInstance(ArnResponse.class);
Unmarshaller um = context.createUnmarshaller();
ArnResponse response = (ArnResponse)um.unmarshal((Node)content);
System.out.println("response: " + response);
प्रतिक्रिया प्रतिक्रिया वस्तुओं और डब्लूएसडीएल के लिए मेरे पास सभी स्कीमा की प्रतियां हैं, अगर यह जानने में मदद मिलती है। – Cuga
ध्यान दें कि यहां इस्तेमाल किया गया 'नोड' 'org.w3c.dom.Node' है। –