web-dev-qa-db-ja.com

「キャッチされていないSoapFault例外:[クライアント]にXMLドキュメントがないようです...」エラーを取り除く方法

サーバー側でnusoapを使用して動的サイトのビジネスロジックを開発しようとしています(wsdlが必要であり、PHP SOAP拡張機能はwsdlを生成できないため) )、およびPHP SOAPクライアント側の拡張。

しかし、ログインやgetRole関数すら正しく取得できません。クライアントを呼び出そうとすると、次のメッセージが表示されます

Uncaught SoapFault exception: [Client] looks like we got no XML document in [some paths]...

Wsdlはサーバー側に存在し、クライアントはそれを読み取ります(wsdlに間違ったURLを入力すると、エラーが発生します)。

誰か助けてもらえますか?

10
Eedoh

クライアントが無効なXML(WSDL自体またはサーバーから返された応答)を受信して​​いるようです。 traceオプションをTRUEに設定してクライアントを呼び出し、 __getLastRequest() および __getLastResponse() メソッド。

21
Henrik Opel

私も同様の問題を抱えていました。私のサービスはいくつかのデバッグデータをecho出力していたことがわかりました。 echo行をすべて削除しましたが、正常に機能しました。

8
Ben

私は同じ問題を抱えています、そして私はこれで解決しました:

PhpのサーバーSOAPファイルはutf8をBOMでエンコードしているため、Apacheはxml応答の前にBOMマーク(3バイト)を送り返します。

PHPファイルのSOAPサーバーをutf8WITH OUTBOMマークでエンコードします。

イグナシオグティエレストレロ

4

Try/catchブロックを使用することを忘れないでください。

try {
    var_dump($client->foo());
} catch (Exception $e) {
    echo($client->__getLastResponse());
    echo PHP_EOL;
    echo($client->__getLastRequest());
}
3
PHPst

SOAPServerクラスの最後に空白が続く可能性があります。詳細については、次の ブログ投稿 をご覧ください: http://arnekroeger.blogspot.com/2011/02/php-soap-error-looks-like-we- got-no-xml.html

2
Tash Pemhiwa

引数にtrim()を使用するだけです。

$objectRequette = trim($_POST['Requette']) ;
$client = new SoapClient(null, array(
    'location' => 'http://your.php',
    'uri'=>'your option',
));
$result = $client->__soapCall('Misyka', array("$objectRequettea"));

私の場合、このエラーは、「?>」ラベルの後に空白行のあるスクリプトを含めたときに発生しました。

これらの行を削除すると問題が解決します

2
Denwork

この問題を解決する方法があります。これはきれいな解決策ではありませんが、機能します...

Mantisサーバーで変更を行うことができないので、これを行うことにしました...

まず、SoapFaultを無音にする必要があります。

try {
    $client = new SoapClient('http://www.mymantisaddress.com/api/soap/mantisconnect.php?wsdl', array('trace'=> 1, 'exceptions' => 0));
    $result = $client->__soapCall($function_name, $args);
} catch (SoapFault $e) {
    //$result = array(
    //    'erro' => $e->faultstring
    //);
}

次に、文字列の先頭にこの3つの末尾の制御文字があることに気付いたので、それを削除しました。

$str = substr($client->__getLastResponse(), 3) . "pe>";
print $str;

第三に、文字列の最後に「pe>」を付ける必要があります。これは、文字列が不完全だったためです。

1
Grazziani

同じ問題があります。php.iniで_always_populate_raw_post_data_を_-1_に設定することで問題が解決しました。

オプションに "trace" => 1、 "exceptions" => 1を追加し、_try catch_を使用して、__getLastRequest()__getLastResponse()を取得することでこれを見つけます。

1
Mostafa

BOMが余分な文字を生成して、このタイプの問題を引き起こす場合があります。

UTF BOMがあるかどうかを検出するには、これを参照してください リンク

1

以下は、一部のユーザーにとって問題となる可能性があります。私はそれを経験したので。

最新のnuSoapバージョンの場合、以下で問題を解決できます。

Nusoap.phpで以下のコードを見つけてください

$this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]"); 

6132行目またはこの周りの何か。

そしてそれをコメントする

// $this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]");

デバッグ目的のためだけなので。したがって、機能の問題について心配する必要はありません。

0