响应状态!= 200之前重新格式化/覆盖Jersey响应对象,然后响应返回给客户端

时间:2015-09-11 22:10:48

标签: jersey

我从Jersey 2.5.1迁移到Jersey 2.12。我的服务和客户端使用java 7在Webshere应用服务器8.5上运行。在运行测试我的Jersey服务的测试类时,当客户端/测试类尝试读取实体/消息体时,我收到以下异常。使用以下代码进行响应。

MainFormImportErrorResp mfier = response.readEntity(MainFormImportErrorResp.class);

在查看客户端实际接收的Response对象之后,我注意到它不是由服务构建的Response对象。

该服务构建了一个响应对象,该对象包含一个xml版本的MainFormImportErrorResp对象作为其主体/实体和一个Content-Type头=“application / xml”。但是,客户端收到的Response对象包含Content-Type header =“text / html”以及由状态代码500及其相应的消息文本组成的实体/主体 - 也称为“错误500:内部服务器错误”。

只有在响应状态为!= 200时才会重新格式化响应。因此,当响应状态为!= 200时,Jersey会重新格式化Response对象,导致异常。

此代码在Jersey版本2.5.1下运行,并且我已经成功测试了Jersey版本2.7。但是,在2.7之后的所有Jersey版本中,代码失败并出现了例外情况。

我的问题: 是否有一个默认设置导致我可以关闭?如果是这样,我该如何关闭它?如果没有默认设置,是什么导致我的响应被重新格式化?谢谢。

例外:

  

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:   找不到媒体类型= text / html的MessageBodyReader;   charset = ISO-8859-1,type = class   com.ibm.mskhouse.prts.ws.rest.beans.jaxb.formimportsvc.MainFormImportErrorResp,   genericType =类   com.ibm.mskhouse.prts.ws.rest.beans.jaxb.formimportsvc.MainFormImportErrorResp。           at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor $ TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:230)           在org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:154)           在org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1124)           at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:851)           at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:783)           在org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:326)           在org.glassfish.jersey.client.InboundJaxrsResponse $ 1.call(InboundJaxrsResponse.java:111)           在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:399)           at org.glassfish.jersey.client.InboundJaxrsResponse.readEntity(InboundJaxrsResponse.java:108)           在com.ibm.mskhouse.prts.actions.program.create.CreateProgramImportAction.createProgramImport(CreateProgramImportAction.java:217)           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95)           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)           在java.lang.reflect.Method.invoke(Method.java:620)           at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)           在org.apache.struts.actions.LookupDispatchAction.execute(LookupDispatchAction.java:252)           在org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)           在org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)           在org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)           在org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)

0 个答案:

没有答案