繁体   English   中英

使用 PHP SoapClient 解析 WSDL

[英]Parsing WSDL with PHP SoapClient

我正在尝试使用 PHP 使用 SOAP web 服务。

web 服务 WSDL 可以在这里找到。

像这样简单地创建客户端:

try {
    $wsdlUrl = 'https://eu1.praxedo.com/eTech/services/cxf/v6/BusinessEventManager?WSDL';
    $client = new SoapClient($wsdlUrl);
}
catch(Exception $e) {
    echo $e->getMessage();
}

这失败并出现以下错误:

SOAP-ERROR: Parsing WSDL: Unknown required WSDL extension 'http://schemas.xmlsoap.org/ws/2004/09/policy'

我尝试使用 2 个单独的生成器:

它们都因完全相同的错误而失败。

PHP 版本为7.0

我发现这个 2008 年的旧错误报告显然从未得到修复,因为当时没有提交足够的信息。

有谁知道我该如何解决这个问题?

如果您查看 WSDL,您会看到它导入了 WS-Policy 部分:

<wsdl:import location="https://eu1.praxedo.com/eTech/services/cxf/v6/BusinessEventManager?wsdl=Pxo-policies-v1.0.wsdl" namespace="http://ws.praxedo.com/policies/v1.0">
</wsdl:import>

有关详细信息,请参阅http://specs.xmlsoap.org/ws/2004/09/policy/ws-policy.pdf

Web 服务策略框架 (WS-Policy) 提供通用 model 和相应的语法来描述 Web 服务的策略。 WS-Policy 定义了一组基本构造,可以由其他 Web 服务规范使用和扩展,以描述广泛的服务需求和能力。

您的代码生成器可能会因此而窒息,尽管我不知道为什么; 这些政策在执行时适用。 如果您因此难以生成代码,您可以从 WSDL 中删除该导入,并尝试在没有策略的情况下生成客户端代码。 您基本上将 WSDL 下载到本地文件,删除上面的导入行,然后将此修改后的本地 WSDL 文件提供给您的代码生成器和 SoapClient。

在调用 SOAP web 服务(例如, 该服务需要基本身份验证)时,您仍然需要遵守策略,但生成的客户端代码应该与两个版本的 ZE7F674EE60F6AB14C35F6CEB5F62AC 相同。

As mentioned in the other answer, you also need to use SOAP 1.2 since the binding in the WSDL is defined as SOAP 1.2 (the SOAP Envelope will have this namespace xmlns:soap="http://www.w3.org/2003/05/soap-envelope" )。

不确定这在 7.0 上是否可用,但尝试将选项soap_version设置为SOAP_1_2 (请参阅文档)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM