如何从 Camel cxfrs 中的 REST 404 响应访问有效负载?
How to access payload from REST 404 response in Camel cxfrs?
我有一个访问 REST 服务的 Camel 路由。如果 REST 响应为 200 正常,则一切正常。但是,如果响应是 404,REST 服务 returns 负载中的一些附加信息,我找不到访问的方法。
这是来自 运行 的调试日志的一部分:
[Camel (rraaCamelContext) thread #2 - seda://from_rraa] INFO org.apache.cxf.interceptor.LoggingInInterceptor - Inbound Message
----------------------------
ID: 2
Response-Code: 404
Encoding: ISO-8859-1
Content-Type: application/json
Headers: {Accept=[application/json], breadcrumbId=[ID-Steves-MacBook-Pro-local-53701-1446241733043-1-7], content-type=[application/json], OriginalHeader=[{name=VerifyEmployeeRequest, version=1, scac=rraa, timeSent=null, uuid=abcd-1234}], pin=[1234], reason=[INIT], Server=[Jetty(9.2.11.v20150529)], transfer-encoding=[chunked], User-Agent=[Apache CXF 3.1.2]}
Payload: { "employeeID": "bad-name", "message": "id not found" }
我的路线设置为:
<route id="rraaIss">
<from uri="seda:from_rraa"/>
<process ref="issPreprocessor"/>
<unmarshal ref="IssRequest"/>
<process ref="webServiceProcessor"/>
<to uri="cxfrs:bean:webService"/>
<onException>
<exception>javax.ws.rs.NotFoundException</exception>
<handled><constant>true</constant></handled>
<to uri="bean:crewServiceNotFoundProcessor"/>
</onException>
<process ref="packageWebServiceReplyForIss"/>
<to uri="seda:to_rraa"/>
</route>
我的 crewServiceNotFoundProcessor
bean 在响应为 404 时被调用并且它可以看到异常,但是我如何从原始 HTTP 响应中获取有效负载?
我现在有这个工作。主要问题是我将 REST 操作定义为:
@GET
@Path(value="/authentication/{scac}/employees/{id}")
@Produces({ MediaType.APPLICATION_JSON })
public String verifyEmployee(@PathParam("scac") String scac,
@PathParam("id") String id,
@QueryParam("pin") String pin,
@QueryParam("reason") String reason);
当我将 return 类型从 String 更改为 Response 时,完整的 Response 现在可用,throwExceptionOnFailure=false 选项现在也可以使用。所以,这是一个新手错误。
我有一个访问 REST 服务的 Camel 路由。如果 REST 响应为 200 正常,则一切正常。但是,如果响应是 404,REST 服务 returns 负载中的一些附加信息,我找不到访问的方法。
这是来自 运行 的调试日志的一部分:
[Camel (rraaCamelContext) thread #2 - seda://from_rraa] INFO org.apache.cxf.interceptor.LoggingInInterceptor - Inbound Message
----------------------------
ID: 2
Response-Code: 404
Encoding: ISO-8859-1
Content-Type: application/json
Headers: {Accept=[application/json], breadcrumbId=[ID-Steves-MacBook-Pro-local-53701-1446241733043-1-7], content-type=[application/json], OriginalHeader=[{name=VerifyEmployeeRequest, version=1, scac=rraa, timeSent=null, uuid=abcd-1234}], pin=[1234], reason=[INIT], Server=[Jetty(9.2.11.v20150529)], transfer-encoding=[chunked], User-Agent=[Apache CXF 3.1.2]}
Payload: { "employeeID": "bad-name", "message": "id not found" }
我的路线设置为:
<route id="rraaIss">
<from uri="seda:from_rraa"/>
<process ref="issPreprocessor"/>
<unmarshal ref="IssRequest"/>
<process ref="webServiceProcessor"/>
<to uri="cxfrs:bean:webService"/>
<onException>
<exception>javax.ws.rs.NotFoundException</exception>
<handled><constant>true</constant></handled>
<to uri="bean:crewServiceNotFoundProcessor"/>
</onException>
<process ref="packageWebServiceReplyForIss"/>
<to uri="seda:to_rraa"/>
</route>
我的 crewServiceNotFoundProcessor
bean 在响应为 404 时被调用并且它可以看到异常,但是我如何从原始 HTTP 响应中获取有效负载?
我现在有这个工作。主要问题是我将 REST 操作定义为:
@GET
@Path(value="/authentication/{scac}/employees/{id}")
@Produces({ MediaType.APPLICATION_JSON })
public String verifyEmployee(@PathParam("scac") String scac,
@PathParam("id") String id,
@QueryParam("pin") String pin,
@QueryParam("reason") String reason);
当我将 return 类型从 String 更改为 Response 时,完整的 Response 现在可用,throwExceptionOnFailure=false 选项现在也可以使用。所以,这是一个新手错误。