Intento inyectar servicios en una clase de descanso que utiliza Jersey.Integración de jersey y muelle: las inyecciones de bean son nulas en el tiempo de ejecución
No importa qué o cómo trato de inyectar en esta clase parece aparecer como nulo en el tiempo de ejecución. Buscar en los archivos de registro muestra que se llama al setJsonTestService cuando se inicializa la aplicación web y que no es nula en este momento. Pero, cuando se accede más tarde con una solicitud PUT a esta clase, es nulo.
Estoy completamente desconcertado.
La clase tiene el siguiente aspecto:
@Named
@Path("JsonTest")
public class JsonTest {
@Context
Request request;
@Context
UriInfo uriInfo;
protected final Logger log = Logger.getLogger(getClass());
private JsonTestService jsonTestService;
@Autowired
public void setJsonTestSerivce(JsonTestService jsonTestService) {
log.info("Setting JsonTestService.");
if (jsonTestService == null) {
log.info("JsonTestService is null at injection");
}
this.jsonTestService = jsonTestService;
}
@Inject
public ScrapIntermediate scrapIntermediate; // just a plain empty class with an is true method
@PUT
@Path("{id}")
@Produces(MediaType.APPLICATION_JSON)
public void putJson(@PathParam("id") String id) {
log.info("Putting some json at " + id);
if (scrapIntermediate == null) {
log.info("scrapIntermediate is null...");
}
if (jsonTestService != null) {
jsonTestService.sendUpdate();
} else {
log.info("jsonTestService is null...");
}
}
}
¿Alguna idea?
Actualización:
web.xml (Jersey)
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>EDAS</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
¿Cómo se asignan las solicitudes web a esta clase de Jersey? Parece que Spring crea una instancia de esta clase, pero Jersey crea otra instancia para usar en el manejo de las solicitudes. –
He actualizado la pregunta para mostrar la porción de Jersey de mi web.xml. Ese es el único otro lugar donde menciono a Jersey. – zclark
Y resuelto. El problema relacionado con Maven y mi Jersey importan causando que se importen tanto el contexto de primavera 2.5.6 como 3.0.5. Esto causó el conflicto de anotación y condujo a las diferentes instancias de la misma clase. Lo publicaré como respuesta una vez que me lo permita ... Gracias por la visión Matt. – zclark