मैं एक स्कीमा निम्न प्रकार परिभाषित करता है:JAXB साथ Serializing और किसी भी
<xsd:complexType name="Payload">
<xsd:sequence>
<xsd:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xsd:sequence>
</xsd:complexType>
और वह इसलिए की तरह एक वस्तु बनाता है:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Payload", propOrder = {
"any"
})
public class Payload {
@XmlAnyElement(lax = true)
protected List<Object> any;
}
अब मैं एक और जोड़ने का प्रयास करना JAXB वस्तु उत्पन्न कि पेलोड इस तरह कुछ कर रहा है:
Class payloadClass = ...;
JAXBContext context = JAXBContext.newInstance(WrapperRequest.class, payloadClass);
...
marshaller.marshal(wrappedRequest);
लेकिन मुझे एक भयानक अपवाद मिलता है जो ऐसा लगता है कि यह कभी भी खराब नहीं होगा k इसलिए मैं पहले एक्सएमएल में पेलोड ऑब्जेक्ट को क्रमबद्ध करने का निर्णय लेता हूं, फिर उसे पेलोड में एक स्ट्रिंग के रूप में जोड़ें।
StringWriter writer = new StringWriter();
JAXBContext context = JAXBContext.newInstance(sdoRequest.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.marshal(new JAXBElement(new QName("uri", sdoRequest.getClass().getSimpleName()), sdoRequest.getClass(), sdoRequest), writer);
payload.getAny().add(writer.toString());
और यह एक अपवाद कह "java.lang.String" एक @XmlRootElement शामिल नहीं है के साथ चल रही है।
तो एक्सएस का उपयोग कैसे होगा: जेएक्सबी के साथ कभी भी काम करता है? कुछ भी काम नहीं करना चाहता क्योंकि जेएक्सबी ऑब्जेक्ट में पेलोड बदल देता है, और यह ऑब्जेक्ट में कुछ भी क्रमबद्ध नहीं करेगा। यह सब एक्सिस 2 के अंदर भी है, इसलिए इस बिंदु पर पहुंचना बहुत चुनौतीपूर्ण रहा है।
जब आप लिपटे ऑब्जेक्ट को किसी भी पेलोड में जोड़ने का प्रयास करते हैं तो आपको क्या अपवाद मिलता है? – gregwhitaker
निम्नलिखित में मदद करनी चाहिए: http://blog.bdoughan.com/2010/08/using-xmlanyelement-to-build-generic.html –
यह आंशिक रूप से डब्लूएसडीएल को एक साथ रखा गया है जिस पर मेरा शून्य नियंत्रण है। लेकिन, रैपिंग अनुरोध एक डब्लूएसडीएल में परिभाषित किया गया है और पेलोड में जाने का अनुरोध किसी अन्य डब्लूएसडीएल में परिभाषित किया गया है। वे दोनों बेसआरक्वेट घोषित करते हैं, लेकिन जब कोड उत्पन्न होता है तो वे अलग-अलग वर्ग होते हैं। और मुझे यह अपवाद मिलता है दो वर्गों में एक ही एक्सएमएल प्रकार का नाम {http://esp.lala.com/2012/eo}BaseRequest है। उन्हें अलग-अलग नाम देने के लिए @ XmlType.name और @ XmlType.namespace का उपयोग करें। – chubbsondubs