2

私は WSDL を初めて使用し、複合型の問題に直面しています。基本的には、入力メッセージが入力メッセージのタイプとして complexType を使用していないかのようです。

サーバーに渡されたものを返すことができるように、意図的に出力メッセージの名前空間のスペルを間違えました。返されるのは、クライアント コードで送信されたすべてのものです。石鹸がWSDLに一致するように任意の型をキャストし、余分なものを取り除くか、少なくともエラーをスローする場合、私は何を期待しますか。

私のコードに何か問題がありますか、または入力に何が起こるべきかについての私の理解に問題がありますか?

前もって感謝します。

クライアント:

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

$client = new SoapClient('http://example.com/Service_v1.wsdl', array("trace" => 1));

$request['UAT'] = 'fdgdfg';
$request['TemplateID'] = '236';
$request['To'] = 'email@address.com';
$request['From'] = 'mail@address.com';
$request['Org'] = 'PPRG';
$request['Order'] = 'order_number';
$request['Fake'] = 'fakefake';
$request['DeliverTimestamp'] = '2012-09-01 00:00:00';


var_dump($client->newEmail($request));

echo "<br><br><br>" .htmlentities($client->__getLastRequest() );

サーバ:

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


class CreateEmail {

function newEmail($request) {
    return array('Status' => $request, 'ReferenceID' => 123);
    }
}


$server = new SoapServer("Service_v1.wsdl");

$server->setClass("CreateEmail");

$server->handle();

WSDL:

<definitions name="Service_v1"  targetNamespace="http://example.com/Service_v1" xmlns="http://schemas.xmlsoap.org/wsdl/"    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"  xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"  xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"   xmlns:xsd="http://www.w3.org/2001/XMLSchema">


<wsdl:types>
    <xsd:element name="TransactionDetail">
        <xsd:complexType>
            <xsd:complexContent mixed="true">
                <xsd:restriction base="xsd:anyType">                    
                    <xsd:element name="UAT" type="xsd:boolean" minOccurs="0" maxOccurs="1"/>
                    <xsd:element name="TemplateID" type="xsd:integer" minOccurs="1" maxOccurs="1"/>
                    <xsd:element name="To" type="xsd:string" minOccurs="1" maxOccurs="1"/>
                    <xsd:element name="From" type="xsd:string" minOccurs="1" maxOccurs="1"/>
                    <xsd:element name="Org" type="xsd:string" minOccurs="1" maxOccurs="1"/>
                    <xsd:element name="Order" type="xsd:string" minOccurs="1" maxOccurs="1"/>
                    <xsd:element name="DeliverTimestamp" type="xsd:dateTime" minOccurs="0" maxOccurs="1"/>
                </xsd:restriction>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>

</wsdl:types>

<message name="CreateEmailRequest">
    <part name="emailInfo" element="tns:TransactionDetail"/>
</message>

<message name="CreateEmailReply">
    <part name="Status" type="xs:boolean"/>
    <part name="ReferenceID" type="xsd:integer"/>
</message>

<portType name='CreateEmailPortType'>
    <operation name='newEmail'>
        <input message='tns:CreateEmailRequest'/>
        <output message='tns:CreateEmailReply'/>
    </operation>
</portType>

<binding name='CreateEmailBinding' type='tns:CreateEmailPortType'>
    <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>

    <operation name='newEmail'>
        <soap:operation soapAction='urn:xmethods-delayed-quotes#newEmail'/>
        <input>
            <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
        </input>

        <output>
            <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
        </output>
    </operation>
</binding>

<service name='CreateEmailService'>
  <port name='CreateEmailPort' binding='CreateEmailBinding'>
    <soap:address location='http://example.com/CreateEmail.php'/>
  </port>
</service>

</definitions>
4

0 に答える 0