मैं एक सामान्य वेब सेवा बनाने की कोशिश कर रहा हूं जो अनुरोध के शीर्षलेख या बॉडी सामग्री के बावजूद हमेशा "ठीक" के साथ प्रतिक्रिया देगी। मैं इसे Axis2 में RawXMLInOutMessageReceiver
के साथ कर सकता हूं, लेकिन यदि संभव हो तो मैं JAX-WS (जो मैं पूरी तरह से नया हूं) का उपयोग करना पसंद करूंगा। अब तक मेरे पास एक सरल इंटरफ़ेस है:
@WebService
public interface DummyService {
@WebMethod String processMessage(Object obj);
}
और एक सरल कार्यान्वयन:
@WebService(endpointInterface = "com.dummyservice.DummyService")
public class DummyServiceImpl implements DummyService {
@Override
public String processMessage(Object obj) {
return "OK";
}
}
मैं javax.xml.ws.Endpoint#publish(...)
के साथ सेवा को सफलतापूर्वक प्रकाशित कर सकता हूं, लेकिन जब मैंने इसे एक साधारण SOAP अनुरोध के साथ मारा, उदा।
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<derp/>
</soapenv:Body>
</soapenv:Envelope>
मुझे Cannot find dispatch method for {}derp
बताते हुए एक SOAPFault द्वारा बधाई दी गई है।
क्या एक सामान्य/गूंगा वेब सेवा बनाना भी संभव है जो JAX-WS के साथ सब कुछ ACK करेगी? यदि हां, तो क्या कोई मुझे सही दिशा में इंगित कर सकता है?
संपादित करें मैकडॉवेल की टिप के लिए धन्यवाद, मैं इसे SOAPHandler
के साथ करने में सक्षम था:
public class DummySOAPHandler implements SOAPHandler {
@Override
public boolean handleMessage(MessageContext context) {
return process((SOAPMessageContext) context);
}
@Override
public boolean handleFault(MessageContext context) {
return process((SOAPMessageContext) context);
}
@Override
public void close(MessageContext context) { }
@Override
public Set<QName> getHeaders() {
return null;
}
private boolean process(SOAPMessageContext ctx) {
try {
SOAPMessage message = ctx.getMessage();
SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();
SOAPBody body = message.getSOAPBody();
if ((Boolean) ctx.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY)) {
Iterator<SOAPElement> bodyChildren = body.getChildElements();
while (bodyChildren.hasNext()) {
SOAPElement child = bodyChildren.next();
child.detachNode();
}
body.addBodyElement(envelope.createName("OK"));
message.saveChanges();
}
} catch (SOAPException e) {
e.printStackTrace();
}
return true;
}
}
1 उत्तर
मुझे उम्मीद है कि आपकी सेवा कुछ फॉर्म की उम्मीद कर रही है:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:dum="http://yournamespace/">
<soapenv:Header/>
<soapenv:Body>
<dum:processMessage>
<!-- xsd:anyType -->
</dum:processMessage>
</soapenv:Body>
</soapenv:Envelope>
अपने एंडपॉइंट में ?WSDL
जोड़ें और ऑपरेशन इनपुट एक्सएमएल टाइप और नेमस्पेस का निरीक्षण करें।
आप लॉजिकल हैंडलर (javadoc) - मैंने कोशिश नहीं की है।
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।