2015-06-05 4 views
12

मैं अपनी साबुन सेवा के लिए स्प्रिंगडब्ल्यूएस का उपयोग करता हूं और इसे इस तरह मान्य करता हूं;स्प्रिंग डब्ल्यूएस: एक्सएसडी सत्यापन त्रुटियों को कैसे प्राप्त करें और सहेजें

<sws:interceptors> 
    <bean id="payloadValidatingInterceptor" class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor"> 
     <property name="schema" value="/schemas/my.xsd"/> 
     <property name="validateRequest" value="false"/> 
     <property name="validateResponse" value="true"/> 
    </bean> 

@PayloadRoot(namespace = NAMESPACE, localPart = "ServiceProvider") 
@ResponsePayload 
public ServiceProviderTxn getAccountDetails(@RequestPayload ServiceProviderrequest) 
{ ...} 

यह ठीक काम करता है, लेकिन जब कोई त्रुटि हुई यह एक वसंत उत्पन्न त्रुटि प्रतिक्रिया लौटाता इससे पहले कि यह समाप्ति बिंदु को पहुंचता है, तो मैं उन्हें कार्रवाई करने के लिए एक मौका कभी नहीं। लेकिन मैं लॉग इन करने और डेटाबेस पर पूर्ण त्रुटि संदेश सहेजने में सक्षम होना चाहता हूं। एक तरह से मुझे पता चला कि यह मेरे अन्य प्रश्न में ऐसा कुछ करना है;

Spring WS How to get all error messages when validation fails

लेकिन यह के रूप में मैं चाहता हूँ काम नहीं करता।

उत्तर

7

आप PayloadValidationInterceptor का विस्तार करने और विधि

protected boolean handleRequestValidationErrors(MessageContext messageContext, SAXParseException[] errors) 

को फिर से परिभाषित कर सकते हैं (यदि उपलब्ध here) आप देख सकते हैं कि यह कैसे सब पार्सिंग त्रुटि उदासीनता मानक कार्यान्वयन को देखें, तो; आप आने वाले संदेश को भी डंप कर सकते हैं क्योंकि आपके पास MessageContext और इसकी getRequest() विधि तक पहुंच है। आपकी कक्षा

public class PayloadValidationgInterceptorCustom extends 
PayloadValidatingInterceptor { 

@Override 
protected boolean handleRequestValidationErrors(MessageContext messageContext, SAXParseException[] errors) 
     throws TransformerException { 
    messageContext.getRequest().writeTo(/*place your Outputstream here something like a ByteArrayOutputStream*/); //use this if you want to dump the message 
    for (SAXParseException error : errors) { 
     //dump the each error on the db o collect the stack traces in a single string and dump only one or to the database 
     /*you can use something like this 
     StringWriter sw = new StringWriter(); 
     PrintWriter pw = new PrintWriter(sw); 
     error.printStackTrace(pw); 
     sw.toString(); 
     to get the stack trace 
     */ 

    } 
    return super.handleRequestValidationErrors(messageContext,errors); 

} 
+1

tnx पर कुछ हो सकता है लेकिन क्या आप अपना उत्तर कोड के साथ बढ़ा सकते हैं और मेरे लिंक पर वर्णित उत्तर के साथ गठबंधन कर सकते हैं? यह एक कामकाजी समाधान के बजाय एक सिद्धांत की तरह लगता है – Spring

+1

@Spring: एक नमूना वर्ग – Giovanni

+0

जोड़ा गया मैंने कोशिश की लेकिन हैंडलरवेस्टालिडेशनरर्स को कभी भी – Spring

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