试着用 ZendFramework 的 SOAP, 相同的代码,在我本地(windows apache)和服务器(linux, http://test.dajiaozi.com/phpinfo.php)上返回的WSDL却有一点出入:
<xsd:restriction base="soap-enc:Array">
<xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="tns:User[]"/>
</xsd:restriction>
在服务器上,产生的 wsdl 里, 没有 wsdl:arrayType="tns:User[]" 这个 attribute.
很是纳闷. 服务器上我放的是 ZendFramework mini 1.10
跟踪排查了一下, 在 Zend\Soap\Wsdl\Strategy\ArrayOfTypeComplex.php 这个文件的大概113行:
$xsdAttribute->setAttribute("wsdl:arrayType", sprintf("tns:%s[]", $singularType));
把这个 wsdl:arrayType 换成其它的名字都能加进去,但是唯独这个 wsdl:arrayType 加不进去,返回的是 false.
但是又必须用 wsdl:arrayType 这个名字,怎么办呢?我换了一种写法:
$xsdAttribute->setAttributeNode(new DOMAttr('wsdl:arrayType', sprintf("tns:%s[]", $singularType) ));
神奇的可以了!
| < Prev | Next > |
|---|
Last Updated ( Saturday, 06 February 2010 10:10 )



