2011-10-03 9 views
7

मैंने this post का पालन किया और पहले कस्टम इंजेक्शन योग्य प्रदाता, LocaleProvider द्वारा बनाया गया जो स्वीकार्य-भाषा शीर्षलेख के लिए HTTP अनुरोध स्कैन करता है। यह ठीक काम करता है अगर मैं इसे एक जर्सी संसाधन के भीतर का उपयोग करें:जर्सी: @Context एनोटेशन के साथ इंजेक्शन योग्य प्रदाता का उपयोग कैसे करें?

@Path("test") 
@GET 
public Response getStatus(@Context Locale locale) { 
    log.finer("Locale: "+ locale); 

    Response response = Response 
      .noContent() 
      .build(); 
    return response; 
} 

लेकिन मैं कैसे स्थान इंजेक्षन नहीं जानते कि जब मैं एक ExceptionMapper में इसका इस्तेमाल करना चाहते हैं। UriInfo तरह

The following errors and warnings have been detected with resource and/or provider classes: 
SEVERE: Missing dependency for field: private java.util.Locale com.package.MyExceptionMapper.locale 

अन्य बातों या HttpServletRequest ऐसा इंजेक्ट किया जा सकता: मैं एक सदस्य चर के रूप में उस पर टिप्पणी करने के लिए कोशिश की है:

public class MyExceptionMapper implements ExceptionMapper<MyException> { 
    @Context 
    private Locale locale; 

    @Override 
    public Response toResponse(MyException ex) { 
    ... 
    } 
} 

लेकिन इस तैनाती पर विफल रहता है। मैं अपने लोकेलप्रोवाइडर तक पहुंच कैसे प्राप्त करूं?

एफवाईआई यह जर्सी 1.8 का उपयोग कर ग्लासफ़िश 3.1.1 पर है।

+0

अरे हैंक, क्या आप कभी भी इस LocaleProvider को ExceptionMapper के साथ काम करने में सक्षम थे? –

+1

नहीं। मैंने ExceptionMapper के अंदर लोकेल-डिटेक्शन लागू किया है। मुझे शायद इस सवाल को बंद करना चाहिए ... – Hank

उत्तर

2

एक गुंजाइश मेल नहीं है। अपवाद मैपर एक सिंगलटन है, जबकि आपका इंजेक्शन योग्य प्रति-अनुरोध है। UriInfo ThreadLocals का उपयोग कर इसके आसपास काम करता है।

+4

धन्यवाद। आपकी राय में, आगे का सबसे अच्छा तरीका क्या है? क्या मैं थ्रेडलोकल्स का उपयोग करके इसके आसपास भी काम कर सकता हूं? या मुझे DRY के बारे में चिंता नहीं करनी चाहिए और ExceptionMapper के अंदर लोकेल-डिटेक्शन कोड को लागू करना चाहिए? – Hank

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