Java:部署没有平针织的restful Web服务

时间:2013-05-18 12:05:40

标签: java web-services rest java-ee

提前致谢。我是Web服务的新手,当我尝试使用java部署restful web服务时,它会产生异常。我按照RESTful Java with JAX-RS学习Web服务,根据本书第3章,我尝试构建示例,在部署示例之后它将生成异常,我知道,我想念一些东西,但我不知道知道我错过了什么。以下是我的示例代码。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-  app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>RestfulTest</display-name>
<servlet>
<servlet-name>Rest</servlet-name>
<servlet-class>com.restfultest.controller.ShoppingApplication</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Rest</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

以下是课程

 public class ShoppingApplication extends Application {

private Set<Object> singletons = new HashSet<Object>();
private Set<Class<?>> empty = new HashSet<Class<?>>();
public ShoppingApplication() {
    singletons.add(new CustomerResources());
}

@Override
public Set<Class<?>> getClasses() {
    return empty;
}

@Override
public Set<Object> getSingletons() {
    return singletons;
}
  }

尝试在发生异常后部署应用程序时。

 java.lang.ClassCastException: com.restfultest.controller.ShoppingApplication cannot be cast to javax.servlet.Servlet
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)

这是一个愚蠢的问题我知道,ShoppingApplication不是servlet类,但是根据本书,它是servlet类。要调用此服务,我使用chrome restful client。请建议我如何使用chrome restful client以及如何使用此客户端发送XMLJSON请求。

3 个答案:

答案 0 :(得分:1)

问题是你告诉你的类是一个不正确的servlet。您所关注的文档中必定存在问题。看一下这个http://www.ibm.com/developerworks/library/wa-aj-tomcat/

答案 1 :(得分:1)

你应该

<servlet-name>com.restfultest.controller.ShoppingApplication</servlet-name>

且没有servlet-class。泽西项目对various options of deploying JAX-RS 1.1 applications有很好的参考,包括this specific case

另请注意,这仅适用于Servlet 3.0。在早期的servlet规范中,您必须提供实现JAX-RS容器的实际servlet类,如Jersey's ServletContainer

答案 2 :(得分:1)

出现此问题是因为Tomcat Container不了解JAX-RS。因此,要定义JAX-RS的实现,我们需要添加第三方库。当我添加Jersey lib并在容器中添加Jersey servlet定义时,我的示例运行成功。以下是`web.xml

...............................
<servlet>
<servlet-name>Rest</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
  <init-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>com.restfultest.controller.ShoppingApplication</param-value>
  </init-param>
</servlet>

<servlet-mapping>
<servlet-name>Rest</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
..................................