2013-10-10 7 views
5

के साथ प्रतिक्रिया कैसे दें शीर्षक की तरह ही।जेएक्स-डब्ल्यूएस webservice को विशिष्ट http कोड

@WebService(
     targetNamespace = "http://com.lalaland.TestWs", 
     portName = "TestWs", 
     serviceName = "TestWs") 
public class TestWs implements TestWsInterface { 

    @EJB(name="validator") 
    private ValidatorLocal validator; 

    @WebMethod(operationName = "getStuff") 
    public List<StuffItem> getStuff(@WebParam(name = "aaa")String aaa, 
         @WebParam(name = "bbb")int bbb) { 

      if (! validator.check1(...)) 
       return HTTP code 403  <------------ Here 
      if (! validator.check2(...)) 
       return HTTP code 404  <------------ Here 
      if (! validator.check3(...)) 
       return HTTP code 499  <------------ Here 

      return good list of Stuff Items 

    } 

क्या वैसे भी मैं एक विधि को मांग पर एक विशिष्ट HTTP कोड वापस कर सकता हूं? मुझे पता है कि प्रमाणीकरण, आंतरिक सर्वर त्रुटियों आदि जैसी कुछ चीजें डब्लूएस विधि 500 ​​और ऑथ त्रुटियों को वापस कर देती हैं, लेकिन मैं इन्हें व्यावसायिक तर्क के अनुसार भेजना चाहता हूं।

कोई भी इससे पहले किया? कुछ समय के लिए जैक्स-डब्ल्यूएस का उपयोग कर रहे थे और यह पहली बार था जब मुझे यह आवश्यकता थी, इसके लिए खोज करने की कोशिश की और कहीं भी जवाब नहीं मिला।

धन्यवाद

+0

, मैं पहले से ही करने की कोशिश की: नई javax.xml.ws.http.HTTPException (123) फेंक और यह – SysHex

+0

काम नहीं किया जो एक प्रयोग कर रहे हैं: मेट्रो या सीएक्सएफ? – Sergio

+0

@ चेचस इसे ग्लासफ़िश 3 पर तैनात किया जा रहा है, इसलिए मेट्रो, इसका उल्लेख करना भूल गया और केवल ग्लासफ़िश -3 टैग – SysHex

उत्तर

9

केवल javax.servlet.http.HttpServletResponse की वर्तमान उदाहरण मिलता है और त्रुटि भेजता है।

@WebService 
public class Test { 

    private static final Logger LOG = Logger.getLogger(Test.class.getName()); 

    @Resource 
    private WebServiceContext context; 

    @WebMethod(operationName = "testCode") 
    public String testCode(@WebParam(name = "code") int code) { 
     if (code < 200 || code > 299) { 
      try { 
       MessageContext ctx = context.getMessageContext(); 
       HttpServletResponse response = (HttpServletResponse) 
         ctx.get(MessageContext.SERVLET_RESPONSE); 
       response.sendError(code, code + " You want it!"); 
      } catch (IOException e) { 
       LOG.severe("Never happens, or yes?"); 
      } 
     } 
     return code + " Everything is fine!"; 
    } 

} 

भी देखें List of HTTP status codes - Wikipedia, the free encyclopedia

बस पूर्णता खातिर
+0

यह काम करता है! धन्यवाद पॉल – SysHex

+1

आपका स्वागत है। यह न भूलें कि अगर कोई जवाब आपके प्रश्न को संतोषजनक ढंग से हल करता है, तो आप इसे स्वीकार कर सकते हैं (http://meta.stackexchange.com/a/5235/227183)। –

2

आज़माएं: http://www.mkyong.com/webservices/jax-ws/jax-ws-soap-handler-in-server-side/ इंटरफेस को लागू करने:

इस तरह एक SoapHandler बनाएँ (Handler.handleResponse); http://download.java.net/jdk7/archive/b123/docs/api/javax/xml/ws/handler/MessageContext.html

आप कहाँ उपयोग कर सकते हैं: HTTP_RESPONSE_CODE के रूप में आप चाहते हैं

तो, हैंडलर के अंदर आप के रूप में आप http हेडर चाहते संशोधित करने के लिए है, तो आप की तरह कुछ जोड़ सकते हैं avalaible हैं।

अन्य संसाधन: http://docs.oracle.com/cd/E14571_01/web.1111/e13735/handlers.htm

युक्ति: साबुन संदेशों के लिए इंटरसेप्टर के रूप में soaphandlers पर लगता है

+0

इसे अभी परीक्षण कर रहा है। आपको ** एक मिनट या दो – SysHex

+0

** ** Handler.handleResponse(); ** का मतलब है हैंडल मैसेज()? हैंडल रिस्पॉन्स के लिए हस्ताक्षर नहीं मिल रहा है। – SysHex

+1

आपको ऑरैक ट्यूटोरियल में इसे कैसे करना है, लेकिन वास्तव में पॉल प्रतिक्रिया बहुत साफ है, अगर आपको केवल http प्रतिक्रिया कोड बदलने की आवश्यकता है तो इसे आजमाएं। – Sergio

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