如何使用 php 和 soap 从 wso2cep-4.1.0 获取 UserAdmin 服务函数列表?

How can I get the UserAdmin service function list from wso2cep-4.1.0 with php and soap?

我正在尝试使用以下代码从 wso2cep-4.1.0 的 UserAdmin 管理服务获取函数列表:

<?php
checkWSDLfunctions();

function checkWSDLfunctions(){

    $wsdl = "https://10.69.16.44:9445/services/UserAdmin?wsdl";

    $paramtrs = array(
        'trace'    => true,
        'login'    => 'admin',
        'password' => 'admin',
        'keep_alive' => false
        );

    $client = new SoapClient($wsdl, $paramtrs);
    print_r($client->__getFunctions());
}
?>

wsdl 可从网络浏览器获得,SoapUI 加载它没有任何问题,我使用 php 5.2.9 和 apache 2.0.55,当我 运行 以上 php 上,我明白了:

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://10.69.16.44:9445/services/UserAdmin?wsdl' : Start tag expected, '<' not found in C:\Program Files\Apache Group\Apache2\htdocs\wso2\checkFunctions.php:15 Stack trace: #0 C:\Program Files\Apache Group\Apache2\htdocs\wso2\checkFunctions.php(15): SoapClient->SoapClient('https://10.69.1...', Array) #1 C:\Program Files\Apache Group\Apache2\htdocs\wso2\checkFunctions.php(2): checkWSDLfunctions() #2 {main} thrown in C:\Program Files\Apache Group\Apache2\htdocs\wso2\checkFunctions.php on line 15

我检查了其他问题并启用了openssl。 我还用 wso2cep 3.1.0 的 wsdl 尝试了完全相同的 php 并且它有效..

你建议接下来尝试什么?

更新: 我找到了解决上述问题的方法,方法是将 link 中的 wsdl 添加到文件 wso2.wsdl,现在__getFunctions() 函数 returns 来自 wsdl 的函数列表。

但是,当我想从 wsdl 调用一个简单的函数时,比方说 listUsers,我得到这个错误:

Fatal error: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in C:\Program Files\Apache Group\Apache2\htdocs\CARE.wso2\checkFunctions.php:18 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'https://10.69.1...', 'urn:listUsers', 1, 0) #1 [internal function]: SoapClient->__call('listUsers', Array) #2 C:\Program Files\Apache Group\Apache2\htdocs\wso2\checkFunctions.php(18): SoapClient->listUsers() #3 C:\Program Files\Apache Group\Apache2\htdocs\wso2\checkFunctions.php(2): checkWSDLfunctions() #4 {main} thrown in C:\Program Files\Apache Group\Apache2\htdocs\wso2\checkFunctions.php on line 18

新的php代码是:

<?php
checkWSDLfunctions();

function checkWSDLfunctions(){

    //$wsdl = "https://10.69.16.44:9445/services/UserAdmin?wsdl";
    $wsdl = "wso2.wsdl";

    $paramtrs = array(
        'trace'    => true,
        'login'    => 'admin',
        'password' => 'admin',
        'keep_alive' => false
        );

    $client = new SoapClient($wsdl, $paramtrs);
    //print_r($client->__getFunctions());
    print_r($client->listUsers());
}
?>

我已经尝试了互联网上建议的默认套接字超时修复,但是,什么都没有..也许我错过了 wso2cep 中的一些设置,但我不知道还有什么可以改变的..或者你觉得怎么样可能是这里的问题?

经过多次重试,我找到的唯一解决方案是升级 Apache 服务器和 PHP。我已经升级到 Apache 2.4.20 和 PHP 5.4.45,现在一切正常。

我没有找到原因,但我的假设是 php soap 或 openssl 库与新的 CEP 版本不兼容。

希望对您有所帮助。

如果其他人有更好的解释,那就太好了。

谢谢。