【问题标题】:Http header Content-Length in camel cxf client request骆驼 cxf 客户端请求中的 Http 标头 Content-Length
【发布时间】:2017-12-18 16:32:22
【问题描述】:

我们有一个简单的骆驼路线“从->到”:

<from uri="cxf:bean:testServiceProvider?loggingFeatureEnabled=true" />
<to uri="cxf:bean:testServiceClient?loggingFeatureEnabled=true" />

此路由类似于第三方网络服务的路由器或代理:

  • 客户端将其用作端点。
  • 将 WSS 标头添加到 Soap 消息中。
  • 将请求路由到真实端点。

此代理中的服务和客户端是使用 cxf bean 创建的。

端点的网络服务似乎需要Content-Length HTTP 标头,但cxf 对端点的请求默认不包含此标头。此代理完成的所有请求都会收到相同的响应:

HTTP response '411: Length required' when communicating with https://host:port/testService

我们尝试使用 OutInterceptor 添加此标头,将其添加到 PROTOCOL_HEADERS:

Map<String, List> headers = (Map<String, List>) message.get(Message.PROTOCOL_HEADERS);
headers.put("Content-Length", Collections.singletonList(String.valueOf(messageLength)));

两个问题:

如何知道messageLength的值? 有没有更简单的方法来做到这一点?

谢谢!

【问题讨论】:

    标签: java web-services http-headers apache-camel cxf


    【解决方案1】:

    您可以尝试使用 http:conduit,禁用 AllowChunking。这将强制 cxf 在请求中包含 Content-Length 标头。默认情况下,cxf 行为是允许分块,因此它可能会产生您面临的问题,甚至指定 Content-length 标头。

    <http:conduit name="{http://namespace}WebService.http-conduit">
        <http:client AllowChunking="false" CacheControl="No-Cache" 
    ContentType="text/xml;charset=UTF-8" ConnectionTimeout="900000" 
    ReceiveTimeout="900000" Connection="Keep-Alive" />
    </http:conduit>
    

    【讨论】:

    • http:conduit 对我不起作用我将名称命名为“*.http-conduit”。请帮助我正确应用它,
    • 在请求标头下尝试未发送内容类型最终 ClientConfiguration config = WebClient.getConfig(client); config.getHttpConduit().getClient().setAllowChunking(false);
    【解决方案2】:

    查看 CXF 文档,您可能能够使用 relayHeaders 功能将标头从“from”端点传播到“to”端点。

    CXF Bean Docs

    或者,您可以按照此处的建议从入站消息中复制内容长度的值...

    "如果你想在旧版本的骆驼中保留这些标题,你需要 将标头放入映射并将此映射放入消息标头中 键“org.apache.cxf.message.PROTOCOL_HEADERS”。”

    Copy headers

    【讨论】:

    • 感谢@PillHead 的回答,但是代理将Web Service Security 标头添加到soap 消息中,因此Content-Length 不一样。我将编辑我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 2011-08-04
    • 2011-04-20
    • 1970-01-01
    相关资源
    最近更新 更多