मैं वसंत साबुन ws का उपयोग कर रहा हूँ।अलग-अलग नेमस्पेस और एक ही जेएक्सबी कक्षा के साथ मेरे पास दो अलग-अलग अंतराल कैसे हो सकते हैं?
मैं JAXB डोमेन कक्षाओं निम्नलिखित है जटिल प्रकार
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"reference",
"reason"
})
@XmlRootElement(name = "request-message")
public class RequestMessageType {
@XmlElement(name = "reference", required = true)
protected String reference;
@XmlElement(name = "reason")
protected String reason;
// I have getters and setters but removed here.
}
मैं @XmlRegistry एनोटेशन के साथ निम्नलिखित वर्ग है
@XmlRegistry
public class ObjectFactory {
private final static QName _RequestMessage_QNAME = new QName("http://namespace/url", "request-message");
public ObjectFactory() {
}
@XmlElementDecl(namespace = "http://namespace/url", name = "request-message")
public JAXBElement<RequestMessageType> createDisconnectRequestMessage(RequestMessageType value) {
return new JAXBElement<RequestMessageType>(_RequestMessage_QNAME, RequestMessageType.class, null, value);
}
}
निम्नलिखित हैं अंतिमबिंदुओं
@Endpoint
public class FirstEndPoint {
private static final String NAMESPACE_URI = "http://first/url/version";
private static final Logger LOG = Logger.getLogger(FirstEndPoint.class);
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "request-message")
@ResponsePayload
public JAXBElement<ResponseMessageType> requestMessage(@RequestPayload JAXBElement<RequestMessageType> requestMessage) {
LOG.info("request-message : first version ID : " + requestMessage.getValue().getReference());
//Preparing response and return response
}
}
@Endpoint
public class SecondEndPoint {
private static final String NAMESPACE_URI = "http://second/url/version";
private static final Logger LOG = Logger.getLogger(SecondEndPoint.class);
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "request-message")
@ResponsePayload
public JAXBElement<ResponseMessageType> requestMessage(@RequestPayload JAXBElement<RequestMessageType> requestMessage) {
LOG.info("request-message : second version ID : " + requestMessage.getValue().getReference());
//Preparing response and return response
}
}
जब मैं साबुन बनाने के अनुरूप अनुरोध, मैं साबुन अनुरोध में एंडपॉइंट्स में दिए गए NAMESPACE_URI का उपयोग कर रहा हूं।
इधर, इस मामले में, मैं प्रतिक्रिया
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring xml:lang="en">unexpected element (uri:"http://first/url/version", local:"request-message"). Expected elements are <{http://namespace/url}request-message></faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
निम्नलिखित अगर मैं "http://namespace/url" का उपयोग NAMESPACE_URI के रूप में अंतिम बिंदु में और साबुन अनुरोध में मैं उचित प्रतिक्रिया हो रही है, लेकिन मैं इसके लिए अलग बनाने की कोशिश हो रही है दो अलग-अलग नामस्थानों के साथ दो अंतराल तो यह काम नहीं कर रहा है और प्रतिक्रिया देता है।
मैं एक ही JAXB वर्ग के साथ दो अलग अलग अंतिमबिंदुओं के लिए दो अलग-अलग नामस्थान का उपयोग कैसे कर सकते हैं? मैं वसंत और वेब सेवा के लिए पूरी तरह से नया हूँ।
अतिरिक्त जानकारी: RequestMessageType वर्ग और ObjectFactory वर्ग एक पैकेज में और package-info.java नाम स्थान में हैं
@javax.xml.bind.annotation.XmlSchema(namespace="http://namespace/url",elementFormDefault=javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.example
मैं package-info.java फाइल में कुछ भी बदलने की जरूरत है है?
मैं भी अपने उत्पन्न डबल्यूएसडीएल देखने के लिए मेरी स्कीमा मैं में किसी भी मामले में अच्छा होगा डी दो अनुरोध और प्रतिक्रिया तत्व परिभाषित करें। ये तत्व एक ही प्रकार के होंगे। जब मैं समय है अगर तुम मैं अपने GitHub खाते –
पर एक साधारण परियोजना साझा कर सकते हैं चाहता हूँ मैं एक RequestMessageType सार बनाने की सलाह देते हैं, और 2 वर्गों से विस्तार करने के लिए होगा। वे वर्ग अलग-अलग पंजीकरण करते हैं।ऐसा करके: आपके wsdls के पास अलग-अलग नामस्थान होंगे, लेकिन आपकी सेवा परत को अनमोडिफाइड रखा जा सकता है। –