如何在WebSphere8.5上运行JAX-RS应用程序

如何在WebSphere8.5上运行JAX-RS应用程序,websphere,jax-rs,war,ear,Websphere,Jax Rs,War,Ear,因此,我正在尝试让一个JAX-RS应用程序在我的WebSphere8.5实例上运行。我创建了以下界面 @Path("service") public class RestService { @GET @Produces("text/plain") public int getCount(){ return 1; } } 这是我的申请表 public class RESTConfig extends Application{ @Overr

因此,我正在尝试让一个JAX-RS应用程序在我的WebSphere8.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;
    }
}
public类RESTConfig扩展应用程序{
@凌驾
public Set>classes=new Hashset();
添加(RestService.class);
返回类;
}
}
然后这是我的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>

RESTservlet
com.ibm.websphere.jaxrs.server.IBMRestServlet
jaxrs.ws.rs.Application
com.company.rest.RESTConfig
1.
....
RESTservlet
/休息/*
然后,我将WAR配置为一个模块。但当我开始做每件事并尝试http://localhost:[端口]/war/rest/app/service我明白了

[TIME]00000115 RequestProces I org.apache.wink.server.internal.RequestProcessor logException在调用处理程序链期间发生以下错误:在处理发送到的GET请求时,WebApplicationException(404-未找到)出现消息“null”http://localhost:[端口]/战争/休息/服务


请帮忙

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;
    }
}
@Path(“应用程序”)
公共类RESTConfig扩展了应用程序{
@凌驾
public Set>classes=new Hashset();
添加(RestService.class);
返回类;
}
}

该问题似乎与仅支持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.
}
现在应该部署好了


这是我的源代码

WAS8.5支持v2.4和v3 servlet。删除web.xml内容(并使用3.0代码)对您有效的原因是您在web.xml的param name标记中出错。当您使用正确的参数名时,v2.4servlet在WAS8.5中工作良好

这是不正确的

<param-name>jaxrs.ws.rs.Application</param-name>
jaxrs.ws.rs.Application
这是正确的:

<param-name>javax.ws.rs.Application</param-name>
javax.ws.rs.Application
详情:

此外,您可以尝试更改下面的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>

javax.ws.rs.core.Application
1.
javax.ws.rs.core.Application
/休息/*
此外,在Project Facets中,将Web模块版本更改为3.0


有关更多参考信息,请访问:

很抱歉,原来的帖子应该是模糊的,没有。无论如何,我还没有在最后尝试getCount。我想它会使用路径中的路径,不是吗?我会再试一次。另一方面,我会发布一个关于我在wink上遇到的问题的更新。是的,没有骰子。。。给我。。。[Time]000000 A1 RequestProces I org.apache.wink.server.internal.RequestProcessor logException在调用处理程序链期间发生以下错误:处理发送到[url]的GET请求时,WebApplicationException(404-未找到)出现消息“null”我已经看完了,信不信由你,我认为这与8.5不支持低于Servlet 3.0的任何东西有关。这意味着我必须使用ApplicationPath注释。我会确认,然后回答。看起来它不支持只有3.0,但与它有特殊的集成,两者都应该工作。第一个例子展示了如何用老方法来做。不过,如果你不打算支持老年人的话,还是用新的方式做比较好。事实上,我根本无法用旧的方式工作。我不确定这是不是我用朱诺和8.5之类的黑客方式。但特别是在8.5版本,只有新的方式起作用。很高兴听到这个消息,我可能会在很短的时间内遇到这个问题