2011-03-17 17 views
5

मैंने अपने वेब सेवा कॉल पूरा होने के बाद HTTP प्रतिक्रिया पर हेडर मान सेट करने की अनुमति देने के लिए एक रेस्ट्रेसी इंटरसेप्टर बनाया है। मेरा कोड इस तरह दिखता है ...रेस्ट्रेसी इंटरसेप्टर को कॉल नहीं किया जा रहा है

@Provider 
@ServerInterceptor 
@Precedence("HEADER_DECORATORS") 
public class MyHeaderInterceptor implements 
     MessageBodyWriterInterceptor { 

    @Override 
    public void write(MessageBodyWriterContext context) throws IOException, 
      WebApplicationException { 

      ....do stuff here.... 
     } 
} 

जब मैं अपनी सेवा में कॉल करता हूं, हालांकि, इंटरसेप्टर को कभी नहीं कहा जाता है। मैं webservice कॉल सफलतापूर्वक पूर्ण देखता हूं, लेकिन मेरे इंटरसेप्टर में किसी भी कोड को कभी भी निष्पादित नहीं किया जाता है। क्या इससे परे कुछ भी है कि मुझे अपने इंटरसेप्टर को पंजीकृत करने के लिए क्या करना है? क्या इसे कहीं और घोषित किया जाना है? क्या कोई विशेष वेब.एक्सएमएल पैरामीटर शामिल हैं जिन्हें शामिल करने की आवश्यकता है?

उत्तर

8

आपको अपने web.xml के resteasy.providers संदर्भ-param में इंटरसेप्टर सूचीबद्ध करना होगा। इंटरसेप्टर कक्षा में एनोटेशन जोड़ना पर्याप्त नहीं है।

<context-param> 
     <param-name>resteasy.providers</param-name> 
     <param-value>org.resteasy.test.ejb.exception.FooExceptionMapper</param-value> 
</context-param> 
1

Resteasy 2.x के लिए के रूप में आप भी इसे करने के लिए स्वचालित रूप से स्कैन वेब-INF/lib जार और दोनों @Provider और JAX-आरएस संसाधन वर्गों के लिए वेब-INF/कक्षाएं निर्देशिका (@Path, @GET हो सकता था , @POST आदि ..) और उन्हें रजिस्टर:

<context-param> 
    <param-name>resteasy.scan</param-name> 
    <param-value>true</param-value> 
</context-param> 

या @Provider कक्षाओं के लिए स्कैन करें और उन्हें रजिस्टर करने के लिए Resteasy हो सकता है: स्पष्ट रूप से इंटरसेप्टर सूची है

<context-param> 
    <param-name>resteasy.scan.providers</param-name> 
    <param-value>true</param-value> 
</context-param> 

दोनों ही मामलों आप न में web.xml में

अन्यथा यदि संदर्भ-पैराम्स 'resteasy.scan' और 'resteasy.scan.providers' दोनों सक्षम नहीं हैं (और वे डिफ़ॉल्ट रूप से अक्षम हैं) तो आप पूरी तरह से योग्य @ प्रदाता वर्ग नामों की अल्पविराम सीमांकित सूची निर्दिष्ट करना चाह सकते हैं आप 'resteasy.providers' तत्व के अंदर पंजीकृत करना चाहते हैं:

<context-param> 
    <param-name>resteasy.providers</param-name> 
    <param-value>com.test.Interceptor1,com.test.Interceptor2</param-value> 
</context-param> 

दस्तावेज़ से लिया है कि: http://docs.jboss.org/resteasy/docs/2.3.3.Final/userguide/html_single/index.html#d0e72

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