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);

posted @ 2013-10-07 19:23  Macaque  阅读(1384)  评论(0编辑  收藏  举报