我在Jboss 4.3.0.GA上使用RESTEasy 2.0.1.GA. 我的资源类实现的接口如下所示:
@Path("/")
public interface CwindRestfulService {
@GET
@Path("accounts/{email}")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Account getAccountInfo(@PathParam("email") String email) throws Exception;
}
当我在web.xml中设置resteasy.scan = true时,它可以正常工作。但春天语境应该是假的。所以现在我的web.xml是:
<web-app>
<display-name>Archetype RestEasy Web Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/applicationContext.xml</param-value>
</context-param>
<context-param>
<param-name>resteasy.resources</param-name>
<param-value>com.cwind.rest.CwindRestfulServiceImpl</param-value>
</context-param>
<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>/*</url-pattern>
</servlet-mapping>
</web-app>
我收到了这个错误:
2014-02-20 18:10:23,303 ERROR [org.apache.catalina.core.ContainerBase] Exception sending context initialized event to listener instance of class org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
java.lang.RuntimeException: Class is not a root resource. It, or one of its interfaces must be annotated with @Path: com.cwind.rest.CwindRestfulServiceImpl implements: com.cwind.rest.CwindRestfulService
这表明我错过了@Path而实际上我没有。但是当我将注释放到资源类时,它确实有效。我用Google搜索并在http://pilhuhn.blogspot.com/2011/06/seemingly-common-resteasy-error-and.html找到了解决方案。它需要添加@ApplicationPath注释。现在我的界面在第三方库中,所以我无法修改它。有人有什么建议吗?提前谢谢。
答案 0 :(得分:1)
您似乎尚未注册Resteasy特定SpringContextLoaderListener
。这是Spring向Resteasy注册扫描资源类所必需的。
下面是一个示例web.xml配置(这使用注释配置,但也适用于xml配置):
<!-- Spring Configuration -->
<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.myapp.SpringConfig</param-value>
</context-param>
<!-- RESTEasy Configuration -->
<listener>
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/</param-value>
</context-param>
<!-- RESTEasy <-> Spring Connector (Needed so that RESTEasy has access to Spring managed beans!) -->
<listener>
<listener-class>org.jboss.resteasy.plugins.spring.SpringContextLoaderListener</listener-class>
</listener>
<!-- RESTEasy HTTP Request Processor Servlet -->
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
然后,您只需使用@Component
或@Named
注释Spring的资源类,如下所示:
@Named
@Path("/")
public class MyResource implements CwindRestfulService
{
//Stuff Goes Here...
}