【问题标题】:How do I get a JAX-RS application running on WebSphere 8.5如何让 JAX-RS 应用程序在 WebSphere 8.5 上运行
【发布时间】:2012-12-14 03:23:28
【问题描述】:

所以我正在尝试让 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到 http://localhost:[port]/war/rest/service

请帮忙!

【问题讨论】:

    标签: websphere jax-rs war ear


    【解决方案1】:

    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

    【讨论】:

      【解决方案2】:

      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;
          }
      }
      

      【讨论】:

      • 对不起,原来的帖子应该被混淆了,但事实并非如此。无论如何,我最后还没有尝试 getCount 。我以为它会使用PATH中的路径是不是这样?我会再试一次。另一方面,我将发布有关 wink 问题的更新。
      • 是的,没有骰子...localhost:[port]/war/rest/app/service/getCount给我... [时间] 000000a1 RequestProces I org.apache.wink.server.internal.RequestProcessor logException 在调用处理程序期间发生以下错误链:WebApplicationException (404 - Not Found) 在处理发送到 [url] 的 GET 请求时带有消息“null”
      • 我看完了,信不信由你,我认为这与 8.5 不支持任何低于 Servlet 3.0 的东西有关。这意味着我必须使用 ApplicationPath 注释。我会确认然后回答。
      【解决方案3】:

      该问题似乎与仅支持 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 但与它有特殊的集成,两者都应该工作。第一个示例显示了如何以旧方式进行操作。不过,如果您不打算支持旧的 WAS,最好采用新的方式。
      • 实际上我根本无法使用旧的工作方式。不确定这是否是我使用 Juno 和 8.5 或什么的 hacky 方式。但特别是在 8.5 上,只有新的方式有效。
      • 很高兴听到这个消息,我可能很快就会遇到这个问题
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2013-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-16
        • 1970-01-01
        • 2015-06-21
        相关资源
        最近更新 更多