2012-10-10 54 views
0

我正在使用axis2編寫SOAP服務客戶端。我產生與WSDL2Java的客戶端代碼,然後我嘗試axis2:必須指定內容長度

Request req = new Request(); 
req.setParameter("XXX"); 

ServiceStub stub = new ServiceStub();          
stub.remoteService(req);    

在運行時,我得到一個AxisFault:什麼錯誤或如何指定內容長度的Content length must be specified

任何想法?

+0

你能否提供更多關於你嘗試連接的服務類型以及代碼本身的更多描述 – Gigaquad

+0

@Gigaquad:編輯過的問題。這是一個SOAP服務,存根由wsdl2java生成 – gefei

回答

1

我相信Axis2的將包括在HTTP報頭中的內容長度值,如果您在默認情況下禁用分塊

由於每XML RPC specifications

請求例如:

下面是一個例子一個XML-RPC請求:

POST /RPC2 HTTP/1.0 
User-Agent: Frontier/5.1.2 (WinNT) 
Host: betty.userland.com 
Content-Type: text/xml 
Content-length: 181 


<?xml version="1.0"?> 
<methodCall> 
    <methodName>examples.getStateName</methodName> 
    <params> 
     <param> 
     <value><i4>41</i4></value> 
     </param> 
     </params> 
    </methodCall> 

部首要求

未指定標頭第一行中的URI格式。例如,如果服務器只處理XML-RPC調用,它可能是空的,單斜槓。但是,如果服務器正在處理混合的傳入HTTP請求,我們允許URI幫助將請求路由到處理XML-RPC請求的代碼。 (在本例中,URI是/ RPC2,告訴服務器將請求路由到「RPC2」響應者。)

必須指定用戶代理和主機。
Content-Type是text/xml。
內容長度必須指定,並且必須是正確的

2

好吧,我終於明白了。根據this這是一個長期以來已知的軸問題。

使用Axis2,添加以下到我的服務存根

_operationClient.getOptions().setProperty(HTTPConstants.CHUNKED, false); 

它工作得很好!