2014-07-09 72 views
0

我有這樣的WDSL複雜類型具有的NuSOAP

<xsd:element name="elementname"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element maxOccurs="1" minOccurs="1" ref="miref"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 

現在我已經通過的NuSOAP創建,但我不能找到反正省略對複雜類型德類型和名稱,並設置元素的內部的複雜類型。

所以,如果我想創建一個元素我用這個代碼:

$server->wsdl->AddElement( 
     array('name' => 'example1', 'type' => '' 
     ) 
); 

如果我想創建一個複雜類型這個其他:

$server->wsdl->addComplexType(
    'example2', 
    'complexType', 
    'struct', 
    'all', 
    '', 
    array(
     'id_user' => array('type' => '', 'maxOccurs' => '1', 'minOccurs' => '1'), 
    ) 
); 

所以這是我的問題: 1 ]我需要將該complexType(example2)放入另一個元素(example1)中。 2] complexType不應該在標籤內有他的名字,而是函數addComplexType()和addElement(),如果我不給他們類型和名稱,dos似乎不起作用。同樣在文檔中,典型的是它需要:必須包含名稱和類型的屬性。

+0

請更準確地描述您的問題。你想要達到什麼目標?問題是什麼?你想用soap客戶端調用service方法還是用soap服務器寫一個方法? –

+0

我正在嘗試編寫服務器端,並且WSDL必須具有此確切輸出。我會編輯以澄清一點。 –

回答

0

我不熟悉nuSoap,但是因爲它基於原生PHP SoapServer,所以我認爲它很相似。

基本上,當使用PHP方法時,SoapServer將根據附加的XML Schema(XSD)解析返回的對象。

每當你使用complexType時,你應該有相應的定義的PHP類。 StdClass也可以工作,但是定義結構顯然更好。

$response = new stdClass(); 
$response->sequenceElement = 'value'; 
return $response; 

顯然,sequenceElement名稱必須與您引用的XSD類相匹配(ref =「miref」)。

此外,如果您將額外數據添加到您的$響應中,它將被SoapServer忽略,因爲它未在XSD中定義。

+0

閱讀你編輯的問題後,我看到它認爲由nuSoap生成WSDL。在這種情況下,我將無法爲您提供幫助,請繼續使用nuSoap文檔:) –

+0

謝謝反正,我有服務器工作並顯示請求的輸出,但它沒有顯示確切的WSDL它應該:( –

+0

從我的個人經驗 - 我們曾經使用Zend Soap AutoDiscovery來生成WSDL,但是隨着新需求的不斷變化,我們轉向手動創建WSDL和XSD,並且我永遠不會返回任何類型的自動生成的WSDL/XSD - 控制當您手動創建這些文檔時,獲得的內容非常豐富且長期 - 效率更高。 –