2012-10-23 36 views
2

我使用的是工作與了SoapUI但不與PHP肥皂一個WSDL文件-solved- PHP SOAP:屬性已經在WSDL文件中定義

代碼:

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

堆棧跟蹤:

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing Schema: attribute 'http://url.com/LGW/2009/:unitOfMeasure' already defined in Foo.php:2 Stack trace: #0 Foo.php(2): SoapClient->SoapClient('Foo/bar.wsdl', Array) #1 {main} thrown in Foo.php on line 2

任何人都知道PHP-SOAP庫試圖告訴我什麼。 WSDL文件應該是有效的(至少PEAR SOAP和SoapUI都可以正常工作)。

WSDL包含幾個<s:attribute ref="tns:unitOfMeasure"/> -lines所以我猜測它指的是那些,但真的不知道如何解決這個問題?

+0

我認爲這很清楚,該屬性已經定義。它甚至可以告訴你在哪裏。 – Peon

+0

我知道,但爲什麼這是一個問題?相同的文件驗證與PEAR :: SOAP和SoapUI確定 – sarte

+0

這個問題解決了。 WSDL畢竟無效。通知WSDL生成多個相同的名稱空間屬性。一些SOAP庫似乎驗證了它是好的XML。 PHP不會 – sarte

回答

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消息中無效。

相關問題