2012-03-07 11 views
5

मैं सोप और बाकी वेब सेवाओं और एक सरल HTTP पहुँच के होते हैं जो एक आवेदन पत्र है। वे सभी आने वाले अनुरोधों को परिवर्तित करते हैं और उन्हें एक हैंडलर को भेजते हैं। सबसे दर्दनाक बात अपवाद हैंडलिंग है। सही प्रतिक्रिया वापस करने के लिए, मुझे हर विधि को कोशिश-पकड़ ब्लॉक के साथ लपेटना होगा और वहां एक प्रतिक्रिया तैयार करनी होगी।सबसे अच्छा वेब सेवाओं के साथ किसी ऐप्लिकेशन में अपवाद संचालन के रास्ते

मैंने सोचा था कि मैं एक फिल्टर है जो यह कर सकता है बना सकते हैं। लेकिन यह कैसे फिल्टर यह (साबुन, बाकी दृश्यपटल) के स्रोत को पहचान सकते हैं तो मैं जानता था कि मैं एक सोप या अन्य प्रतिक्रिया वापस चाहिए?

उत्तर

5

यह WS ढांचे आप उपयोग पर निर्भर करता है। मुझे पता है कि कुछ प्रकार के इंटरसेप्टर/पहलू हैं जिन्हें आप इंजेक्ट कर सकते हैं और एक ही स्थान पर अपवादों को संभाल सकते हैं। में उदाहरण के लिए वहाँ भी एक विशेष आउटबाउंड error chain जहाँ आप अपने इंटरसेप्टर प्लग कर सकते हैं।

जाहिर try-catch हर विधि में एक बुरा विचार है।

+1

मुझे लगता है कि उल्लेख करना भूल गया - मैं उपयोग कर रहा हूँ अपाचे CXF। मैं उन इंटरसेप्टरों की कोशिश करूंगा, धन्यवाद। – user219882

1

ऐसा लगता है कि आप किसी भी ढांचे का उपयोग नहीं कर रहे हैं क्योंकि यह सामान्य रूपरेखा प्रदान करता था। उदाहरण के लिए वसंत आपको अपवाद हैंडलिंग से कोड को कम करने और अपने कस्टम अपवाद हैंडलर को परिभाषित करने की अनुमति देता है।

आपके मामले में आपके पास आमतौर पर 2 समाधान होते हैं।

(1) आप डेकोरेटर पैटर्न का उपयोग कर सकते हैं: जहां प्रत्येक पद्धति के रूप में

try { 
    call real method 
} catch() { 
    send error to client 
} 

कार्यान्वित किया जाता है डेकोरेटर के साथ प्रत्येक सेवा लपेट चूंकि यह बहुत वर्बोज़ आप गतिशील प्रॉक्सी (विशेषता यह है कि जावा में पेश किया गया था का उपयोग कर समय की बचत कर सकते हैं 5)। इसलिए, आप प्रत्येक सेवा को गतिशील रूप से लपेट सकते हैं (यदि आपकी सेवाओं ने इंटरफ़ेस परिभाषित किया है)।

javax.servlet.ServletException /सर्वलेट/ErrorDisplay

अधिक जानकारी के लिए

देख http://java.sun.com/developer/technicalArticles/Servlets/servletapi2.3/

:

(2) आप इसे सर्वलेट एपीआई त्रुटि पृष्ठ का उपयोग कर हल कर सकते हैं

3

नीचे 0 की परत में, आपको अपना कस्टम Exception बनाना है और Web-Service layer में आपको occurred exception प्राप्त करने के लिए try-catch दृष्टिकोण और catch ब्लॉक log में और अपने कस्टम वेब सेवा परत अपवाद में कनवर्ट करना होगा। मैं निम्नलिखित में इस दृष्टिकोण को दिखाने:

@WebService 
public class EmployeeWS 
{ 
    @WebMethod 
    public void add(Employee em) throws CustomWebServiceException 
    { 
     try 
     { 
     // call facade layer method 
     } 
     catch(Exception e) 
     { 
      logger.error(e.getMessage()); 
      throw new CustomWebServiceException(e); 
     }   
    } 
} 

किसी भी Web-Method में कोशिश पकड़ का उपयोग कर वैकल्पिक, आप (JAX-WS में नमूना SOAPHandler<T> के लिए) Web-Service frameworks में AOP approch या interceptor दृष्टिकोण (नमूना Spring AOP के लिए) का उपयोग कर सकते हैं।

नोट: JAX-WS मानक में, आप throw नहीं एक RuntimeException क्योंकि Exception अंतिम WSDL में निर्दिष्ट करना होगा और यदि आप throw एक RuntimeException अपने वेब सेवा ग्राहक अपने CustomException हासिल नहीं कर सकते हैं, एक और अपने Web-Method जरूरत में फेंकता के लिए अपने आप में हस्ताक्षर।

आप अधिक जानकारी के लिए चयनित Web-Service faramework दस्तावेज देख सकते हैं।

0

आप अपनी कक्षा को अनुकूलित कर सकते हैं !! कर दो!

, नैदानिक ​​त्रुटियों पर आसान ले लो एक प्रोटोकॉल संख्या, संदेश प्रवेश करें, संदेश ग्राहक, आदि सम्मिलित की तरह ...

http://java.globinch.com/enterprise-java/web-services/jax-ws/jax-ws-exceptions-faults-annotation-exception-and-fault-handling-examples/#Pre-Requisites

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