2

SoapUI では動作するが PHP Soap では動作しない wsdl ファイルを使用しています

コード:

<?php
$WSDL     = new SoapClient('Foo/bar.wsdl');
?>

スタックトレース:

致命的なエラー: キャッチされない SoapFault 例外: [WSDL] SOAP-ERROR: スキーマの解析: 属性 'http://url.com/LGW/2009/:unitOfMeasure' は既に Foo.php:2 で定義されています スタック トレース: #0 Foo.php (2): SoapClient->SoapClient('Foo/bar.wsdl', Array) #1 {main} が Foo.php の 2 行目でスローされる

PHP-SOAP libが私に何を伝えようとしているのか、誰でも知っています。WSDL ファイルが有効である必要があります (少なくとも PEAR SOAP と SoapUI の両方が問題なく動作します)。

WSDL には複数の<s:attribute ref="tns:unitOfMeasure"/>-lines が含まれているので、それらを参照していると思いますが、これを修正する方法が本当にわかりません...

4

1 に答える 1

1

WSDL ファイルには、次の XML を示唆する誤った指示がありました

<ns:foo unitOfMeasure="foo" ns:unitOfMeasure="invalid">
  <ns:bar unitOfMeasure="foo" ns:unitOfMeasure="invalid"></ns:bar>
</ns:foo>

これにより、すでに定義されているエラーが発生しました。ns:unitOfMeasure 属性は、名前空間宣言のために一意と見なされ、再定義できません。

WSDL ファイルから行を削除したところ、その後は問題なく動作しました。

Java、PEAR、およびおそらく .NET SOAP ライブラリは、SOAP/WSDL メッセージでは有効ではありませんが、この種の命令を受け入れるようです。

于 2012-10-24T16:45:51.143 に答える