Soap - xml message als parameter ?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Soap - xml message als parameter ?

    Hallo !

    Ich nutze PHP5 und muss um einen Web-Service nutzen zu können eine komplexe XML-Message an den Service übergeben. Die Soap Nachricht muss folgendermaßen aussehen:

    Code:
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <AvailabilitySearch xmlns="http://myCompany.com/">
    [COLOR=Red][B]      <docRQ>
               <HB_AvailabilitySearch xmlns="">
                 <Control lang="en">
                   <Brand>BR</Brand>
                   <Country>D</Country>
                   <SessionId />
                   <AffiliateId>KUNI</AffiliateId>
                 </Control>
                 <CampsiteQuery siteCode="TEST">
                   <ArrivalDate>2009-09-10</ArrivalDate>
                   <Duration durationType="Nights">7</Duration>
                   <NumberOfAdults>2</NumberOfAdults>
                   <NumberOfChildren>2</NumberOfChildren>
                   <NumberOfInfants>0</NumberOfInfants>
                 </CampsiteQuery>
               </HB_AvailabilitySearch>         
          </docRQ>
    [/B] [/COLOR]   </AvailabilitySearch>
      </soap:Body>
    </soap:Envelope>
    Wie bekomme ich so eine komplexe Struktur - Knoten <docRQ> - an den Soap Aufruf übergeben ?

    Code:
        $mSOAPClient->__call( 'AvailabilitySearch', [COLOR=Red][B]???[/B][/COLOR] , array('uri' => 'http://myCompany.com/', 'soapaction' => 'http://myCompany.com/AvailabilitySearch' ) );
    Thorsten

  • #2
    Du erstellst dir mit DOMDocument die Daten und dann kannste über saveXML() übergeben?!
    Für Rechtschreibfehler übernehme ich keine Haftung!

    Kommentar


    • #3
      Zitat von Damian1984 Beitrag anzeigen
      Du erstellst dir mit DOMDocument die Daten und dann kannste über saveXML() übergeben?!
      Das Problem ist nicht das erzeugen des Xml Knotens bzw. des Strings.

      Vielmehr die Übergabe an den Aufruf der Web-Service Funktion.

      __call() erwartet ein Array für die Parameter. Aber selbst wenn ich die wie folgt codiere (Beispiel)

      Code:
          $mParam = array('docRQ' => '[B][COLOR=Red]<Test>A</Test>[/COLOR][/B]');
          $mSOAPClient->__call( 'AvailabilitySearch', $mParam, array('uri' => 'http://myCompany.com/', 'soapaction' => 'http://myCompany.com/AvailabilitySearch' ) );
      Steht in der erzeugten Soap Nachricht dies:

      Code:
      <SOAP-ENV:Body><ns1:AvailabilitySearch>[B][COLOR=Red]<param0 xsi:type="xsd:string">&amp;lt;Test&amp;gt;A&amp;lt;/TEST&amp;gt;</param0>[/COLOR][/B]</ns1:AvailabilitySearch></SOAP-ENV>
      Erwarten und benötigen würde ich aber:

      Code:
      <SOAP-ENV:Body><ns1:AvailabilitySearch>[COLOR=Red][B]<docRQ>[/B][/COLOR][B][COLOR=Red]<Test>A</TEST></docRQ>[/COLOR][/B]</ns1:AvailabilitySearch></SOAP-ENV>
      Weder kann ich etwas mit dem <param0> anfangen, noch mit den umgesetzten Entities.

      Kommentar


      • #4
        Hallo Thorsten,

        arbeitest du ohne WSDL?

        Um ein ähnliches Problem (wenn ich dich nicht falsch verstanden hab) geht es in der PHP Doku

        Gruß,

        Anja
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Problem gelöst - allerdings nur mit WSDL

          Zitat von AmicaNoctis Beitrag anzeigen
          Hallo Thorsten,

          arbeitest du ohne WSDL?

          Um ein ähnliches Problem (wenn ich dich nicht falsch verstanden hab) geht es in der PHP Doku

          Gruß,

          Anja
          für diesen Tipp - so geht es ! Eigentlich hätte ich gerne eine Lösung ohne WSDL, da dies einen ziemlichen Overhead erzeugt, aber für den Moment geht es.

          Die Lösung mit WSDL:

          Code:
          $Result=$Client->SomeCall(new SoapVar('<Element attr="AttrValue">ElValue</Element>', XSD_ANYXML));
          Wenn aber noch jemand eine andere Lösung hat, eine ohne WSDL, dann immer her damit.

          Thorsten

          Kommentar

          Lädt...
          X