在基于 CXF 的 Camel 路由中,在 post 处理后无法 return 来自远程服务的响应主体
In a CXF based Camel route, unable to return the response body from a remote service after post-processing
我想做的是创建一个概念验证 Camel 路由,它公开一个 cxfrs 服务端点。使用 cxf 客户端将对此端点的请求路由到不同服务器上的另一个服务。在我得到 xml 响应后,我需要用它做一些事情,比如将响应主体保存到数据库中。当然,原始请求者也需要收到响应。
如果我不对响应进行任何 post 处理,那么我会按预期在浏览器中收到响应 xml。但是每当我尝试在我的路由中添加另一个步骤来处理响应时,浏览器都会得到一个空的响应。正如您在注释掉的行中看到的那样,我使用哪个 camel 组件调用 bean 并不重要。我尝试了 bean、process 和 to。即使我注释掉了 bean 中的所有代码,所以它什么都不做,结果是一样的。
这是我的路线:
<cxf:rsServer address="{{base.url}}/employeeservicecxf" id="restServiceCxf">
<cxf:serviceBeans>
<bean class="com.kf.camel.sample.EmployeeServiceResource"/>
</cxf:serviceBeans>
</cxf:rsServer>
<cxf:rsClient
address="http://{{remote.server}}/adminrest/jaxrs/projects/10475/products"
id="rsClient" loggingFeatureEnabled="true" />
<bean class="com.kf.camel.sample.CamelProcessor" id="processor"/>
<bean class="com.kf.camel.sample.CamelResponseProcessor" id="responseProcessor"/>
<camelContext id="_camelContext1" trace="true" xmlns="http://camel.apache.org/schema/spring">
<propertyPlaceholder id="properties" location="app.properties"/>
<route id="_route1">
<from id="_from1" uri="cxfrs://bean://restServiceCxf"/>
<process id="_process1" ref="processor"/>
<setHeader headerName="CamelHttpMethod" id="_setHeader1">
<constant>GET</constant>
</setHeader>
<to id="_to1" uri="cxfrs://bean://rsClient"/>
<!-- to id="_to3" uri="bean://com.kf.camel.sample.CamelResponseProcessor?method=process"/-->
<bean id="_bean1" ref="responseProcessor" method="process"/>
<!-- process id="_process2" ref="responseProcessor"/-->
</route>
</camelContext>
</beans>
Response Headers
Response Body with content length mismatch error
你试过enable stream caching了吗?
听起来您对响应执行的任何第一个操作都在消耗流,任何进一步尝试再次读取流都会得到空结果。
当您想在 Camel 中多次读取一个流时,您必须启用流缓存。
我想做的是创建一个概念验证 Camel 路由,它公开一个 cxfrs 服务端点。使用 cxf 客户端将对此端点的请求路由到不同服务器上的另一个服务。在我得到 xml 响应后,我需要用它做一些事情,比如将响应主体保存到数据库中。当然,原始请求者也需要收到响应。
如果我不对响应进行任何 post 处理,那么我会按预期在浏览器中收到响应 xml。但是每当我尝试在我的路由中添加另一个步骤来处理响应时,浏览器都会得到一个空的响应。正如您在注释掉的行中看到的那样,我使用哪个 camel 组件调用 bean 并不重要。我尝试了 bean、process 和 to。即使我注释掉了 bean 中的所有代码,所以它什么都不做,结果是一样的。
这是我的路线:
<cxf:rsServer address="{{base.url}}/employeeservicecxf" id="restServiceCxf">
<cxf:serviceBeans>
<bean class="com.kf.camel.sample.EmployeeServiceResource"/>
</cxf:serviceBeans>
</cxf:rsServer>
<cxf:rsClient
address="http://{{remote.server}}/adminrest/jaxrs/projects/10475/products"
id="rsClient" loggingFeatureEnabled="true" />
<bean class="com.kf.camel.sample.CamelProcessor" id="processor"/>
<bean class="com.kf.camel.sample.CamelResponseProcessor" id="responseProcessor"/>
<camelContext id="_camelContext1" trace="true" xmlns="http://camel.apache.org/schema/spring">
<propertyPlaceholder id="properties" location="app.properties"/>
<route id="_route1">
<from id="_from1" uri="cxfrs://bean://restServiceCxf"/>
<process id="_process1" ref="processor"/>
<setHeader headerName="CamelHttpMethod" id="_setHeader1">
<constant>GET</constant>
</setHeader>
<to id="_to1" uri="cxfrs://bean://rsClient"/>
<!-- to id="_to3" uri="bean://com.kf.camel.sample.CamelResponseProcessor?method=process"/-->
<bean id="_bean1" ref="responseProcessor" method="process"/>
<!-- process id="_process2" ref="responseProcessor"/-->
</route>
</camelContext>
</beans>
Response Headers Response Body with content length mismatch error
你试过enable stream caching了吗?
听起来您对响应执行的任何第一个操作都在消耗流,任何进一步尝试再次读取流都会得到空结果。
当您想在 Camel 中多次读取一个流时,您必须启用流缓存。