2012-08-06 81 views
2

我必須爲我的SoapServer創建WSDL,以傳遞其他服務的數據。這是給我提供的數據結構如下:帶無限參數的wsdl操作

<operationName> 
    <parameterHeader></parameterHeader> 
    <parameterData1></parameterData1> 
    <parameterData2></parameterData2> 
    ... 
    <parameterDataN></parameterDataN> 
</operationName> 

這意味着我要創建的方法

function operationName(parameterHeader, parameterData1, parameterData2, ... parameterDataN){ 
    ... 
} 

這是不可能知道有多少參數將提供給我的操作。

作爲解決方案,我試圖爲不帶參數的方法創建WSDL,但在此方法內使用函數func_get_args()來獲取所有參數。

不幸的是,我仍然無法創建正確的WSDL,我不確定這是否可能。

精確的數據(例如)應該由我的web服務接收如下:

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing"> 
    <env:Header/> 
    <env:Body> 
     <tns:operationResponse xmlns:tns="http://somedomain.com/demo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           xmlns="http://anotherdomain.com/anotherdemo"> 
      <tns:ResponseHeader attrName1="data1" attrName2="data2" attrName3="data3" /> 
      <tns:ObjectData> 
       <tns:ElementData ElementAttr1="data1" ElementAttr2="data2" ElementAttr3="data3"/> 
      </tns:ObjectData> 
      <tns:ObjectData> 
       <tns:ElementData ElementAttr1="data21" ElementAttr2="data22" ElementAttr3="data23"/> 
      </tns:ObjectData> 
      <tns:ObjectData> 
       <tns:ElementData ElementAttr1="data31" ElementAttr2="data32" ElementAttr3="data33"/> 
      </tns:ObjectData> 
      <tns:ObjectData> 
       <tns:ElementData ElementAttr1="data41" ElementAttr2="data42" ElementAttr3="data43"/> 
      </tns:ObjectData> 
     </tns:operationResponse> 
    </env:Body> 
</env:Envelope> 

你有沒有這樣的一種WSDL的任何經驗或可能有關數據如何獲得提供結構的一些想法?

我雖然有可能考慮參數名稱,所以其他數據可以用作complexType。也許WSDL提供了一些技巧...

+0

我不知道WSDL規範是否支持這個。有一個集合參數並傳入數組有什麼問題? – 2012-08-06 15:24:51

回答

0

像邁克,我的第一種方法是使用數組參數。雖然可以想象過程中的無限參數,但我確定WSDL中的定義類型只是枚舉型的,因此您必須明確列出參數。 還要考慮一些Web Service實現可能無法管理無限的參數(在這種情況下,在請求方,所以這是他們的問題,而不是你的)。

+0

是的,使用數組是正確的方式。但不幸的是,我無法改變輸入數據的格式。 – vichaz 2012-08-06 15:44:18

+0

它看起來像一個設計不好的合同。它應該是<操作名稱= 「operationName」> ... Alfabravo 2012-08-06 17:04:33

+0

我剛編輯我的後和提供更多/更少精確例子。但在這種情況下,即使這些數據設計得不好,是否可以通過PHP中的SoapServer正確接收這些數據。 – vichaz 2012-08-06 17:57:10