【发布时间】:2015-07-27 22:55:06
【问题描述】:
我有一个 Java EE 应用程序,其中包含一对正在运行的 SOAP Web 服务。我正在尝试将 REST 调用添加到同一个应用程序;我正在关注来自 IBM developerWorks 的页面 A simple RESTful implementation
他们在 web.xml 中以下列形式给出行
<servlet>
<servlet-name>a.b.c.RSApplication</servlet-name>
</servlet>
注意:servlet 中没有 servlet-class 标签;我的 RAD xml 验证器对此感到困扰并给我一个错误。他们确实为 servlet-mapping 映射了同一个类:
<servlet-mapping>
<servlet-name>a.b.c.RSApplication</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
RSApplication 类扩展了 Application,它不是 Servlet 扩展,如下所示:
public class RSApplication extends Application {
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
// Resources
classes.add(a.b.c.RS.class);
// Providers
return classes;
}
}
还有 RS 类:
@Path("/rabbit")
@Stateless
public class RS {
@POST
public Response s(@Context UriInfo uriInfo, Object o) {
return sImpl(uriInfo, o);
}
@GET
public Response s2(@Context UriInfo uriInfo, Object o) {
return sImpl(uriInfo, o);
}
private Response sImpl(UriInfo uriInfo, Object o) {
return null;
}
}
所有这些都遵循与他们的示例相同的格式。我在我的机器上的 RAD 中的 WebSphere 上运行它,但是服务器不会运行我的应用程序,而我的 web.xml 中缺少 servlet-class 标记。所以我回到那个并参加RS课程。我将 SoapUI 配置为向http://localhost:9094/contextroot/rest/rabbit 发送请求,
并返回“错误 404: javax.servlet.UnavailableException: SRVE0201E: Servlet [a.b.c.RS]: not a servlet class”
网页上的声明是“JAX-RS 感知 servlet 容器”允许上述 servlet 名称和“...将 ... 模式映射到 [this] 类,并且 ... servlet 容器自动连接点,以便对 ... 模式的引用调用适当的资源类”(在我的示例中为 RS)。
我看到的唯一其他区别是它们使用和生成 JSON,而我还没有。如果这是问题所在,我预计会出现不同的错误。
有人可以告诉我如何配置它以便可以发生这种神奇的点连接,或者甚至只是如何配置 web.xml 中的 servlet 类?
【问题讨论】:
标签: java web-services rest soap websphere