使用Tomcat轻松实现Rest

时间:2011-08-03 06:09:03

标签: rest tomcat java-ee resteasy

我有一个带有一组jsp的动态Web项目和一个自定义控制器servlet,它运行良好。但是,我还需要在其上实现一个简单的休息服务,这就是我改变网络的原因。 xml还包含rest easy servlet。和调用其余简单资源的应用程序类。但是,当我向web.xml添加更改时,它正在使用rest servlet,但抛出异常..

java.lang.ClassNotFoundException: org.scannotation.AnnotationDB$CrossReferenceException

Web.xml:

   <servlet>
<display-name>ControllerServlet</display-name>
<servlet-name>ControllerServlet</servlet-name>
<servlet-class>com.example.ControllerServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet>
<servlet-name>CollRestApi</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
    <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>com.exampl.RestApiApplication</param-value>
    </init-param>
 </servlet>
<servlet-mapping>
    <servlet-name>ControllerServlet</servlet-name>
    <url-pattern>/ControllerServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>CollRestApi</servlet-name>
    <url-pattern>/or/*</url-pattern>
</servlet-mapping>

休息Api申请:

public class RestApiApplication extends Application{

private Set<Object> singletons = new HashSet();
private Set<Class<?>> empty = new HashSet();

public RestApiApplication() {
    // ADD YOUR RESTFUL RESOURCES HERE
    this.singletons.add(new CollRestApi());
}

public Set<Class<?>> getClasses()
{
    return this.empty;
}

public Set<Object> getSingletons()
{
    return this.singletons;
}}

并且CollRestApi ..正在暴露服务..

   @Path("api")@Consumes({ "application/xml", "application/json" })@Produces({application/xml", "application/json" })public class CollRestApi {

/**
 * @return
 */
@GET
@Path("ab")
public Response do() {
    System.out.println("Inside the do Method.");

}}

3 个答案:

答案 0 :(得分:4)

显然,您需要将scannotation.jar添加到类路径中。 RESTEasy 2.2.2.GA依赖于scannotation-1.0.3和javassist-3.12.1.GA.jar,你也需要它。

答案 1 :(得分:4)

我使用maven和netbeans时遇到了同样的问题。答案是将jboss maven存储库添加到您的pom.xml文件中。只需添加<dependency>....</dependency>,例如通过使用netbeans maven浏览器,不会安装resteasy的dependecies。

<repositories>
        <repository>
            <id>jboss</id>
            <url>http://repository.jboss.org/nexus/content/groups/public-jboss/</url>
        </repository>
</repositories>

答案 2 :(得分:0)

我遇到了同样的异常,并修复了这个:

你是否有可能在不同的位置(例如tomcat lib目录)拥有resteasy **。jar库,而不是像scannotation-1.0.3.jar这样的其他支持lib的文件(例如在你的war文件WEB-INF /中) lib)?

在这样的配置中,你的resteasy类将从另一个没有看到scannotation-1.0.3.jar类的类加载器开始。

=&GT;尝试将所有resteasy jar文件放在其中一个位置(最好是.war文件)。