Tag: jax rs

在Weblogic 12.1.1上使用Jersey 2.x Web服务

我正在尝试将Jersey 2.13 Web服务部署到Weblogic 12.1.1。 此版本的weblogic符合JSR-311 JAX-RS 1.1规范,而Jersey 2.x则提供JAX-RS 2.0的实现 Oracle有关于如何升级Jersey JAX-RS RI版本的说明: http : //docs.oracle.com/cd/E24329_01/web.1211/e24983/version.htm 但是,即使这样也无法解决所有部署问题。 我将应用程序打包在包含WAR的EAR中。 为了覆盖我已经包含的weblogic jar,我添加了以下weblogic-application.xml文件: javax.ws.rs.* com.google.common.* com.sun.jersey.* org.eclipse.persistence.jaxb.rs.* org.codehaus.jackson.jaxrs.* weblogic.jaxrs.api.client.* weblogic.jaxrs.internal.api.client.* weblogic.jaxrs.dispatch.* weblogic.jaxrs.monitoring.util.* 此配置在部署时给出以下错误消息: Caused By: java.lang.NoSuchMethodError: org.glassfish.hk2.api.ServiceLocatorFactory.create(Ljava/lang/String;Lorg/glassfish/hk2/api/ServiceLocator;Lorg/glassfish/hk2/extension/ServiceLocatorGenerator;Lorg/glassfish/hk2/api/ServiceLocatorFactory$CreatePolicy;)Lorg/glassfish/hk2/api/ServiceLocator; 如果我试图通过将它添加到prefer-application-packages来替换org.glassfish.hk2。*类,我会收到新的错误并且它会一直持续…… 有没有人将Jersey迁移到weblogic 12.1.1或更低版本的2.x版本? 谢谢!

CXF中的格式化XML输出?

我知道在使用Marshaller时如何打开格式的可能性。 但我正在使用Apache CXF(JAX-RS)并返回响应,如return Response.ok(entity).build(); 。 我没有找到任何选项如何格式化输出。 我该怎么做?

将Spring bean注入RestEasy

