axis2 webservices 411錯誤解決辦法


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM