Mengapa saya mendapatkan "SOAP-ERROR: Parsing WSDL: Tidak dapat menemukan <definisi>"?

8

Saya mencoba mengatur klien SOAP pada satu server untuk berkomunikasi dengan Magento pada server pengujian. Kedua server memiliki ekstensi SOAP PHP diinstal, dikonfigurasi dan muncul di phpinfo().

Mencoba mematikan caching, menggunakan API v2 dan v1 dan semua hal lain yang bisa saya pikirkan. Bagaimanapun, saya tetap mendapatkan masalah yang sama.

Entah itu:

<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>

atau terkadang kesalahan lain SOAP doesn't allow DTD....

Saya sekarang menggunakan hanya kode contoh Magento sederhana dari sini , daripada menjalankan sesuatu yang signifikan, sampai saya bisa mencari tahu apa yang terjadi dengan ini.

Jika saya lakukan file_get_contentske URL layanan, saya mendapatkan:

<?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>

Jadi sepertinya tidak ada masalah untuk menguraikan ini .. idk.

Garet Claborn
sumber

Jawaban:

17

Rupanya saya menjadi mangsa jebakan Magento umum, jadi saya memposting jawabannya jika ada orang lain yang mencari kesalahan khusus ini. Pada dasarnya, kesalahan berasal dari instalasi Magento yang saya coba hubungi melalui SOAP API.

Awalnya saya pikir kesalahan itu dihasilkan oleh klien yang tidak dapat menemukan hasil definisi ini, namun situasi sebenarnya adalah sebagai berikut.

  • Instalasi Magento yang bertindak sebagai server SOAP membuat beberapa panggilan klien SOAP untuk dirinya sendiri.
  • Panggilan-panggilan ini mencari domain yang sama dengan yang Anda akses di skrip klien Anda, tetapi berasal dari server yang di-host dan loopback ke server tersebut.
  • Untuk itu, Anda perlu memeriksa file host Anda, biasanya di / etc / hosts untuk distro Linux dan mencoba untuk menambahkan Your.IP.Address.Here Your.Magento.Domain(i, e 70.0.0.2 magentohost.com)
  • Pastikan itu iptablesmemungkinkan koneksi loopback, terutama jika Anda mencoba menjalankan localhost alih-alih IP eksternal Anda; tetapi kemungkinan besar Anda harus menggunakan alamat IP eksternal.

Itu dia; setelah saya mengedit file: /etc/hostsdan menambahkan satu baris ini, semuanya bekerja dengan baik.

Jika ada yang memiliki wawasan yang lebih jelas atau jawaban yang umumnya lebih baik - jangan ragu untuk memposting dan kemungkinan besar akan diterima atas jawaban ini.

Garet Claborn
sumber
Ini tidak membantu saya memperbaikinya ... Ada dugaan lain apa yang bisa menjadi alasannya?
Usman Yousaf