我使用resteasy 3.0.9 RESTful Web服务以及使用wildfly 10作为应用程序服务器的jsf 2.2和spring 4.3框架集成应用程序,我无法将spring bean注入restful类。以下是申请中的配置。
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>
我的服务类
@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
}
在pom.xml中
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-spring</artifactId>
<version>3.0.9.Final</version>
</dependency>
答案 0 :(得分:1)
REST轻松运行自己的上下文而不是Spring应用程序的春天,获取JAX-RS @Context以获取ServletContext。然后,您将能够获得spring应用程序上下文
@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();
}
}