2016-11-24 1 views
1

J'utilise reseasy 3.0.9 services web RESTful avec jsf 2.2 et le printemps 4.3 application intégrée de cadre en utilisant wildfly 10 comme serveur d'application, je ne pouvais pas en mesure d'injecter le haricot de printemps dans le repos classe. ci-dessous est la configuration dans l'application.spring @Autowire annotation ne fonctionne pas dans la classe resteasy

in web.xml 

    <context-param> 
    <param-name>contextClass</param-name> 
    <param-value> 
     org.springframework.web.context.support.AnnotationConfigWebApplicationContext 
    </param-value> 
</context-param> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>com.test.config.AppConfig</param-value> 
</context-param> 

<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 


    <listener> 
    <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class> 
    </listener> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<servlet> 
    <servlet-name>resteasy</servlet-name> 
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>resteasy</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 

    <context-param> 
    <param-name>resteasy.servlet.mapping.prefix</param-name> 
    <param-value>/rest</param-value> 
    </context-param> 

    <context-param> 
    <param-name>resteasy.resources</param-name> 
    <param-value>com.test.rest.PrintService</param-value> 
    </context-param> 

Ma classe de service

@Path("/customer") @Component 
    public class PrintService { 

    @Autowired // not working allways gives nullpointerexception 
    CustomerBo customerBo; 

    @GET 
    @Path("/print") 
    public Response printMessage() { 

    //  customerBo = (CustomerBo) SpringApplicationContext.getBean("customerBo"); here bean is getting injected 

     String result = customerBo.getMsg(); 

     return Response.status(200).entity(result).build(); 

    } 

    } 

@Component 
public class CustomerBo { 

    @PersistenceContext 
    EntityManager entityManager; 

    @Autowired 
    Bean2 bean2; 

    public String getMsg() { 

     entityManager.createQuery("Select * from employee e"); // nullpointerException 
     return "RESTEasy + Spring example" + bean2.msgFromBean2(); //nullpointerException 

} 

dans pom.xml

<dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-spring</artifactId> 
     <version>3.0.9.Final</version> 
    </dependency> 

Répondre

1

REST fonctionne facilement sur propre contexte autre que le printemps de l'application de printemps, Get JAX-RS @Context pour obtenir le ServletContext. Ensuite, vous seriez en mesure d'obtenir un contexte d'application de printemps

@Path("/customer") @Component 
public class PrintService { 

@Context ServletContext servletContext; 

@GET 
@Path("/print") 
public Response printMessage() { 

ApplicationContext ctx = 
       WebApplicationContextUtils.getWebApplicationContext(servletContext); 

customerBo = (CustomerBo) customerBo= ctx.getBean("customerBo",CustomerBo.class); 

    String result = customerBo.getMsg(); 

    return Response.status(200).entity(result).build(); 

} 

} 
les variables
+0

autowired l'intérieur customerBo est également nulle pour ex: @peristenceContext entityManager me donner AllWays null – kim

+0

pouvez-vous mettre à jour votre définition haricot customerBo – kuhajeyan

+0

ajouté customerBo définition – kim