2013-02-27 215 views
9

पर नाम बाइंडिंग के माध्यम से विशिष्ट विधि के साथ मिलान करें, मैं RESTeasy documentation सुझावों का पालन करके, मेरे कुछ एपीआई कॉल से जुड़ा हुआ एक प्री-मेलिंग फ़िल्टर निर्दिष्ट करने का प्रयास कर रहा हूं।रीस्टेसी

नाम बाध्यकारी:: यहाँ की तरह क्या मेरी कोड दिखता है

@NameBinding 
public @interface ValidateFoo {} 

संसाधन:

@Path("/foo/bar") 
@Produces(MediaType.APPLICATION_JSON) 
public class FooBar { 
    @GET 
    @ValidateFoo 
    public Object doStuff() { 
     //do stuff 
    } 

    @POST 
    public Object doAnotherStuff() { 
     //do another stuff 
    } 
} 

फिल्टर:

@ValidateFoo 
@Provider 
@PreMatching 
public class FooValidation implements ContainerRequestFilter { 
    @Override 
    public void filter(ContainerRequestContext reqContext) throws IOException { 
     //validate stuff 
    } 
} 

समस्या है: FooValidation फिल्टर हर से पहले चलाता है विधि कॉल (उदाहरण: जीईटी और POSTs से पहले/foo/bar), चालू नहीं @ValidateFoo के साथ एनोटेटेड गीत (मुझे एक बग लगता है)। अगर मैं फ़िल्टर से @Provider एनोटेशन हटा देता हूं, तो यह किसी भी कॉल (अपेक्षित के रूप में) से पहले नहीं चलेगा।

मैं वेबलॉगिक या टॉमकैट का उपयोग करके लगातार इस व्यवहार को देख रहा हूं। मेरा निर्भरता प्रबंधन मैवेन के माध्यम से किया जाता है, और रीस्टेसी संस्करण 3.0-बीटा -3 है।

कोई भी व्यक्ति एक ही व्यवहार का अनुभव/अनुभव कर रहा है? मैंने JBoss forums पर एक और समस्या के साथ एक और उपयोगकर्ता को देखा है, अब तक कोई किस्मत नहीं है।

अद्यतन: अभी भी RESTeasy 3.0.1-Final के साथ एक ही समस्या का सामना करना पड़ रहा है।

उत्तर

7

मुझे भी इसी तरह की समस्या थी। मेरे लिए समाधान निम्नलिखित एनोटेशन कॉन्फ़िगरेशन (@ValidateFoo को) जोड़ने के लिए था:

@Target({ ElementType.TYPE, ElementType.METHOD }) 
@Retention(value = RetentionPolicy.RUNTIME) 
@NameBinding 
+0

आपके सुझाव के लिए धन्यवाद। मैंने कोशिश की, लेकिन बदलाव के बाद भी, फ़िल्टर अभी भी मेरे ऐप पर प्रत्येक कॉल से पहले कॉल किया जा रहा है, न कि केवल @ValidateFoo के साथ एनोटेटेड। – Viccari

+4

ठीक है, अब हम इसे काम करने में सक्षम थे। ऐसा लगता है कि रीस्टेसी को '@ प्रीमैचिंग' एनोटेशन पसंद नहीं आया। अपने सुझाव का पालन करके और '@ प्रीमैचिंग' एनोटेशन को हटाकर, सबकुछ अपेक्षित के रूप में काम करता था। धन्यवाद! – Viccari

+3

यह समझ में आता है, क्योंकि '@ प्रीमैचिंग' का मतलब रीस्टेसी संसाधन के अनुरोध को मैप करने से पहले है, इसलिए उस बिंदु पर रीस्टेसी को पता नहीं है कि कोई नेमबाइंडिंग है या नहीं। – stackoverflower