WebSphere REST服务错误" FFDC事件发生"

时间:2015-07-27 22:55:07

标签: java web-services rest soap websphere

我有一个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映射映射了相同的类:

<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发送请求, 并返回&#34;错误404:javax.servlet.UnavailableException:SRVE0201E:Servlet [a.b.c.RS]:不是servlet类&#34;

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

我看到的另一个不同之处是他们已经消耗和生产了JSON,而我还没有。如果那是问题,我会期待一个不同的错误。

有人能指出我如何配置这个以便可以进行这种神奇的点连接,甚至只是如何在web.xml中配置servlet类?

1 个答案:

答案 0 :(得分:2)

像这样配置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{}

这可以解决您的问题。