0

現在、ローカルホストで Web サービスをテストして遊んでいます。プログラムのクライアント呼び出しで「SoapFault 例外: [クライアント] が XML ドキュメントを取得していないようです」というメッセージが表示されましたが、その理由がわかりません。

私はすでにエンコーディングをBOMなしのUTF8に変更しましたが(他の質問で提案されたように)、まだ何もしていません。私のwsdl仕様にあるcomplextypeが原因であると思います。

重要だと思うwsdlの部分は次のとおりです。

<types>
<xsd:schema targetNamesace="urn:consulta">
    <xsd:simpleType name="codigo">
        <xsd:restriction base="xsd:string">
            <xsd:minLength value="1"/>
            <xsd:maxLength value="255"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="designacao">
        <xsd:restriction base="xsd:string">
            <xsd:minLength value="1"/>
            <xsd:maxLength value="255"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="unidades">
        <xsd:restriction base="xsd:string">
            <xsd:minLength value="1"/>
            <xsd:maxLength value="255"/>
        </xsd:restriction>
    </xsd:simpleType>   
    <xsd:simpleType name="quantidade">
        <xsd:restriction base="xsd:decimal">
            <xsd:minLength value="2"/>
            <xsd:maxLength value="18"/>
        </xsd:restriction>
    </xsd:simpleType>   
    <xsd:simpleType name="referencia">
        <xsd:restriction base="xsd:string">
            <xsd:minLength value="1"/>
            <xsd:maxLength value="255"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:complexType name="MapaQuantidades">
        <xsd:sequence>
            <xsd:element name="codigo" type="tns:codigo"/>
            <xsd:element name="designacao" type="tns:designacao"/>
            <xsd:element name="unidades" type="tns:unidades"/>
            <xsd:element name="quantidade" type="tns:quantidade"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>
</types>

そして、私がクライアントで使用しているコード:

    $wsdl= "....";

$soap_options = array(
    'trace'       => 1,     // traces let us look at the actual SOAP messages later
    'exceptions'  => 1 );

$cliente = new SoapClient($wsdl, $soap_options);

$mapaQtds = new StdClass();
$mapaQtds->MapaQuantidades = new StdClass();
$mapaQtds->MapaQuantidades->codigo = 'Codigo WS';
$mapaQtds->MapaQuantidades->designacao = 'Designacao WS';
$mapaQtds->MapaQuantidades->unidades = 'Unidades WS';
$mapaQtds->MapaQuantidades->quantidade = 20;

$soapstruct = new SoapVar($mapaQtds, SOAP_ENC_OBJECT);

$referencia = "Referencia WS";
$designacao = "Designacao Principal";

try{

    $valor = $cliente->create_consulta( $referencia, $designacao, $soapstruct);
    //echo "Resultado = " . $valor;
    echo "REQUEST:\n" . $client->__getLastRequestHeaders() . "\n";

}catch(SoapFault $e){
    var_dump($e);
}

現在、サーバー上の関数はtrueを返すだけです...しかし、プログラムはサーバーに到達していないようです。$client->create_consulta で「死にます」。なぜこれが起こっているのかについて何か考えはありますか?

完全なエラーは次のとおりです。

Fatal error: Uncaught SoapFault exception: [Client] looks like we got no XML document     in C:\xampp\htdocs\Integration\Agregation\WSConsultaClient.php:30 Stack trace: #0 C:\xampp\htdocs\Integration\Agregation\WSConsultaClient.php(30): SoapClient->__call('create_consulta', Array) #1 C:\xampp\htdocs\Integration\Agregation\WSConsultaClient.php(30): SoapClient->create_consulta('Referencia WS', 'Designacao Prin...', Object(SoapVar)) #2 {main} thrown in C:\xampp\htdocs\Integration\Agregation\WSConsultaClient.php on line 30

前もって、CR

4

1 に答える 1

0

サーバーコードを確認してください。同じ問題があり、ページ内のすべてのエコー、?>、および html コードを削除して解決します。server.php は空白のページである必要があります。

于 2014-11-19T18:21:02.090 に答える