java - WebSphere REST 服务错误 "FFDC Incident emitted"

标签 java web-services rest soap websphere

我有一个 Java EE 应用程序,其中有一对正在运行的 SOAP Web 服务。我正在尝试向同一应用程序添加 REST 调用;我正在关注 IBMdeveloperWorks A simple RESTful implementation 的页面

他们在 web.xml 中以以下形式给出行

<servlet>
  <servlet-name>a.b.c.RSApplication</servlet-name>
</servlet>

注意:servlet内没有servlet-class标签;我的 RAD xml validator 对此感到困扰并给我一个错误。他们确实为 servlet 映射映射了相同的类:

<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]:不是 servlet 类”

网页上的声明是“JAX-RS 感知 servlet 容器”允许上述 servlet 名称,并且“... 将 ... 模式映射到 [this] 类,并且 ... servlet 容器自动连接这些点,以便对 ... 模式的引用调用适当的资源类”(在我的示例中为 RS)。

我看到的唯一的其他区别是它们有 JSON 被消耗和生成,而我还没有。如果这是问题所在,我预计会出现不同的错误。

有人可以告诉我如何配置它以便发生这种神奇的点连接,或者甚至如何在 web.xml 中配置 servlet 类吗?

最佳答案

像这样配置你的 web.xml:

<servlet>
        <servlet-name>JAX-RS Servlet</servlet-name>
        <servlet-class>org.apache.wink.server.internal.servlet.RestServlet</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>a.b.c.RSApplication</param-value>
        </init-param>
     <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>JAX-RS Servlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

或者,如果您不想使用 xml 配置,则可以修改应用程序子类并使用注释 @ApplicationPath("rest"),如下所示:

@ApplicationPath("rest")
public class RSApplication extends Application{}

这应该可以解决您的问题。

关于java - WebSphere REST 服务错误 "FFDC Incident emitted",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31664685/

相关文章:

javascript - 使用 Node.js 连接到 REST API

http - 如果某些参数不是无效的,我应该响应什么http代码?

java - Oracle REST 数据服务 apex_pu

java - Jframe 上的位置

java - 通过java访问oracle sql字段

web-services - 来自 WebService 的 WMI 调用

c# - 是否可以为 ASPNET.Core OData 声明多个路由

Java-使用xpath-position设置xml元素

Java native 语言应用程序在 IDE 之外无法运行

SharePoint 自定义 Web 服务消耗问题 - HTTP 401 : Unauthorized