在基于 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 中多次读取一个流时,您必须启用流缓存。