簡體   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