2011-10-03 18 views
7

Seguí this post y creado por el primer proveedor inyectable personalizado, un LocaleProvider que escanea la solicitud HTTP para el encabezado Accept-Language. Trabaja muy bien si lo uso en un recurso Jersey:Jersey: cómo usar InjectableProvider con @Context Annotation?

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

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

Pero cuando quiero utilizarlo en un ExceptionMapper No sé cómo inyectar la configuración regional. He tratado de hacer anotaciones como una variable miembro:

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

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

pero esta falla en la implementación:

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 

otras cosas como UriInfo o HttpServletRequest puedo ser inyectado por el estilo. ¿Cómo obtengo acceso a mi propio LocaleProvider?

FYI esto está en Glassfish 3.1.1 usando Jersey 1.8.

+0

Hola Hank, ¿alguna vez lograste que este LocaleProvider funcionara con un ExceptionMapper? –

+1

No. Implementé detección local en el ExceptionMapper. Probablemente debería cerrar esta pregunta ... – Hank

Respuesta

2

Hay una discrepancia de alcance. ExceptionMapper es un singleton, mientras que su inyectable es por solicitud de alcance. UriInfo funciona a su alrededor utilizando ThreadLocals.

+4

Gracias. En tu opinión, ¿cuál es la mejor manera de avanzar? ¿Puedo solucionarlo utilizando ThreadLocals también? ¿O no debería preocuparme por DRY y simplemente implementar el código de detección de configuración regional dentro de ExceptionMapper? – Hank

Cuestiones relacionadas