【问题标题】:SOAP-ERROR: Parsing WSDL: Couldn't find <definitions> inSOAP-ERROR:解析 WSDL:在中找不到 <definitions>
【发布时间】:2016-06-16 09:37:41
【问题描述】:

我正在尝试使用来自远程服务器的 SOAP 网络服务,wsdl 文件位于此处http://ecolinthcm.pi-asp.de/logaserver/services/UsersService?wsdl

我一直与那里的开发人员联系,但他们一直告诉我它工作正常,所以他们没有太大帮助......

我正在用这段小代码戳熊看看它是否还活着:

$WSDL = "http://ecolinthcm.pi-asp.de/logaserver/services/UsersService?wsdl";

// the file_get_contents methods doesn't change the end result unfortunately
//$data = file_get_contents($WSDL);
//file_put_contents('./wsdl.xml',$data);
//$WSDL = './wsdl.xml';

$opts = array(
    'http'=>array(
        'user_agent' => 'PHPSoapClient'
        )
    );

$context = stream_context_create($opts);

$service = new SoapClient($WSDL,array('stream_context' => $context, 'cache_wsdl' => WSDL_CACHE_NONE));
$result = $service->ErmUserBean (array("UserID","Password","TargetUserID"));
print '<pre>';
    var_dump($result);
print '</pre>';

正如标题中所说,我收到这条消息作为回报:

致命错误:未捕获的 SoapFault 异常:[WSDL] SOAP-ERROR: Parsing WSDL: Couldn't find in 'WSDL file URI' in C:\Users\username\Documents\EasyPHP-DevServer-14.1VC11\ data\localweb\projects\API\index.php:30 堆栈跟踪:#0 C:\Users\username\Documents\EasyPHP-DevServer-14.1VC11\data\localweb\projects\API\index.php(30): SoapClient ->SoapClient('WSDL file URI', Array) #1 {main} 在第 30 行的 C:\Users\username\Documents\EasyPHP-DevServer-14.1VC11\data\localweb\projects\API\index.php 中抛出

我已阅读有关此错误的大多数帖子,因此在我的 SOAP 请求中尝试了很多变化。我还编辑了我的 php.ini 文件,以便

extension=php_openssl.dll

出现时不带“;” (评论)之前我可以读到here

【问题讨论】:

    标签: php web-services soap wsdl


    【解决方案1】:

    您收到的错误消息是正确的,因为您链接到的 WSDL 无效。您可以下载它并将其提供给 WSDL 验证器(例如 https://www.wsdl-analyzer.com/),您将看到它无效并失败并显示类似的验证消息。

    WSDL 无效,因为某些命名空间是错误的。例如,WSDL 模式的命名空间不是 https://schemas.xmlsoap.org/wsdl/https://www.w3.org/2001/XMLSchema 也不是 XML 模式的命名空间。正确的是http:// 而不是https://

    我修复了命名空间并在此处上传了一个有效的 WSDL 文件:http://filebin.ca/2lByBlPAOvCu/ChangedUsersService.xml。您可以将其与我在此处保存的原始文件进行比较:http://filebin.ca/2lBxfIDsyDas/OriginalUsersService.xml 并查看差异。

    尝试使用我的 WSDL 文件。将它提供给在线验证器和您的代码,看看它是否有效。

    【讨论】:

    • 请注意,即使您设法构建了一个客户端,如果更多的命名空间错误,除了 WSDL 和 SOAP(即 https://ecolinthcm.pi-asp.de/logaserver/services/UsersService 而不是 http://ecolinthcm.pi-asp.de/logaserver/services/UsersService )
    • 我在 Windows 中使用 wamp,如果我尝试获取类别树我的错误:snag.gy/psFcBi.jpg 和我的代码:justpaste.it/6bfrw 我该如何解决错误?
    • @Rathinam:http://192.168.1.89/abc/api/v2_soap/?wsdl 返回什么?在浏览器的选项卡中或从命令提示符控制台使用 cURL 打开它。您可能还想搜索该错误,看看这些答案是否有帮助:stackoverflow.com/questions/21861077/…
    • @Rathinam:我看到的是你得到了一个例外。您需要取回一个有效的 WSDL 文档(一个 XML),以便您的 SOAP 客户端工作。修复错误以获取正确的 WSDL。
    • 192.168.1.89/abc/api/v2_soap?wsdl=1 return : snag.gy/VgKvHs.jpg, and api code : justpaste.it/6p75t error: snag.gy/IO1Ewo.jpg 你能帮我解决这个错误吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多