2011-10-03 17 views
7

this post'u izledim ve Accept-Language üstbilgisi için HTTP İsteği'ni taranan ilk özel enjektabl sağlayıcı, LocaleProvider tarafından oluşturuldu.Jersey: @Context ek açıklama ile InjectableProvider nasıl kullanılır?

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

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

Ama bir ExceptionMapper kullanmak istediğimde yerel enjekte nasıl bilmiyorum: Bir Jersey kaynağı içinde kullanmak, düzgün çalışır. Bir üye değişken olarak açıklama denedim:

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

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

ama bu dağıtım başarısız:

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 

Diğer şeyler UriInfo gibi ya HttpServletRequest böyle enjekte edilebilir. Kendi LocaleProvider'ıma nasıl erişebilirim?

FYI bu, Jersey 1.8 kullanılarak Glassfish 3.1.1 üzerinde.

+0

Hey Hank, bu LocaleProvider'ın bir ExceptionMapper ile çalışmasını sağlayabildiniz mi? –

+1

Hayır. ExceptionMapper içinde yerel algılama gerçekleştirdim. Muhtemelen bu soruyu kapatmalıyım ... – Hank

cevap

2

Kapsam uyuşmazlığı var. ExceptionMapper bir singleton'dur, enjekte edilebilir durumunuz talep başınadır. UriInfo ThreadLocals kullanarak etrafında çalışır.

+4

Teşekkürler. Sizce, en iyi yol nedir? ThreadLocals'ı kullanarak da çalışabilir miyim? Ya da DRY konusunda endişelenmemeli ve sadece ExceptionMapper içindeki Locale-detection kodunu uygulamalı mıyım? – Hank

İlgili konular