Disable chunked transfer-encoding for JAX-WS Clien

2019-08-01 07:19发布

问题:

In a web application that runs on top of IBM WebSphere Application Server (WAS) V8.5.5.11, there is a JAX-WS client piece (using WAS built-in JAX-WS component) that calls an external web service.

For any web service call with an HTTP body larger than 32 KB, WAS will use chunked transfer-encoding. Unfortunately, the external web service cannot handle chunked transfer encoding, and will error out.

How do I disable chunked transfer-encoding within WAS JAX-WS client code?

回答1:

You need to create a SOAP JAX-WS handler and override the handleMessagemethod to add an http header like this:

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

That's easy, it's a matter of creating a class for the handler and a simple xml file to declare it Check https://jax-ws.java.net/articles/handlers_introduction.htmlor http://www.mkyong.com/webservices/jax-ws/jax-ws-soap-handler-in-client-side/



回答2:

I couldn't find a way to programmatically disable chunked transfer encoding for the built-in JAX-WS of WAS 8.5.5.x. But I did find a way to disable it through WAS "Administrative Console".

Basically, you need to make a copy of "WSHTTPS default" policy set, and modify the "HTTP transport" policy to uncheck the box for "Enable chunked transfer encoding". Then assign this custom policy set to your service client.

Detailed instructions can be found at https://www.ibm.com/support/knowledgecenter/en/SSEQTP_8.5.5/com.ibm.websphere.nd.doc/ae/twbs_wsspspthttp.html



回答3:

You can apply a policy set and choose to disable chunking.