turk porno porno escort rokettube
Ergebnis 1 bis 7 von 7

Thema: Problem mit WSDL und SOAP: SOAP-ERROR: Parsing WSDL

  1. #1
    Neuer Benutzer
    Registriert seit
    16.04.2012
    Beiträge
    14
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard Problem mit WSDL und SOAP: SOAP-ERROR: Parsing WSDL

    Guten Tag, Community. Ich entwickle für meine Web-Anwendung gerade einen Web-Service und arbeite mich gerade in Zend_Soap ein. Dafür habe ich, glücklicherweise, ein paar gute Beispiele gefunden.

    Leider habe ich trotz Beachtung dieser Beispiele ein paar Probleme und schiebe sie vorerst darauf, dass ich kein gültiges XML-File erzeugt bekomme.

    PHP-Code:
    public function soapAction()
        {
            require_once (
    APPLICATION_PATH .'/modules/api/models/customers.php');

            
    $this->_helper->viewRenderer->setNoRender();
            
    $this->_helper->layout()->disableLayout();

            
    ini_set("soap.wsdl_cache_enabled""0");

            
    $request $this->getRequest();
            
    $paramwsdl $request->getParam('wsdl');

           if(isset(
    $_GET['wsdl'])) {
               
    $autodiscover = new Zend_Soap_AutoDiscover();
               
    $autodiscover->setClass('Customer');
               
    $autodiscover->handle();
            } else {
               
    $soap = new Zend_Soap_Server("http://subdomain.domain/api/index/soap?wsdl");
               
    $soap->setClass('Customer');
               
               
    $soap->handle();
            }
        } 
    So weit, so gut.

    Jetzt rufe ich also http://shop.localhost/api/index/soap?wsdl auf. Ich erhalte vom Browser folgende Fehlermeldung:

    XML-Verarbeitungsfehler: XML- oder Text-Deklaration nicht am Beginn der Entität
    Adresse: http://subdomain.domain/api/index/soap?wsdl
    Zeile Nr. 2, Spalte 1:
    Und tatsächlich: Die XML-Deklaration befindet sich in der zweiten Zeile, wenn ich den Seitenquelltext betrachte.

    Sonst sieht die Ausgabe schon gar nicht so verkehrt aus und beinhaltet die Methode der eingebundenen Klasse:

    PHP-Code:
    <?php 

    class Customer 
    {

        
    /**
          * get a customer
          *
          * @return string
          */
        
    public function getCustomer() {

           return 
    "TEST"
        }

    }

    ?>
    Rufe ich jetzt http://subdomain.domain/api/index/soap auf, erhalte ich die folgende Fehlermeldung, die vermutlich aus dem obenstehenden Problem resultiert:



    PHP-Code:

    <SOAP-ENV:Envelope>
        <
    SOAP-ENV:Body>
            <
    SOAP-ENV:Fault>
                <
    faultcode>WSDL</faultcode>
                       <
    faultstring>SOAP-ERRORParsing WSDLCouldn't load from 'http://shop.localhost/balance?wsdl' : Premature end of data in tag html line 1</faultstring><detail> </detail>
             
    </SOAP-ENV:Fault>
        </
    SOAP-ENV:Body>
    </
    SOAP-ENV:Envelope
    Hat jemand ein ähnliches Problem? Und eventuell auch einen Rat?
    Geändert von AlreadyRegistered (16.04.2012 um 15:06 Uhr)

  2. #2
    Neuer Benutzer
    Registriert seit
    16.04.2012
    Beiträge
    14
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Jetzt, nach stundenlangen Tests, kann ich einen kleinen Fortschritt vermelden. AutoDiscovery wirft mir keine Fehlermeldungen mehr, nach diesen Anpassungen:

    PHP-Code:
     if(isset($_GET['wsdl'])) {
               
    $autodiscover = new Zend_Soap_AutoDiscover();
               
    $autodiscover->setClass('Customer');
               
    $autodiscover->setBindingStyle(array('style'=>'document'));
               
    $autodiscover->setOperationBodyStyle(array('use' => 'literal'));

               echo 
    $autodiscover->toXml();
            } else {
               
    $soap = new Zend_Soap_Server("http://shop.localhost/api/index/soap?wsdl");
               
    $soap->setClass('Customer');
               
    $soap->setObject(new Customer());
               
               
               
    $soap->handle();
            } 
    Leider werden immer noch die gleichen Fehlermeldungen geworfen, wenn ich Zend_Soap_Server instanziere. Hmpf. :/

  3. #3
    Neuer Benutzer
    Registriert seit
    16.04.2012
    Beiträge
    14
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Hm.. Das Problem liegt offenbar woanders. Ich habe mal mit ein paar String-Operationen valides XML aus den Daten gemacht, die ich per AutoDiscover bekomme:


    PHP-Code:
           if(isset($_GET['wsdl'])) {
               
    header("Content-type: text/xml");
               
    $autodiscover = new Zend_Soap_AutoDiscover();
               
    $autodiscover->setClass('Customer');
               
    $autodiscover->setBindingStyle(array('style'=>'document'));
               
    $autodiscover->setOperationBodyStyle(array('use' => 'literal'));
               echo 
    substr_replace($autodiscover->toXml(), ''0strpos($autodiscover->toXml(), +10));
            } else {
               
    $soap = new SoapServer("http://subdomain.domain/api/index/soap?wsdl");
               
    $soap->setClass('Customer');
               
               
    $soap->handle();
            } 
    Dennoch sagt der SoapServer, genau wie Zend_Soap_Server, dass sich HTML-Tags darin befinden.

    (SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://shop.localhost/api/index/soap?wsdl' : Premature end of data in tag html line 1)

  4. #4
    Erfahrener Benutzer Avatar von SeKrebs
    Registriert seit
    05.02.2011
    Beiträge
    1.599
    Thanks
    1
    Thanked 58 Times in 46 Posts

    Standard

    Zumindest in Beitrag #1 fehlt der XML-Header
    "KingCrunchs kleine Welt" -- Blog
    The problem with rats leaving a sinking ship is that they usually do it by gnawing holes in the bottom.

  5. #5
    Neuer Benutzer
    Registriert seit
    16.04.2012
    Beiträge
    14
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Jupp.. Da habe ich noch den originalen Code aus den Beispielen der Zend-Manual und dieses Forum imitiert und die Header erst gesetzt, als ich die Fehler bekommen habe. Ich hab' angenommen, dass es das Problem für den SoapServer und (die nicht gepostete Client-Funktion zum Test) auch beheben müsste, aber dem ist nicht so. :/

  6. #6
    Neuer Benutzer
    Registriert seit
    16.04.2012
    Beiträge
    14
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Okay, ich bin meinem Problem vermutlich wieder etwas näher:

    Meinen Aufruf von SoapServer habe ich mal so gestaltet, dass er etwas aufruft, das überhaupt nicht existiert.


    PHP-Code:
     $soap = new SoapServer("http://subdomain.domain/api/index/FOOBAR"); 
    Die Fehlermeldung ist identisch mit meiner bisherigen Fehlermeldung. Ich habe daher die Vermutung, dass er meinen wsdl-Aufruf gar nicht wirklich macht, sondern eine Fehlerseite meiner Anwendung des Zend-Frameworks aufruft, die ja durchaus HTML enthalten würde.

    Zum Test habe ich also einfach eine WSDL-Datei abgelegt, die aus dem vom Zend Framework generierten Inhalt besteht.

    Der Code für den reinen SoapServer sieht jetzt also so aus:

    PHP-Code:
    $soap = new SoapServer(APPLICATION_PATH .'/modules/api/views/scripts/index/file.wsdl');
    $soap->setClass('Customer');
    $soap->handle(); 
    Die Datei wird mit ziemlicher Sicherheit gefunden, aber merkwürdigerweise erhalte ich eine 500er-Fehlermeldung - Interner Serverfehler.


    Edit: Ah! Sehr gut. Meine Vermutung war richtig. Der SoapServer musste sich quasi einloggen und hat daher immer versucht meine Login-Seite zu parsen. Das Problem konnte ich also beheben. Jetzt stehe ich allerdings vor einem internen Serverfehler, den ich mir nicht erklären kann. Meine Error-Log sagt folgendes:

    2012-04-18 10:16:32: (mod_fastcgi.c.2568) unexpected end-of-file (perhaps the fastcgi process died): pid: 2638 socket: unix:/tmp/php.socket-0
    2012-04-18 10:16:32: (mod_fastcgi.c.3356) response not received, request sent: 939 on socket: unix:/tmp/php.socket-0 for /index.php?, closing connection
    Jemand eine Idee?

    Edit2:

    Auch das konnte ich beheben. Scheinbar macht SoapServer noch etwas anders als Zend_Soap_Server. Trotzdem bekomme ich immer wieder ungültiges XML..!
    Geändert von AlreadyRegistered (18.04.2012 um 12:32 Uhr)

  7. #7
    Neuer Benutzer
    Registriert seit
    16.04.2012
    Beiträge
    14
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Okay, letztes Update in meinem Fall: Aus irgendeinem Grund findet JEDE Ausgabe erst in der zweiten Zeile statt. Das XML ist völlig in Ordnung und über ->toXml(); bekomme ich auch völlig annehmbares XML. In der Ausgabe ist aber immer eine leere Zeile über die Ausgabe, was beim parsen von XML nicht in Ordnung ist. Leider bin ich auch dazu etwas ratlos. (Gestet habe ich es mit einem einfachen echo "Hello World", das laut Quelltext auch erst in der zweiten Zeile steht)

    Es hängt definitiv entweder mit dem Framework oder meiner Anwendung zusammen. Aus irgendeinem Grunde ist da immer diese Zeile mit drei Leerzeichen drin.
    Geändert von AlreadyRegistered (18.04.2012 um 14:13 Uhr)

Ähnliche Themen

  1. Problem mit verschachtelter SOAP-Anfrage
    Von Filou im Forum Web & Webservices
    Antworten: 1
    Letzter Beitrag: 15.08.2010, 20:58
  2. WSDL 2.0 möglich?
    Von chcb im Forum Web & Webservices
    Antworten: 0
    Letzter Beitrag: 11.03.2010, 17:57
  3. SOAP Server Problem!
    Von ThaDafinser im Forum Web & Webservices
    Antworten: 10
    Letzter Beitrag: 11.12.2009, 12:52
  4. SOAP-ERROR: Parsing WSDL
    Von iXtends im Forum Web & Webservices
    Antworten: 2
    Letzter Beitrag: 18.10.2009, 22:35
  5. SOAP/WSDL Editor?
    Von jpieper im Forum Offtopic
    Antworten: 2
    Letzter Beitrag: 12.12.2007, 12:37

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •