2012-10-09 8 views
15

पर "आंतरिक त्रुटि" प्राप्त करता है मेरे पास सर्वर-साइड जेएक्स-डब्ल्यूएस 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 एक कारण की तलाश में है, लेकिन निश्चित रूप से इस मामले में कोई नहीं है।

क्या किसी को पता है कि क्यों यह हो रहा है या यह कैसे तय किया जा सकता है? धन्यवाद!

उत्तर

3

वास्तविक समस्या अपवाद की वजह से लापता नहीं है, यह नहीं बल्कि एक एकीकृत गलती websphere में से निपटने है:

http://www-01.ibm.com/support/docview.wss?uid=swg1PM58524

या तो वर्णित तरीके का उपयोग या स्थापित कम से कम 8.0.0.4

+0

मेरे पास 8.5.5 WAS है लेकिन अभी भी हमें वैरिएबल को लागू करना होगा .unify.faults इस मुद्दे को हल करने के लिए –

1

WebSphere संस्करण 8 के साथ शुरू सिर्फ संदेश "आंतरिक त्रुटि" लौटने एक डिफ़ॉल्ट सक्षम सुरक्षा सुविधा है। यह "preventing detailed information regarding why inbound message processing failed from being returned to message senders" के लिए किया जाता है। , "Webservices.unify.faults"

के लिए खोज इस सुविधा को अक्षम करने के लिए अपने JVM कस्टम गुण के लिए एक -Dwebservices.unify.faults = false जोड़ें।

3

मुझे एक ही समस्या थी और एकीकृत गलती हैंडलिंग (यह एक बग नहीं है, यह एक सुविधा है!) को अक्षम करके इसे हल करने में सक्षम था।

पर डेवलपर कंसोल

https://<yourhost>/<yourport>/ibm/console/login.do 

था के रूप में वर्णित here (WAS8 के लिए) कार्य करें:

क्लिक करें सर्वर> सर्वर प्रकार। , और या तो वेबस्पेयर अनुप्रयोग सर्वर> server_name या WebSphere प्रॉक्सी सर्वर> server_name। इसके बाद, सर्वर इन्फ्रास्ट्रक्चर अनुभाग में, जावा और प्रक्रिया प्रबंधन> प्रक्रिया परिभाषा क्लिक करें, और या तो नियंत्रण, नौकर, या सहायक का चयन करें। फिर जावा आभासी मशीन> कस्टम गुणों पर क्लिक करें।

वहां, एक नई संपत्ति webservices.unify.faults जोड़ें और मान को false पर सेट करें।

enter image description here

0

यह त्रुटि सामान्य दोष IBM Websphere अनुप्रयोग सर्वर पर सुविधा से निपटने को अक्षम करके हल किया जा सकता।

इस संपत्ति को अक्षम करने के लिए व्यवस्थापक कंसोल> सर्वर> एप्लिकेशन सर्वर>> प्रक्रिया परिभाषा> जावा वर्चुअल मशीन> कस्टम गुणों पर नेविगेट करें।

कुंजी को 'webservice.unify.faults' के रूप में दर्ज करें और 'false' के रूप में मान दर्ज करें।

एक बार अपडेट हो जाने पर आपके सर्वर को पुनरारंभ करें और अपने एसओएपी लेनदेन के लिए कस्टम डब्लूएसडीएल त्रुटियों को प्राप्त करने के लिए ईएआर इंस्टॉल करें।

0

मैं था एफपी 8.5.5.10 उन्नयन 8.5.5.12 करने के बाद एक ही मुद्दा था। हम वास्तव में एक ही विधि का नाम है, लेकिन अलग अलग targetNamespace के साथ दो सेवा, DomainService1 तरह है 'प्राप्त' विधि था और DomainService2 भी है 'प्राप्त' विधि है, लेकिन था 8.5.5.12 इस अपवाद फेंकता है और नहीं देता मूल कारण खोजने के लिए कोई सुराग। स्पष्ट रूप से विधियों के नामकरण के साथ हाल के संस्करण में WAS अधिक सख्त है। org.apache.axis2.jaxws.wrapper.impl.JAXBWrapperException:

यह अपवाद था एक आंतरिक अभिकथन त्रुटि उत्पन्न हुई। com.xxx.web.myapp.services.jaxws.GetResponse JAXB वस्तु विधि प्रत्येक सेवा 'getABC' और 'getPQR' यह काम करने के लिए विशिष्ट का नाम बदलने के बाद एक xxxxxStatus एक्सएमएल

नहीं है !!!

उम्मीद है कि यह काम करता है!

संबंधित मुद्दे