Rest 在IBM中使用Jersey 2.x时出现的问题是8.x扫描和注册JAX-RS资源

Rest 在IBM中使用Jersey 2.x时出现的问题是8.x扫描和注册JAX-RS资源,rest,jersey-2.0,websphere-8,Rest,Jersey 2.0,Websphere 8,我正在尝试将Jersey 2.22.1与IBM WAS 8.5.4进行集成。我在某个包(com.innovation.postdata.integration.rest.test.Jersey.resources)下有两个JAX-RS资源。其中一个JAX-RS资源如下所示: import javax.ws.rs.Consumes; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; impo

我正在尝试将Jersey 2.22.1与IBM WAS 8.5.4进行集成。我在某个包(com.innovation.postdata.integration.rest.test.Jersey.resources)下有两个JAX-RS资源。其中一个JAX-RS资源如下所示:

import javax.ws.rs.Consumes;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;

@Path("/service")
public class FileSubmissionTestRestService
{
    @PUT
    @Consumes({ "text/csv" })
    @Path("/file")
    public Response submitBordereaux (@QueryParam("forceResponse") String forceResponse)
    {

        if (forceResponse != null && !"".equals (forceResponse))
        {
            switch (forceResponse)
            {
                case "404":
                    return Response.status (Response.Status.NOT_FOUND).entity ("Resource Not Found!").build ();
                case "401":
                    return Response.status (Response.Status.UNAUTHORIZED).entity ("Unauthorized user!").build ();
                case "403":
                    return Response.status (Response.Status.FORBIDDEN).entity ("User not allowed!").build ();
                case "405":
                    return Response.status (Response.Status.METHOD_NOT_ALLOWED).entity ("Unsupported HTTP method!").build ();
                case "415":
                    return Response.status (Response.Status.UNSUPPORTED_MEDIA_TYPE)
                            .entity ("Media type not supported.It should be TEXT/CSV or APPLICATION/JSON!").build ();
                case "500":
                    return Response.status (Response.Status.INTERNAL_SERVER_ERROR).entity ("Error occured on server!").build ();
                default:
                    return Response.status (Response.Status.NO_CONTENT).build ();
            }
        }

        return Response.status (Response.Status.INTERNAL_SERVER_ERROR).entity ("Error occured on server!").build ();

    }

}
我在web.xml中添加了一个条目,如下所示

       <servlet>
              <servlet-name>JAX-RS REST Servlet</servlet-name>
              <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
              <init-param>
                     <param-name>jersey.config.server.provider.packages</param-name>                
                     <param-value>com.innovation.postdata.integration.rest.test.jersey.resources</param-value>
              </init-param>
              <load-on-startup>1</load-on-startup>
       </servlet>
       <servlet-mapping>
              <servlet-name>JAX-RS REST Servlet</servlet-name>
              <url-pattern>/rest/*</url-pattern>
       </servlet-mapping>

我正在使用Postman Rest客户端访问JAX-RS,但我总是得到200 OK,这是错误的。有人能帮我找出原因吗?为什么不尝试扫描包,只说servlet已成功初始化。

据我所知,Websphere中存在一个错误,阻止包扫描正常工作(仅当类位于WEB-INF/classes下,而不是WEB-INF/lib下时,它才起作用)

以下是一些信息:

我已通过以下方法解决了该问题:

public class MyRestApplication extends ResourceConfig {
  public MyRestApplication() {
    register(DefaultExceptionMapper.class);
    register(ConstraintViolationExceptionExceptionMapper.class);
    register(JacksonJsonProvider.class); 

    // does not work in IBM WAS 8.5.5 full profile: see it here
    // https://developer.ibm.com/answers/questions/169221/packagesresourceconfig.html
    // and
    // http://www-01.ibm.com/support/docview.wss?rs=180&uid=swg1PM99378 
    // packages(getClass().getPackage().getName(), LookupEndpoint.class.getPackage().getName());

    // Works under WAS 8.5
    registerClasses(LookupEndpoint.class, XEndpoint.class, YEndpoint.class);
  }
}


jersey_v2-servlet
org.glassfish.jersey.servlet.ServletContainer
javax.ws.rs.Application
x、 y.z.MyRestApplication
jersey.config.beanValidation.enableOutputValidationErrorEntity.server
真的
1.
这显然不是最优的(您必须自己维护要使用的端点列表),但至少它是有效的

public class MyRestApplication extends ResourceConfig {
  public MyRestApplication() {
    register(DefaultExceptionMapper.class);
    register(ConstraintViolationExceptionExceptionMapper.class);
    register(JacksonJsonProvider.class); 

    // does not work in IBM WAS 8.5.5 full profile: see it here
    // https://developer.ibm.com/answers/questions/169221/packagesresourceconfig.html
    // and
    // http://www-01.ibm.com/support/docview.wss?rs=180&uid=swg1PM99378 
    // packages(getClass().getPackage().getName(), LookupEndpoint.class.getPackage().getName());

    // Works under WAS 8.5
    registerClasses(LookupEndpoint.class, XEndpoint.class, YEndpoint.class);
  }
}
<servlet>
    <servlet-name>jersey_v2-servlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>        
      <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>x.y.z.MyRestApplication</param-value>
    </init-param>

    <init-param>
        <param-name>jersey.config.beanValidation.enableOutputValidationErrorEntity.server</param-name>
        <param-value>true</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
</servlet>