是否可以将Spring bean注入RestEasy @Path类? 我设法使用@InjectParam注释使用Jersey,但由于其他一些原因,我需要切换到RestEasy,我似乎无法找到一种方法(尝试好的”javax.inject.Inject,但没什么。 编辑 此解决方案有效: http : //www.mkyong.com/webservices/jax-rs/resteasy-spring-integration-example/ 但它不是注射..我仍然喜欢更优雅的东西。

在ContainerResponseFilter中获得响应(JAX-RS 2)

我试图将此CORSfilter移植到JAX-RS 2。 但是,我没有看到如何从ContainerResponseContext获取Response对象(如在旧代码中),我在ContainerResponseFilter的重写方法中传递。 如果有一种更优雅的方式来使用JAX-RS 2进行CORS,那当然是首选。 提前致谢。

AsynchronousDispatcher错误

当我尝试完全根据此处显示的示例上传文件时,我收到错误 错误是 为servlet com.testapp.rest.JaxRsActivator分配exception:java.lang.RuntimeException:无法找到类org.jboss.resteasy.core.AsynchronousDispatcher的公共构造函数 这意味着什么?

CXF / JAX-RS:从拦截器返回自定义响应

在REST调用期间发生exception时,我们需要返回自定义错误代码和错误消息。 我们已经创建了一个exception映射器提供程序,它适用于应用程序代码中的exception。 但是,当从CXF代码发生exception时(例如,形成我编写的CustomValidationInterceptor),它不起作用。 例如,如果我请求无效路径参数(例如无效的phoneNumber)。 在这种情况下,我们需要以JSON格式返回自定义错误代码和错误消息,但即使我们创建了一个exception映射器提供程序来处理WebApplicationException,它也不起作用。 有没有办法处理来自cxf拦截器的exception并返回对用户的响应,如下所示? { “errorDetail”: { “errorCode”: “404”, “errorMessage”: “Bad Request” } } 我的CustomValidationInterceptor的代码片段: public class CustomValidationInterceptor extends AbstractPhaseInterceptor{ public CustomValidationInterceptor() { super(Phase.PRE_INVOKE); // Put this interceptor in this phase } public void handleMessage(Message message) { MetadataMap metadataMap = (MetadataMap) message.get(“jaxrs.template.parameters”); if(null != metadataMap) { List list = metadataMap.get(“phoneNumber”); if(null != list) […]

在multithreading环境中重用JAX RS Client(具有resteasy)

根据文件, “客户端是管理客户端通信基础设施的重量级对象。初始化以及客户端实例的处理可能是一项相当昂贵的操作。因此建议在应用程序中仅构建少量客户端实例。” 好吧,我试图在一个静态变量中缓存Client本身和WebTarget实例,在multithreading环境中调用someMethod(): private static Client client = ClientBuilder.newClient(); private static WebTarget webTarget = client.target(“someBaseUrl”); … public static String someMethod(String arg1, String arg2) { WebTarget target = entrTarget.queryParam(“arg1”, arg1).queryParam(“arg2”, arg2); Response response = target.request().get(); final String result = response.readEntity(String.class); response.close(); return result; } 但有时(并非总是)我得到一个例外: BasicClientConnManager的使用无效:仍然分配了连接。 确保在分配另一个连接之前释放连接。 如何正确地重用/缓存Client / WebTarget? 是否可以使用JAX RS Client API? 或者我必须使用一些特定于框架的function(resteasy / […]

找不到媒体类型= application / json的MessageBodyReader

我写了一个JAX-RS服务器,客户端都使用Jersey。 我想将我的实体集合发送给客户端,我做了以下步骤: Made实体扩展了Serializable 写了一个自定义提供程序并将其扩展为支持集合 将实体和提供者复制粘贴到客户端 我发出请求,它在服务器端成功处理客户端收到错误: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/json, type=interface java.util.List, genericType=java.util.List. org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:225) org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:149) org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1124) org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:853) org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:812) org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:377) org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:813) org.glassfish.jersey.client.JerseyInvocation.access$600(JerseyInvocation.java:90) org.glassfish.jersey.client.JerseyInvocation$3.call(JerseyInvocation.java:693) org.glassfish.jersey.internal.Errors.process(Errors.java:315) org.glassfish.jersey.internal.Errors.process(Errors.java:297) org.glassfish.jersey.internal.Errors.process(Errors.java:228) org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424) org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:689) org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:405) org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:301) service.HotelService.getHotels(HotelService.java:30) actions.HotelAction.perform(HotelAction.java:42) MainServlet.processResponse(MainServlet.java:33) MainServlet.doPost(MainServlet.java:22) javax.servlet.http.HttpServlet.service(HttpServlet.java:641) javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 服务器: @GET @Produces(MediaType.APPLICATION_JSON) public Response getHotelsList(@QueryParam(“startDate”) String startDate, @QueryParam(“endDate”) String endDate) { List list = hotelService.getAll(); return […]

403使用AJAX进行PUT和DELETE时的状态(禁止)

我使用JAX-RS(Jersey 2.0)实现了一个小型REST API,我使用AJAX来调用API,GET和POST工作正常但是当我调用任何PUT或DELETE方法时,我得到的是以下内容错误信息: 无法加载资源:服务器响应状态为403(禁止) 以下是Java中DELETE方法的示例: @Path(“/deleteSomething”) @DELETE @Consumes(“application/json”) public void delete(String json) throws ParseException { JSONParser parser = new JSONParser(); Object obj = parser.parse( json ); JSONObject object=(JSONObject)obj; String id = (String) object.get(“id”); System.out.println(“ID : ” + id); //DO SOMETHING HERE } 这是使用AJAX的Javascript调用: function deleteSomethingAjax() { $.ajax({ url: API_URI + “/deleteSomething”, //API_URI is the API’s […]

从JAX-RS服务发送重定向

是否可以将JAX-RS Web服务重定向到另一个网页? 就像使用Servlet response.sendRedirect(“http://test/test.html”) 。 JAX-RS Web服务本身应该重定向。 如果相关,我正在使用RESTEasy。