axis2 webservices 411错误解决办法
错误:org.apache.axis2.AxisFault: Transport error: 411 Error: Length Required
可能会导致这个问题的原因:
1、访问地址经过端口映射
2、http协议版本不同造成的,在 HTTP1.0中,服务器就会省略response头中的Content-Length而持续写数据出去,当服务器挂了的话,它简单地断开连接。而经典的 HTTP客户端会一直读数据直到碰到-1(传输结束的标识符)。为了处理这个问题,HTTP1.1中增加了一个特殊的header:Transfer- Encoding:chunked,允许响应response被分块chunked。每次向连接写数据的时候会先计算大小,最后在response的尾部 以一个0长度的chunk块标志着此次传输的结束。即HTTP1.1支持chunked编码,它允许HTTP消息被分成多块后再进行传输。 Chunking一般用在服务器响应response的时候,但是客户端也可以chunk大的请求request。即Chunk编码允许服务器在发送完 Header后,发送更多的Body内容。
解决方法:
axis2使用了Content- Encoding: chunked头 ,所以我们在用axis2时为了避免这个问题需要将chunk开关关掉,设置方法(java):
1、 在根据wsdl文件生成的客户端代码中加入_serviceClient.getOptions().setProperty(HTTPConstants.CHUNKED, false) 取消chunk限制,加入位置如下:
2、在客户端创建连接时设置 如下:
UserServiceStub stub = new UserServiceStub();
stub._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED,Boolean.FALSE);