Perché ricevo "SOAP-ERROR: Parsing WSDL: Impossibile trovare <definitions>"?


8

Sto cercando di impostare un client SOAP su un server per comunicare con Magento su un server di prova. Entrambi i server hanno l'estensione SOAP di PHP installata, configurata e visualizzata in phpinfo().

Ho provato a disattivare la memorizzazione nella cache, usando le API v2 e v1 e tutto ciò a cui potevo pensare. Indipendentemente da ciò, continuo ad avere gli stessi problemi.

O è suo:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
            <faultcode>SOAP-ENV:Server</faultcode>
                <faultstring>
                    Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: 
                    Couldn't find <definitions> in 'http://myserver.com/api/v2_soap?wsdl=1' 
                    in dispatch.php:39 

                    Stack trace: #0 dispatch.php(39): 
                    SoapClient->SoapClient('http://myserver.com/...', Array) #1 {main} thrown
                </faultstring>
        </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

o talvolta un altro errore SOAP doesn't allow DTD....

Ora sto usando solo il semplice codice di esempio Magento da qui , invece di eseguire qualcosa di significativo, fino a quando non riesco a capire cosa sta succedendo con questo.

Se eseguo file_get_contentsl'URL del servizio, ottengo:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:typens="urn:Magento" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" name="Magento" targetNamespace="urn:Magento">
    <types>
    <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:Magento">
        <import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/"/>
        <complexType name="associativeEntity">
        <all>
            <element name="key" type="xsd:string"/>
            <element name="value" type="xsd:string"/>
        </all>
        </complexType>
        .
        .
        .
</definitions>

Quindi sembra che non dovrebbe avere problemi ad analizzare questo .. idk.

Risposte:


17

Apparentemente sono caduto in preda a una trappola del Magento comune, quindi sto postando la risposta nel caso in cui qualcun altro stia cercando questo particolare errore. Fondamentalmente, l'errore veniva dall'installazione di Magento che stavo provando a chiamare tramite l'API SOAP.

Inizialmente pensavo che l'errore fosse stato generato dal fatto che il client non era in grado di individuare il risultato di questa definizione, tuttavia la situazione reale è la seguente.

  • L'installazione di Magento che funge da server SOAP effettua alcune chiamate client SOAP a se stesso.
  • Queste chiamate cercano lo stesso dominio a cui accedi nello script client, ma provengono dal server su cui è ospitato quel dominio e eseguono il loopback a detto server.
  • Pertanto, è necessario controllare il file host, di solito in / etc / hosts per distribuzioni Linux e provare ad aggiungere Your.IP.Address.Here Your.Magento.Domain(i, e 70.0.0.2 magentohost.com)
  • Assicurarsi che iptablesconsenta connessioni di loopback, soprattutto se si tenta di eseguire localhost invece del proprio IP esterno; ma molto probabilmente dovrai usare l'indirizzo IP esterno.

Questo è tutto; una volta modificato il file: /etc/hostse aggiunta questa riga, tutto ha funzionato bene.

Se qualcuno ha una visione più chiara o una risposta generalmente migliore, non esitare a pubblicare e molto probabilmente verrà accettato su questa risposta.


Questo non mi ha aiutato a risolverlo ... Qualunque altra ipotesi quale potrebbe essere la ragione?
Usman Yousaf,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.