2010-02-18 67 views
0

我目前正在使用Zend_Soap_AutoDiscover來生成我的WSDL文件,問題是我想這個wsdl來處理類型ArrayOfString(字符串[])的輸出。所以我改變了複合型戰略,Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence,它工作正常,但問題是,輸出是不是真的字符串數組輸出XML是財產以後這樣的:使用Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex與字符串[]

<xsd:complexType name="ArrayOfString"> 
    <xsd:sequence> 
     <xsd:element name="item" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> 
    </xsd:sequence> 
</xsd:complexType> 

但我想這樣的輸出:

<xsd:complexType name="ArrayOfstring"> 
    <xsd:complexContent> 
     <xsd:restriction base="soapenc:Array"> 
      <xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/> 
     </xsd:restriction> 
    </xsd:complexContent> 
</xsd:complexType> 

所以,我用了新的戰略,Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex,但問題是,這種策略並不能用於string []。

終於 - >我該怎麼做:D ?!

回答

1

嘗試創建一個只有一個屬性的響應類,如下所示:

class Response 
{ 
    /** @var string[] */ 
    public $items; 
} 

然後定義服務類返回Response類型的對象,如下所示:

class Service 
{ 
    /** 
    * @param string 
    * @return Response 
    */ 
    public function process($input) 
    { 
     $response = new Response(); 
     // Populate $response->items[] object with strings... 
     return $response; 
    } 
} 

然後使用使用Zend_Soap_Autodiscover創建WSDL時的策略爲'Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex'。雖然這可能不會精確地產生你之後的輸出,但它應該產生的語義上比你當前得到的東西更接近。這種方法的關鍵是獲得PHPDoc的權利。

如果仍然不起作用,請發佈代碼的關鍵位,因爲這有助於更快地解決問題。