पर "आंतरिक त्रुटि" प्राप्त करता है मेरे पास सर्वर-साइड जेएक्स-डब्ल्यूएस SOAPHandler
(वेबस्पेर v8 पर) है कि कुछ मामलों में एसओएपी प्रतिक्रिया के साथ ग्राहक को जवाब देना होगा कि यह एक स्ट्रिंग वैरिएबल में है (इसे responseXml
कॉल)।जेएक्स-डब्ल्यूएस सर्वर-साइड SOAPHandler जो गलती देता है वेबस्पेयर v8
जब responseXml
में एक सफल (यानी, गैर-गलती) SOAP संदेश होता है, तो JAX-WS क्लाइंट को प्रतिक्रिया भेजता है। हालांकि, जब responseXml
एक सोप गलती संदेश, एक "आंतरिक त्रुटि" शामिल होता है, और जैसा कि यहाँ दिखाया ग्राहक, responseXml
में जगह किसी दूसरे गलती प्रतिक्रिया मिलती है:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<soapenv:Fault xmlns:axis2ns1="http://schemas.xmlsoap.org/soap/envelope/">
<faultcode>axis2ns1:Server</faultcode>
<faultstring>Internal Error</faultstring>
<detail/>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
निम्न त्रुटि कंसोल के लिए लिखा है :
[10/9/12 12:21:04:177 EDT] 00000025 AxisEngine E org.apache.axis2.engine.AxisEngine receive An error was detected during JAXWS processing
org.apache.axis2.AxisFault: An error was detected during JAXWS processing
at org.apache.axis2.jaxws.server.JAXWSMessageReceiver.receive(JAXWSMessageReceiver.java:208)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:198)
at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:172)
at com.ibm.ws.websvcs.transport.http.WASAxis2Servlet.doPost(WASAxis2Servlet.java:1466)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
...
यहाँ एक सरल SOAPHandler
कि इस समस्या को दिखाता है। (ध्यान दें कि responseXml
का मान यहां दिखाया गया है। मेरे वास्तविक SOAPHandler
में, प्रतिक्रियाएं हार्ड-कोडेड नहीं हैं लेकिन डेटाबेस से पढ़ी जाती हैं। मैं बस सबसे सरल नमूना कोड दिखाने की कोशिश कर रहा हूं।)
package simplified.demo;
import java.io.ByteArrayInputStream;
import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
public class FaultyHandler implements SOAPHandler<SOAPMessageContext> {
@Override
public boolean handleMessage(SOAPMessageContext context) {
Boolean outbound = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (!outbound) {
String responseXml = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"><soapenv:Header></soapenv:Header><soapenv:Body><soapenv:Fault><faultcode>soapenv:Server</faultcode><faultstring>ORA-01031: insufficient privileges</faultstring><detail/></soapenv:Fault></soapenv:Body></soapenv:Envelope>";
try {
SOAPMessage newMsg = createSOAPMessage(responseXml);
context.setMessage(newMsg);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return (outbound);
}
private SOAPMessage createSOAPMessage(String responseXml) {
try {
ByteArrayInputStream in = new ByteArrayInputStream(responseXml.getBytes());
MessageFactory messageFactory = MessageFactory.newInstance();
return messageFactory.createMessage(null, in);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public boolean handleFault(SOAPMessageContext context) {
return true;
}
@Override
public Set<QName> getHeaders() {
return null;
}
@Override
public void close(MessageContext context) {
}
}
मैं जब मैं एक SOAPFault
वस्तु (का उपयोग कर एक SOAPFactory
) बना सकते हैं और एक SOAPFaultException
में फेंक करने के लिए SOAPHandler
कोड ठीक उसी त्रुटि मिलती है।
स्टैक ट्रेस के आधार पर, मैंने JAXWSMessageReceiver
के लिए स्रोत कोड देखा, और यह कवर के नीचे दिखता है, एक्सिस 2 एक कारण की तलाश में है, लेकिन निश्चित रूप से इस मामले में कोई नहीं है।
क्या किसी को पता है कि क्यों यह हो रहा है या यह कैसे तय किया जा सकता है? धन्यवाद!
मेरे पास 8.5.5 WAS है लेकिन अभी भी हमें वैरिएबल को लागू करना होगा .unify.faults इस मुद्दे को हल करने के लिए –