2

我正在使用一个 wsdl 文件,它可以与 SoapUI 一起使用,但不能与 PHP Soap 一起使用

代码:

<?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} 在第 2 行的 Foo.php 中抛出

任何人都知道 PHP-SOAP 库试图告诉我什么。WSDL 文件应该是有效的(至少 PEAR SOAP 和 SoapUI 都可以正常工作)。

WSDL 包含几<s:attribute ref="tns:unitOfMeasure"/>行所以我猜它指的是那些,但真的不明白如何解决这个问题......

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 回答