Rest 在IBM中使用Jersey 2.x时出现的问题是8.x扫描和注册JAX-RS资源
我正在尝试将Jersey 2.22.1与IBM WAS 8.5.4进行集成。我在某个包(com.innovation.postdata.integration.rest.test.Jersey.resources)下有两个JAX-RS资源。其中一个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
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>