В моем WSDL работает только функция "привет" - PullRequest
0 голосов
/ 03 мая 2018

Настраивая веб-сервис на моем сервере Symfony, я следую этому руководству: https://symfony.com/doc/current/controller/soap_web_service.html Приведенный пример работает хорошо, с этой привет-функцией:

public function hello($name)
{
    return 'Hello, '.$name;
}

Итак, я попытался завершить этот веб-сервис с помощью следующей функции:

public function bye($name)
{
    return 'Goodbye, '.$name;
}

А вот мой wsdl:

<?xml version="1.0" encoding="ISO-8859-1"?>
<definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:tns="urn:arnleadservicewsdl"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    targetNamespace="urn:helloservicewsdl">

    <types>
        <xsd:schema targetNamespace="urn:hellowsdl">
            <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
            <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" />
        </xsd:schema>
    </types>

    <message name="helloRequest">
        <part name="name" type="xsd:string" />
    </message>

    <message name="helloResponse">
        <part name="return" type="xsd:string" />
    </message>

    <message name="byeRequest">
        <part name="name" type="xsd:string" />
    </message>

    <message name="byeResponse">
        <part name="return" type="xsd:string" />
    </message>

    <portType name="hellowsdlPortType">
        <operation name="hello">
            <documentation>Hello World</documentation>
            <input message="tns:helloRequest"/>
            <output message="tns:helloResponse"/>
        </operation>

        <operation name="bye">
            <documentation>Goodbye World</documentation>
            <input message="tns:byeRequest"/>
            <output message="tns:byeResponse"/>
        </operation>
    </portType>

    <binding name="hellowsdlBinding" type="tns:hellowsdlPortType">
        <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="hello">
            <soap:operation soapAction="urn:arnleadservicewsdl#hello" style="rpc"/>

            <input>
                <soap:body use="encoded" namespace="urn:hellowsdl"
                    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </input>

            <output>
                <soap:body use="encoded" namespace="urn:hellowsdl"
                    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </output>
        </operation>
        <operation name="bye">
            <soap:operation soapAction="urn:arnleadservicewsdl#bye" style="rpc"/>

            <input>
                <soap:body use="encoded" namespace="urn:hellowsdl"
                    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </input>

            <output>
                <soap:body use="encoded" namespace="urn:hellowsdl"
                    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </output>
        </operation>
    </binding>

    <service name="hellowsdl">
        <port name="hellowsdlPort" binding="tns:hellowsdlBinding">
            <soap:address location="http://10.0.0.42/esi/soap" />
        </port>
    </service>
</definitions>

Функция Hello все еще работает, но каждый раз, когда я вызываю функцию пока, я получаю сообщение об ошибке:

Неустранимая ошибка: исключение Uncaught SoapFault: [Клиент] выглядит так, как будто у нас нет XML

Где я не прав?

1 Ответ

0 голосов
/ 11 мая 2018

Хорошо, сначала я переписал свой WSDL с помощью https://www.wsdl -analyzer.com / . Вот мой новый WSDL:

<?xml version="1.0" encoding="ISO-8859-1"?>
<wsdl:definitions name="helloServiceController"
             targetNamespace="urn:helloServiceControllerwsdl"
             xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns:tns="urn:helloServiceControllerwsdl">
    <wsdl:types>
        <xsd:schema targetNamespace="urn:helloServiceControllerwsdl">
            <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
            <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" />
        </xsd:schema>
    </wsdl:types>
    <wsdl:message name="helloRequest">
        <wsdl:part name="name" type="xsd:string"/>
    </wsdl:message>
    <wsdl:message name="helloResponse">
        <wsdl:part name="return" type="xsd:string"/>
    </wsdl:message>
    <wsdl:message name="byeRequest">
        <wsdl:part name="name" type="xsd:string"/>
    </wsdl:message>
    <wsdl:message name="byeResponse">
        <wsdl:part name="return" type="xsd:string"/>
    </wsdl:message>
    <wsdl:portType name="helloServicePortType">
        <wsdl:operation name="hello">
            <wsdl:documentation>Hello World</wsdl:documentation>
            <wsdl:input message="tns:helloRequest"/>
            <wsdl:output message="tns:helloResponse"/>
        </wsdl:operation>
        <wsdl:operation name="bye">
            <wsdl:documentation>Bye World</wsdl:documentation>
            <wsdl:input message="tns:byeRequest"/>
            <wsdl:output message="tns:byeResponse"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="helloServiceBinding" type="tns:helloServicePortType">
        <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="hello">
            <soap:operation soapAction="urn:helloServiceControllerwsdl#hello" style="rpc"/>
            <wsdl:input>
                <soap:body use="encoded" namespace="urn:helloServiceControllerwsdl" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="encoded" namespace="urn:helloServiceControllerwsdl" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="bye">
            <soap:operation soapAction="urn:helloServiceControllerwsdl#bye" style="rpc"/>
            <wsdl:input>
                <soap:body use="encoded" namespace="urn:helloServiceControllerwsdl" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="encoded" namespace="urn:helloServiceControllerwsdl" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="helloService">
        <wsdl:port name="helloServicePort" binding="tns:helloServiceBinding">
            <soap:address location="http://10.0.0.42/esi/soap"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

После этого он все еще не работал, и даже функция приветствия не работала. Немного потянув за волосы, я просто перезапустил сервер, и это было хорошо. Вероятно, проблема с кешем

...