Мыльный ответ - это не то, что я ожидаю - PullRequest
0 голосов
/ 19 декабря 2011

У меня проблема с конвертом SOAP, полученным с сервера. Конверт выглядит так:

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:HelloService" xmlns:ns2="http://localhost/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <SOAP-ENV:Body>
      <ns1:selectAchievementResponse>
         <array SOAP-ENC:arrayType="ns2:Info[2]" xsi:type="ns2:ListOfInfo">
            <item xsi:type="ns2:card">
               <id xsi:type="xsd:int">1</id>
               <name xsi:type="xsd:string">test</gameName>
               <titel xsi:type="xsd:string">achievement</titel>
               <description xsi:type="xsd:string">desc</description>
               <points xsi:type="xsd:int">123</points>
            </item>

Пока я ожидаю, что это должно выглядеть примерно так:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://www.jpreece.com/soap/CustomerLookup">
   <SOAP-ENV:Body>
      <ns1:GetAllCustomersResponse xmlns:ns1="http://localhost/CustomersWebService/index.php">
         <return xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:Customer[14]">
            <item xsi:type="tns:Customer">
               <id xsi:type="xsd:int">1</id>
               <phonenumber xsi:type="xsd:string">01925 658942</phonenumber>
               <businessname xsi:type="xsd:string">Darli Bar</businessname>
            </item>

Основная проблема, кажется, xsi: введите это:

xsi:type="SOAP-ENC:Array"

против

xsi:type="ns2:Achievements"

Первый генерирует ответ, который я хочу, в то время как последний не работает вообще. Я также могу дать вам WSDL

    <xsd:complexType name="Info">
        <xsd:all>
            <xsd:element name="id" type="xsd:int"/>
            <xsd:element name="name" type="xsd:string"/>
            <xsd:element name="titel" type="xsd:string"/>
            <xsd:element name="description" type="xsd:string"/>
            <xsd:element name="points" type="xsd:int"/>
        </xsd:all>
    </xsd:complexType>
    <xsd:complexType name="ListOfInfo">
        <xsd:complexContent>
            <xsd:restriction base="SOAP-ENC:Array">
                <xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="Info[]"/>
            </xsd:restriction>
        </xsd:complexContent>
    </xsd:complexType>

Я как бы застрял в проблеме, которую я уже начал сравнивать первый и второй WSDL, но они почти идентичны. Поэтому я сейчас спрашиваю, как я могу вернуть ответ, который я хочу вернуть. Этот веб-сервис работает на PHP. Изменить: добавил еще немного информации. ссылка на WSDL веб-службы, которая делает то, что я от нее ожидаю: (http://www.jpreece.com/customerswebservice/index.php?wsdl) второй - мой собственный веб-сервис:

http://www.copypastecode.com/135641/

php моего веб-сервиса: http://www.copypastecode.com/135645/ PHP первого выглядит так: http://www.copypastecode.com/135649/

Edit 2 теперь работает, потому что вместо стандартного используется сервер NuSoap. Но это все еще заставляет меня задуматься, не поддерживается ли мыло в php, потому что вам нужно куча лишнего, чтобы все заработало. Но я должен сказать, что теперь все работает так, как должно быть.

...