2008-09-19 17 views
5

मैं एक SoapFaultClientException द्वारा भेजे गए दोष विस्तार से कैसे मिल सकती है? मैं जैसा कि नीचे दिखाया एक WebServiceTemplate का उपयोग करें:वसंत और वेब सेवा ग्राहक - दोष विस्तार

WebServiceTemplate ws = new WebServiceTemplate(); 
ws.setMarshaller(client.getMarshaller()); 
ws.setUnmarshaller(client.getUnMarshaller()); 
try { 
    MyResponse resp = (MyResponse) = ws.marshalSendAndReceive(WS_URI, req); 
} catch (SoapFaultClientException e) { 
    SoapFault fault = e.getSoapFault(); 
    SoapFaultDetail details = e.getSoapFault().getFaultDetail(); 
     //details always NULL ? Bug? 
} 

वेब सेवा दोष भेजा सही लगता है:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<soapenv:Body> 
    <soapenv:Fault> 
    <faultcode>soapenv:Client</faultcode> 
    <faultstring>Validation error</faultstring> 
    <faultactor/> 
    <detail> 
     <ws:ValidationError xmlns:ws="http://ws.x.y.com">ERR_UNKNOWN</ws:ValidationError> 
    </detail> 
    </soapenv:Fault> 
</soapenv:Body> 

धन्यवाद

के लिए Willome

उत्तर

0

Javadocs से marshalSendAndReceive method ऐसा लगता है कि पकड़ ब्लॉक में SoapFaultClientException कभी नहीं होगा।

एपीआई से यह एक कस्टम Fault Message Receiver सेट करने के लिए गलती का विवरण निर्धारित करने के लिए सबसे अच्छी शर्त की तरह दिखता है।

+4

SoapFaultClientException क्या होगा। Javadocs में बताए गए भाग को भाग WebServiceClientException है। SoapFaultClientException उस अपवाद का उप-वर्ग है। –

6

से आ रहा था मैं भी समस्या यह है कि getFaultDetail() अशक्त लौट आए (एक SharePoint वेब सेवा के लिए) था। मैं एक विधि इस के समान का उपयोग करके विस्तार तत्व बाहर हो सकता है:

private Element getDetail(SoapFaultClientException e) throws TransformerException { 
    TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
    Transformer transformer = transformerFactory.newTransformer(); 
    DOMResult result = new DOMResult(); 
    transformer.transform(e.getSoapFault().getSource(), result); 
    NodeList nl = ((Document)result.getNode()).getElementsByTagName("detail"); 
    return (Element)nl.item(0); 
} 

उसके बाद, आप वापस आ तत्व या जो भी आप चाहते हैं पर getTextContent() कॉल कर सकते हैं।

3

साबुन दोष प्राप्त करते समय आपको किस प्रकार की HTTP प्रतिक्रिया प्राप्त होती है, इसकी जांच करें। मुझे एक ही समस्या थी जब SOAP दोष HTTP 500 के बजाय HTTP 200 का उपयोग कर प्रतिक्रिया करता है। फिर आपको मिलता है:

JAXB unmarshalling अपवाद; नेस्टेड अपवाद javax.xml.bind.UnmarshalException

है जब आप WebServiceTemplate नीचे के रूप में संबंध गलती सेटिंग में बदलाव:

WebServiceTemplate webServiceTemplate = getWebServiceTemplate(); 
webServiceTemplate.setCheckConnectionForFault(false); 

तो आप ठीक ढंग से पकड़ कर सकते हैं पकड़ ब्लॉक में SoapFaultClientException

+0

thx, मेरे लिए काम किया :) – SuperAndrew

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