如何在WebSphere 8.5上运行JAX-RS应用程序

时间:2012-12-14 03:23:29

标签: websphere jax-rs war ear

所以我想让一个JAX-RS应用程序在我的WebSphere 8.5实例上运行。我创建了以下界面......

@Path("service")
public class RestService {

    @GET
    @Produces("text/plain")
    public int getCount(){
        return 1;
    }
}

这是我的申请......

public class RESTConfig extends Application{
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new Hashset<?>();
        classes.add(RestService.class);
        return classes;
    }
}

然后这是我的web.xml ...

<servlet>
    <servlet-name>Rest Servlet</servlet-name>
    <servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
    <init-param>
    <param-name>jaxrs.ws.rs.Application</param-name>
        <param-value>com.company.rest.RESTConfig</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
....
<servlet-mapping>
    <servlet-name>Rest Servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>

然后我将EAR配置为WAR作为模块。但当我开始一切并尝试去http:// localhost:[port] / war / rest / app / service时,我看到..

  

[TIME] 00000115 RequestProces I org.apache.wink.server.internal.RequestProcessor logException在调用处理程序链期间发生以下错误:WebApplicationException(404 - Not Found),在处理GET请求时发送消息“null”到http:// localhost:[port] / war / rest / service

请帮助!

4 个答案:

答案 0 :(得分:3)

WAS8.5支持v2.4和v3 servlet。删除web.xml内容(以及使用3.0代码)的原因是因为你在web.xml的param-name标签中有错误。当您使用正确的param-name时,v2.4 servlet在WAS8.5中正常工作。

这是不正确的。

<param-name>jaxrs.ws.rs.Application</param-name>

这是正确的:

<param-name>javax.ws.rs.Application</param-name>

详细说明: http://pic.dhe.ibm.com/infocenter/wasinfo/v8r5/topic/com.ibm.websphere.nd.multiplatform.doc/ae/twbs_jaxrs_configwebxml.html

答案 1 :(得分:1)

RestConfig类(定义为JAX-RS应用程序)应覆盖getClasses以返回资源:

@Path("app")
public class RESTConfig extends Application{
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new Hashset<?>();
        classes.add(RestService.class);

        return classes;
    }
}

答案 2 :(得分:1)

该问题似乎与仅支持v3 servlet的8.5有关。这似乎解决了这个问题......

@Path("service")
public class RestService {

    @GET
    @Produces("text/plain")
    public String getCount(){
        //Text-Plain cannot be int apparently
        return String.valueOf(1);
    }
}

@ApplicationPath("rest")
public class RESTConfig extends Application{
   //Override no longer needed.
}

现在应该部署好......

这是我的来源IBM

答案 3 :(得分:0)

此外,您可以尝试购买更改以下web.xml文件

<servlet>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

此外,在项目构面中 - 将Web模块版本更改为3.0

更多参考访问:How to deploy a JAX-RS application?