Я обнаружил несколько разных файлов WSDL, которые содержат элемент и complexType с одинаковым именем.Например, http://soap.search.msn.com/webservices.asmx?wsdl имеет две сущности с именем «SearchResponse»:
В этом сценарии я не могу понять, как правильно сопоставить эти сущности с классами PHP с помощью SoapClient () «classmaps»вариант.
В руководстве по PHP сказано следующее:
Параметр classmap можно использовать для сопоставления некоторых типов WSDL с классами PHP.Эта опция должна быть массивом с типами WSDL в качестве ключей и именами классов PHP в качестве значений.
К сожалению, поскольку есть два типа WSDL с одним и тем же ключом ('SearchResponse'), я не могувыяснить, как провести различие между двумя сущностями SearchResponse и назначить их соответствующим классам PHP.
Например, вот соответствующий фрагмент примера WSDL:
<xsd:complexType name="SearchResponse">
<xsd:sequence>
<xsd:element minOccurs="1" maxOccurs="1" name="Responses" type="tns:ArrayOfSourceResponseResponses"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="SearchResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="1" maxOccurs="1" name="Response" type="tns:SearchResponse"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
А вотPHP, который, очевидно, не будет работать , поскольку ключи classmaps одинаковы:
<?php $server = new SoapClient("http://soap.search.msn.com/webservices.asmx?wsdl", array('classmap' => array('SearchResponse' => 'MySearchResponseElement', 'SearchResponse' => 'MySearchResponseComplexType'))); ?>
При поиске решения я обнаружил, что веб-службы Java обрабатывают это, позволяя вам указать пользовательскийсуффикс к сущностям «Element» или «ComplexType».
http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.5/tutorial/doc/JAXBUsing4.html#wp149350
Итак, сейчас я чувствую, что просто нет способа сделать это с помощью PHP SoapClient, но яЛюбопытно, если кто-нибудь может предложить какой-либо совет.FWIW, я не могу редактировать удаленный WDSL.
Любые идеи ???