2012-12-17 41 views
5

मैं जेएक्स डब्ल्यूएस 2.0 का उपयोग कर एक एसओएपी webservice कॉल कर रहा हूं। त्रुटि के मामले में मैं निम्नलिखित प्रतिक्रिया हो रही है:SOAPFaultException.getFault()। GetDetail() शून्य

<?xml version="1.0"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://www.w3.org/2003/05/soap- envelope"> 
    <soap:Header/> 
    <soap:Body> 
     <soap:Fault xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://www.w3.org/2003/05/soap- envelope" xmlns:xml="http://www.w3.org/XML/1998/namespace"> 
      <soap:Code> 
       <soap:Value>soap:Receiver</soap:Value> 
      </soap:Code> 
      <soap:Reason> 
       <soap:Text xml:lang="en">Exception of type 'blah blah' was thrown. 
       </soap:Text> 
      </soap:Reason> 
      <soap:Node>{SOME URL}</soap:Node> 
      <detail> 
       <error>345</error> 
       <message>Cannot find user. Blah blah</message> 
      </detail> 
     </soap:Fault> 
    </soap:Body> 
</soap:Envelope> 

आप देख सकते हैं उपयोगी त्रुटि विवरण मोड में होने पर:

<soap:Envelope> 
    <soap:Body> 
     <soap:Fault> 
      <detail> 

मेरे मुवक्किल में मैं एक SOAPFaultException जो एक है हो रही है SOAPFault वस्तु। लगता है कि SOAPFault ऑब्जेक्ट ऊपर पोस्ट किए गए नोड को याद कर रहा है। SOAPFaultException.getFault()। GetDetail() शून्य है। हालांकि, इसमें साबुन समेत हर दूसरे नोड है: कारण। कोई विचार क्यों यह विस्तार नोड गायब है?

धन्यवाद।

उत्तर

3

यह पता चला है कि विस्तार नोड को एसओएपी नेमस्पेस भी शामिल करने की आवश्यकता है।

<soap:detail> 

मैं वेब सेवा मैं मैं अपने ग्राहक में इंजेक्शन एक कस्टम SOAPHandler की handleFault विधि में यह परिवर्तन करने में कामयाब रहे पर नियंत्रण की जरूरत नहीं है के बाद से: तो यह की जरूरत है। उस परिवर्तन के बाद, गलती का विवरण अब शून्य नहीं है और इसमें सभी उप नोड्स हैं।

http://www.w3.org/TR/soap12-part1/#soapfault पर आधारित, मेरा मानना ​​है कि डेवलपर को दोष के दौरान प्रतिक्रिया को सही करने की आवश्यकता है।

0

यह मेरे लिए काम किया:

} catch (SoapFaultClientException e) { 
    log.error(e); 
    SoapFaultDetail soapFaultDetail = e.getSoapFault().getFaultDetail(); 
    SoapFaultDetailElement detailElementChild = (SoapFaultDetailElement) soapFaultDetail.getDetailEntries().next(); 
    Source detailSource = detailElementChild.getSource(); 

    try { 
     Object detail = (JAXBElement<SearchResponse>) getWebServiceTemplate().getUnmarshaller().unmarshal(detailSource); 
    // throw new SoapFaultWithDetailException(detail); 

    } catch (IOException e1) { 
     throw new IllegalArgumentException("cannot unmarshal SOAP fault detail object: " + soapFaultDetail.getSource()); 
    } 

} 

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

  • कोई संबंधित समस्या नहीं^_^