Aynı adı taşıyan bir öğe ve complexType içeren WSDL ile PHP SoapClient classmap seçeneği kullanarak

0 Cevap php

Ben aynı adı taşıyan bir öğe ve bir complexType içeren birkaç farklı WSDL dosyalar karşılaştı. Örneğin, http://soap.search.msn.com/webservices.asmx?wsdl "SearchResponse" adında iki varlık vardır:

Bu senaryoda, düzgün SoapClient () "classmaps" seçeneğini kullanarak PHP sınıfları için bu varlıkları haritası nasıl anlamaya olamaz.

PHP kılavuzu bu diyor:

The classmap option can be used to map some WSDL types to PHP classes. This option must be an array with WSDL types as keys and names of PHP classes as values.

Aynı anahtar ('SearchResponse') ile iki WSDL türleri vardır beri ne yazık ki, ben iki SearchResponse varlıklar arasındaki ayrım ve bunlara karşılık gelen PHP sınıfları onları atamak için nasıl anlamaya olamaz.

Örneğin, burada örnek WSDL ilgili snippet'idir:

<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>

Ve burada tabii ki not work classmaps tuşları aynıdır, çünkü PHP:

<?php $server = new SoapClient("http://soap.search.msn.com/webservices.asmx?wsdl", array('classmap' => array('SearchResponse' => 'MySearchResponseElement', 'SearchResponse' => 'MySearchResponseComplexType'))); ?>

Bir çözüm ararken, Java Web Hizmetleri "Eleman" veya "ComplexType" kişilere özel eki belirtmek için izin vererek bu işler buldum.

http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.5/tutorial/doc/JAXBUsing4.html#wp149350

Yani, şu anda PHP'nin SoapClient ile bunu yapmak için sadece bir yolu var gibi hissediyorum, ama orada kimse herhangi bir tavsiye sunabilir merak ediyorum. FWIW, uzaktan WDSL düzenleyemezsiniz.

Herhangi bir fikir??

0 Cevap