3

所以我想让一个 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>

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

[TIME] 00000115 RequestProces I org.apache.wink.server.internal.RequestProcessor logException 在调用处理程序链期间发生以下错误:WebApplicationException (404 - Not Found) with message 'null' while processing GET request sent to http: //localhost:[端口]/war/rest/service

请帮忙!

4

4 回答 4

3

WAS8.5 支持 v2.4 和 v3 servlet。删除 web.xml 内容(并使用 3.0 代码)对您有用的原因是您的 web.xml 的 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

于 2013-07-23T15:46:59.013 回答
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;
    }
}
于 2012-12-14T09:41:51.603 回答
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

于 2012-12-14T17:54:33.107 回答
1

另外,您可以尝试购买更改以下 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

如需更多参考,请访问:如何部署 JAX-RS 应用程序?

于 2018-05-02T11:53:41.493 回答