PHP SoapClient __call () - Ausnahme: DTD nicht unterstützt-SOAP

Dieser ist, mich zu töten...

Ich bin zu lernen, zu entwickeln SOAP-Server in PHP im moment, und ich bin in ein nerviges problem und Google ist nicht zu helfen viel, trotz reichlich trifft auf das problem in Frage...

Nach der Instanziierung des SOAP-CLIENT mit einem-wie ich glaube-eine gute WSDL-der erste Aufruf einer vorhandenen Funktion auf dem soap-server erzeugt die folgende Ausnahme:

SoapFault Object
(
    [message:protected] => DTD are not supported by SOAP
    [string:private] => 
    [code:protected] => 0
    [file:protected] => /var/www/soapserver/soapServerTestClient.php
    [line:protected] => 7
    [trace:private] => Array
        (
            [0] => Array
                (
                    [function] => __call
                    [class] => SoapClient
                    [type] => ->
                    [args] => Array
                        (
                            [0] => testSoapService
                            [1] => Array
                                (
                                    [0] => TESTSTRING
                                )

                        )

                )

            [1] => Array
                (
                    [file] => /var/www/soapserver/soapServerTestClient.php
                    [line] => 7
                    [function] => testSoapService
                    [class] => SoapClient
                    [type] => ->
                    [args] => Array
                        (
                            [0] => TESTSTRING
                        )

                )

        )

    [faultstring] => DTD are not supported by SOAP
    [faultcode] => Client
    [faultcodens] => http://schemas.xmlsoap.org/soap/envelope/
)

Preisdumping __getLastRequest(), __getLastResponse(), __getLastRequestHeaders(), und __getLastResponseHeaders() yield komplett LEERE Ergebnisse, so ist eigentlich NICHTS gesendet/angefordert wird angezeigt.

Den Besuch der link zur WSDL liefert die WSDL-Datei Inhalt wie erwartet, und ich weiß, das funktioniert, weil die änderung der Pfad zur WSDL gibt eine SOAP-ERROR: Parsing WSDL: Couldn't load Ausnahme, und legt es zurück zum eigentlichen WSDL-Pfad erzeugt die Ausnahme oben.

den soap-server-code ist unten, aber da es keine Anforderung/Antwort-ich glaube nicht, dass es das Problem:

Funktion testSoapService($arg) {
return ".$arg."; }

ini_set("soap.wsdl_cache_enabled",
"0"); //disabling WSDL cache, so dass Sie
testen können wsdl-änderungen ohne Streit;
kommentieren Sie, wenn die WSDL wird festgelegt. $server
= new SoapServer("");
$server->addFunction("testSoapService");
$server->handle();

Google-Suche, eine Mischung von Menschen, die sagen, es ist entweder eine ungültige wsdl-Pfad (glaube nicht in diesem Fall), oder die Tatsache, dass die server wieder HTML-Seiten der Vielzahl der Fehler (404, etc.) aus dem webserver, auf dem ich auch nicht glaube, ist der Fall, weil die Anfragen/Antworten sind leer.

Hier ist eine Kopie der WSDL-Inhalt, falls es nützlich ist:

<?xml version="1.0" encoding="UTF-8"?>

<wsdl:types>

    <schema xmlns:rns="http://soap.jrimer-amp64/" xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://soap.jrimer-amp64/" version="1.0" elementFormDefault="unqualified" attributeFormDefault="unqualified">
        <complexType name="testSoapServiceRequest">
            <sequence>
                <element name="testKey" type="string"/>
            </sequence>
        </complexType>
        <complexType name="testSoapServiceResponse">
            <sequence>
                <element name="result" type="string" minOccurs="1"/>
                <element name="retStatus" type="rns:returnStatus"/>
            </sequence>
        </complexType>
        <complexType name="returnStatus">
            <sequence>
                <element name="errorMessage" type="string" minOccurs="0"/>
                <element name="errorCode" type="string" minOccurs="0"/>
            </sequence>
            <attribute name="success" type="boolean"/>
        </complexType>
        <element name="addRouterToCustomerAccountRequest" type="rns:addRouterToCustomerAccountRequest"/>
        <element name="addRouterToCustomerAccountResponse" type="rns:addRouterToCustomerAccountResponse"/>
    </schema>

</wsdl:types>


<wsdl:service name="XxxxxxSvc">

    <wsdl:port name="XxxxxxSvc-Endpoint0" binding="tns:XxxxxxSvc-Endpoint0Binding">
        <soap:address location="http://soap.jrimer-amp64"/>
    </wsdl:port>

</wsdl:service>


<wsdl:portType name="portType">

    <wsdl:operation name="testSoapService">
        <wsdl:input message="tns:testSoapServiceRequest"/>
        <wsdl:output message="tns:testSoapServiceResponse"/>
    </wsdl:operation>

</wsdl:portType>


<wsdl:binding name="XxxxxxSvc-Endpoint0Binding" type="tns:portType">

    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />

    <wsdl:operation name="testSoapService">
        <soap:operation style="document" soapAction="http://soap.jrimer-amp64/XxxxxxSvc-SoapServer.php"/>
        <wsdl:input>
            <soap:body use="literal" parts="parameters"/>
        </wsdl:input>
        <wsdl:output>
            <soap:body use="literal" parts="parameters"/>
        </wsdl:output>
    </wsdl:operation>

</wsdl:binding>


<wsdl:message name="testSoapServiceRequest">
    <wsdl:part name="parameters" element="ns0:testSoapServiceRequest"/>
</wsdl:message>


<wsdl:message name="testSoapServiceResponse">
    <wsdl:part name="parameters" element="ns0:testSoapServiceResponse"/>
</wsdl:message>

Irgendwelche Ideen?

  • Was sehen Sie, wenn Sie besuchen Sie die WSDL, die mit einem browser?
  • Ich sehe das WSDL-XML-content
InformationsquelleAutor Rimer | 2011-06-16
Schreibe einen Kommentar