使用Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex和string []

时间:2010-02-18 08:46:09

标签: string zend-framework soap arrayofstring

我目前正在使用Zend_Soap_AutoDiscover生成我的WSDL文件,问题是我希望这个wsdl处理类型为ArrayOfString(string [])的输出。所以我将复杂类型策略更改为Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence,它工作正常,但问题是输出实际上不是一个字符串数组,输出xml是这样的:

<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,但问题是这个策略不处理字符串[]。

最后 - &gt;我该怎么办:D?!

1 个答案:

答案 0 :(得分:2)

尝试创建只有一个属性的响应类,如下所示:

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_Wsdl_Strategy_ArrayOfTypeComplex'创建WSDL时使用Zend_Soap_Autodiscover策略。虽然这可能不会精确地产生你所追求的输出,但它应该产生一些在语义上比你目前更接近的东西。这种方法的关键是使PHPDoc正确。

如果仍然无效,请发布代码的关键位,因为这样可以更快地解决问题。