肥皂反应不是我所期望的

时间:2011-12-19 15:00:43

标签: php web-services soap wsdl

我遇到了从服务器获取的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"

VS

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的问题,但它们几乎相同。所以我现在问我怎样才能返回我想要返回的响应。这个web服务在PHP上运行。 编辑:添加了更多信息。 链接到Web服务的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/

编辑2它现在正在工作,因为使用NuSoap服务器而不是标准服务器。 但这仍然让我感到疑惑是因为你需要一个没有维护的PHP中的肥皂 一堆额外的使它工作。但我必须说一切现在都应该如此。

0 个答案:

没有答案