我目前正在使用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?!
答案 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正确。
如果仍然无效,请发布代码的关键位,因为这样可以更快地解决问题。