SOAP? Wo kommt der ns1 her?

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

  • SOAP? Wo kommt der ns1 her?

    Guten morgen zusammen,
    ich bastel hier grade an einem Webservice und bin da jetzt auf ein mir unerklärliches Problem gestossen:

    Wenn ich eine Anfrage vom Style "document" an meinen Server hier mache, wird vor jeden Parameter ein ns1: gehängt.

    Quasi so:

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://kunde.de/xi/B2B/SZ/wir/GoodsMovement/110">
    <SOAP-ENV:Body>
    <ns1:uebergabe>
    <ns1:parmliste>
    <ns1:parm>
    <ns1:nummer1>21</ns1:nummer1>
    <ns1:nummer2>1022</ns1:nummer2>
    </ns1:parm>
    </ns1:parmliste>
    </ns1:uebergabe>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    Jetzt hab ich das Problem, dass die Gegenstelle die ganze Sache nicht verarbeiten kann, wegen dem ns1.
    Nach ein wenig rumsuchen hab ich jetzt eben herausgefundne, dass SOAP diesen Namespace vorneweg stellt.

    Weder in meiner Ursprungsstruktur noch in der WSDL steht was von einem ns1.

    Meine Frage jetzt: Wie krieg ich den weg?
    ist das ein Paramaeter, den ich bei der SOAP init übergeben kann?

    Dange schonmal
    angel
    mfg
    angel

  • #2
    http://www.zend.com/php5/articles/ph...ynamicwebpages

    HTH

    Kommentar


    • #3
      subba.
      danke für den tipp.

      nur wird da RPC benutzt.
      und von den namespaces die da automatisch erstellt werden steht da auch nix.
      mfg
      angel

      Kommentar


      • #4
        @angelone
        mache den banner deutlich kleiner (88x31) oder noch besser ... ganz raus.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          kk
          is wech
          mfg
          angel

          Kommentar


          • #6
            Hallo,
            ich habe das selbe Problem. Nur leider gibt es die erwähnte Seite nicht mehr auf zend.com. Es wäre nett wenn mir jemand helfen könnte.

            --
            Dank und Gruß Marco

            Kommentar


            • #7
              zeig mal, wie du den request erzeugst.

              Kommentar


              • #8
                PHP-Code:
                    <?php

                    
                include 'test.php';
                    
                    
                $client = new SoapClient('http://localhost:8080/trackplus/services/TrackWebService?wsdl', array('trace' => 1));
                    
                    
                $opt = array('logonBean' => array('isInTestMode' => 'false''locale' => 'de_DE''password' => 'leiter''username' => 'leiter'));
                    
                $client->login($opt);
                    
                    
                $client->createItem();

                ?>
                Der SOAP-Request sieht anschließend folgender maßen aus.

                Code:
                <?xml version="1.0" encoding="UTF-8"?>
                <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://beans.ws.track.trackplus.com" xmlns:ns2="http://com/trackplus/track/ws/tcl/binding/"><SOAP-ENV:Body><ns2:login><ns2:logonBean><ns1:isInTestMode>false</ns1:isInTestMode><ns1:locale>de_DE</ns1:locale><ns1:password>leiter</ns1:password><ns1:username>leiter</ns1:username></ns2:logonBean></ns2:login></SOAP-ENV:Body></SOAP-ENV:Envelope>
                
                <?xml version="1.0" encoding="UTF-8"?>
                <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://com/trackplus/track/ws/tcl/binding/">
                <SOAP-ENV:Body><ns1:createItem/></SOAP-ENV:Body>
                </SOAP-ENV:Envelope>
                Ich habe eine Möglichkeit gefunden das ganze zu umgehen. Diese ist aber nicht sehr flexibel, z.B. wenn mehrere namespaceses ersetzt werden müssen.

                PHP-Code:
                <?PHP
                    
                class MySOAP extends SoapClient {
                    
                        function 
                __doRequest($request$location$action$version) {
                            
                $namespace "http://com/trackplus/track/ws/tcl/binding/";
                    
                            
                $request preg_replace('/<ns1:(\w+)/''<$1 xmlns="'.$namespace.'"'$request1);
                            
                $request preg_replace('/<ns1:(\w+)/''<$1'$request);
                            
                $request str_replace(array('/ns1:''xmlns:ns1="'.$namespace.'"'), array('/'''), $request);
                    
                            
                // parent call
                            
                return parent::__doRequest($request$location$action$version);
                        }
                    }
                ?>
                Der entstandene Request sieht folgender maßen aus.

                Code:
                <?xml version="1.0" encoding="UTF-8"?>
                <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" >
                 <SOAP-ENV:Body>
                  <createItem xmlns="http://com/trackplus/track/ws/tcl/binding/"/>
                 </SOAP-ENV:Body>
                </SOAP-ENV:Envelope>
                Zuletzt geändert von donMarco; 15.06.2007, 12:49.

                Kommentar

                Lädt...
                X