estoy aprendiendo primavera ahora. aquí está mi código de ejemplo. estoy usando jersey, spring, hibernate y mysql para mi servicio REST.

CustomerServiceImpl.java que es extremo REST (código parcial)

package com.samples.service.impl;

@Path("customers")
public class CustomerServiceImpl implements CustomerService {

    private static Logger logger = Logger.getLogger(CustomerServiceImpl.class);

    @Autowired
    CustomerBO customerBO;

aquí es CustomerBOImpl.java (código parcial)

package com.samples.BO.impl;

@Component
public class CustomerBOImpl implements CustomerBO {

    @Autowired
    CustomerDAO customerDAO;

    @Autowired
    CustomerAdapter customerAdapter;

CustomerDAOImpl.class
paquete com.muestras.DAO.impl;

@Repository
public class CustomerDAOImpl implements CustomerDAO {

este es applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
              http://www.springframework.org/schema/context 
              http://www.springframework.org/schema/context/spring-context-3.0.xsd
              http://www.springframework.org/schema/tx 
              http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

<context:property-placeholder location="classpath*:database.properties"/>
<context:component-scan base-package="com.samples"/>
<context:annotation-config />

</beans>    

este es el primer par de líneas de excepción por la que estoy recibiendo.

http-bio-8090-exec-1] [class: CustomerServiceImpl] INFO  - list all customers
[http-bio-8090-exec-1] [class: CustomerServiceImpl] INFO  - customerBO is null
May 08, 2014 10:55:29 AM com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
SEVERE: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container
java.lang.NullPointerException
    at com.samples.service.impl.CustomerServiceImpl.getAllCustomers(CustomerServiceImpl.java:40)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
    at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvo

este es web.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Employee Service</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:applicationContext.xml
</param-value>
</context-param>
<context-param>
<param-name>initializeContextOnStartup</param-name> 
<param-value>true</param-value> 
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener>
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.samples.service</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

así que si estoy en la comprensión de cómo esto funciona correctamente, estoy configuring xml tener mis componentes explorada automáticamente proporcionando el paquete en el que quiero correr autoscan. y para los objetos que quiero autowire. en CustomerServiceImpl clase, yo uso @autowired para customerBO objeto que debería haber sido analizado por @Componente de anotación en CustomerBOImpl.class definición. puede usted por favor ayuda ¿por qué mi auto-escaneo no está recogiendo los autowired customerBO objeto?
gracias.

estoy usando la primavera y el jersey. así que creo jersey debe buscar @Path para encontrar recursos?
sí, yo soy. la plena aplicación utiliza maven, spring, jersey, hibernate, c3p0, mysql. pero es todavía lite de peso ejercicio para mí. esto es simple servicio REST.
Recuerde tener que hacer esto – ver a este answer
¿Cómo son instancias de la CustomerServiceImpl? La primavera debe lanzar una excepción si no autowire una dependencia…
chris, estoy usando el jersey así que estoy usando @Ruta de anotación para jersey para recoger el recurso. yo no veo ninguna autowire dependencia de errores en el registro. es sólo que autowired bean es en realidad null que es mi problema.

OriginalEl autor user3590506 | 2014-05-08

4 Comentarios

  1. 4

    Sospecho que el problema es su CustomerServiceImpl clase se crean instancias fuera de la Primavera, ya sea por el contenedor de servlets o explícitamente en el código. Usted necesita tener la Primavera de crear instancias de ella (por lo que es un bean, etc) o el uso <context:spring-configured/>. No estoy seguro de si este último funcionará si el contenedor de servlet crea una instancia del objeto como es probable que dependen del orden en el que ocurren cosas…

    gracias por el comentario. mirando el enlace reimeus ha proporcionado por encima de stackoverflow.com/questions/19745187/… , creo que puede ser. estoy usando la primavera y el jersey. he utilizado la primavera de un servlet web.xml como sugiere el mencionado solución, y ya me había jersey de primavera de la dependencia de exclusión correctamente. pero sigue recibiendo null para autowire. seguirá desempeñando en torno a esta solución.

    OriginalEl autor Chris Thompson

  2. 1

    Primavera saber a autowire campos que han sido marcados como los frijoles. A partir de su código CustomerDAO no es un bean. Por ejemplo, para definir como un bean en el archivo de configuración xml que usted necesita para agregar
    <bean id="customerDao" class="com.packagesNames.CustomerDaoImpl"/> in the xml file.
    o para tener una clase anotado con @Component o tener definido con @Bean en un @Configuration clase.

    gracias por el comentario. yo no post CustomerDAOImpl código, pero tiene @Componente de anotación. el problema realmente está sucediendo anterior, donde CustomerBOImpl autowiring está fallando en CustomerServiceImpl. (acaba de actualizar cuestión principal, con CustomerDAOImpl código) también estoy tratando de evitar la definición de frijol en xml si es posible.

    OriginalEl autor m3th0dman

  3. 0

    Yo tenía el mismo problema. Mi inyectado de frijol en la clase de recurso que fue siempre como NULL.

    Pasé 2 días tratando de averiguar por qué yo no puedo inyectar la Primavera de Frijol en la JAX-RS clase de recursos. Luego me enteré de lo de abajo en la Jersey de documentación:

    «Limitaciones:

    Primavera frijoles no puede ser inyectado directamente en JAX-RS clases mediante el uso de
    XML de configuración de Spring»

    Nota: yo estaba usando Jersey 2 y la Primavera 3.x en mi proyecto.

    OriginalEl autor user3923737

Dejar respuesta

Please enter your comment!
Please enter your name here