2014-05-08 39 views
1

什麼是最簡單的(或任何)方法來確定肥皂調用的特定參數是可選/必需的?我目前使用SoapClient(在WSDL模式下)來創建類似SoapUI的功能。在這一點上我仍然需要的唯一東西是找出可選的和必需的參數。SoapClient:檢測可選/必需的參數?

回答

1

如果您檢查Web服務的WSDL文件,您可以看到請求模式。可選/ required取決於此xsd的元素上的minOccurs和maxOccurs屬性。默認情況下,minOccurs和maxOccurs在<xsd:element>,<xsd:sequence>,<xsd:all>,<xsd:choice> ...都是1,因此默認情況下所有元素都是必需的。如果有一些元素將minOccurs =「0」作爲屬性,那麼這些元素將是可選的。

即你有這樣的xsd:

<?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xs:element name="shiporder"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="orderperson" type="xs:string"/> 
     <xs:element name="shipto"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="name" type="xs:string"/> 
      <xs:element name="address" type="xs:string"/> 
      <xs:element name="city" type="xs:string" minOccurs="0"/> 
      <xs:element name="country" type="xs:string" minOccurs="0"/> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
     <xs:element name="item"> 
     <xs:complexType> 
      <xs:sequence minOccurs="0"> 
      <xs:element name="title" type="xs:string"/> 
      <xs:element name="note" type="xs:string" minOccurs="0"/> 
      <xs:element name="quantity" type="xs:positiveInteger"/> 
      <xs:element name="price" type="xs:decimal"/> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 

在上面<shipto>序列<city><country>元素的XSD是可選的。 <item>序列也是可選的,並且如果出現<item>,則該序列內的<note>也是可選的。其餘都是必需的。

希望這會有所幫助,

+0

是的這就是我最終這樣做的結果。當然,沒有一個WSDL不使用依賴的XML來定義類型,所以我最終從[https://github.com/staabm/soap-client-generator/blob/master/WSDLInterpreter.php中「借用」了代碼#L164]包含所有imports/includes/wsdl's。你的回答是非常清楚的,如果我仍然卡住,我會解決問題,所以謝謝你的努力:) – Blizz

+0

所以我遲到了...無論如何謝謝你的接受:)。 – albciff

+0

對我來說晚了,但希望非常及時地爲其他人提供相同的問題:) – Blizz

相關問題