【问题标题】:Disable chunked transfer-encoding for JAX-WS Client in Wildfly 8在 Wildfly 8 中禁用 JAX-WS 客户端的分块传输编码
【发布时间】:2019-01-30 16:09:00
【问题描述】:

我正在 Wildfly 8 上使用 JAX-WS 编写一个 SOAP 客户端。

向我的服务器发送小消息时,客户端可以正常工作。当消息变得太大时,会添加一个标头 "Transfer-Encoding: chunked" 并且服务器停止接受消息。

由于我无法控制服务器部分,我正在寻找一种方法来告诉 Wildfly 停止对大型消息进行分块。

我在这里找到了 WebSphere 的解决方案:Disable chunked transfer-encoding for JAX-WS Client in WebSphere Application Server 8.5

我已经配置了一个处理程序。我已经验证每个传出请求都会调用此处理程序。它看起来像这样:

public boolean handleMessage(SOAPMessageContext smc) {
  ctx.put(*HTTPConstants.CHUNKED*, "false");
  return true;
}

由于我使用的是 Wildfly,而不是 WebSphere,因此我的类路径中没有 HTTPConstants.CHUNKED。 有谁知道我可以用什么来告诉 Wildlfy 停止分块消息?这甚至可以通过使用处理程序来实现吗?

【问题讨论】:

    标签: java cxf wildfly jax-ws chunked


    【解决方案1】:

    据我所知,客户端无权使用或不使用 HTTP 分块。客户端应该接受两者,最终决定由服务器端做出。

    理解分块不是一种格式,而是一种传输编码,这一点很重要。让服务器选择传输大数据的最佳方式听起来很自然(压缩是一种可能的选择,分块是另一种选择)...

    HTTP 1.1 - Can a client request that transfers not be "chunked"?

    【讨论】:

    • 我不确定在这种情况下是否属实。客户端是 Wildlfy 8 实例,它向 Soap Web 服务发出请求。此请求消息大于 4 kb,这使得 Apache CXF 决定以块的形式发送。服务器没有告诉这个请求应该是块的。但是,您是对的,客户端无法控制服务器是否应该分块响应。这取决于服务器。我的问题在于服务器似乎不支持分块的传入消息。
    • 抱歉,我没有发现请求(而不是响应)的肥皂消息很大。在这种情况下,您是对的,允许客户端对其消息进行分块。现在要解决您的问题,知道 JAX-WS 实现是 Wildfly 中的 CXF(至少从 v8 开始),我建议您 1)以编程方式修改 CXF http 管道或 2)覆盖默认值“cxf.client.allowChunking”和“cxf.client.chunkingThreshold”系统属性查看更多:docs.jboss.org/author/display/JBWS/…
    猜你喜欢
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多