我尝试使用以下代码从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,它可以工作..
您建议接下来尝试一下?
更新:我已经通过将链接中的wsdl添加到文件wso2.wsdl找到了上述问题的解决方法,现在__getFunctions()函数返回了来自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中的一些设置,但我不知道还有什么可以改变它。或者您认为这可能是什么问题?
答案 0 :(得分:0)
经过多次重试后,我发现的唯一解决方案是升级Apache服务器和PHP。我已经升级到Apache 2.4.20和PHP 5.4.45,现在一切正常。
我没有找到原因,但我的假设是php soap或openssl库与新的CEP版本之间存在不兼容性。
希望它有所帮助。
如果其他人有更好的解释,那就太棒了。
谢谢。