[英]PHP SoapClient against Java Server
我已经走到了尽头,是时候该向社区寻求帮助了,我一直在网络上搜集我可以在此问题上找到的任何资源,但没有任何帮助。
我目前正在尝试通过PHP与Java Webservice服务器进行通信。 我可以下拉WSDL并通过__getFunctions();
列出其功能和类型__getFunctions();
和__getTypes();
我正在以这种格式创建客户端
new SoapClient("https://username:password@ip:port/path/to/wsdl?wsdl");
现在开始时这没有问题,但是当我尝试对该服务进行函数调用时,得到2个响应之一。
我知道其中一个是超时错误,第二个是我目前尚不了解的错误。
错误: SoapFault exception: [SOAP-ENV:Client] [MT-IP] SOAP message is not well formed in...
这是代码:
// All of this works
$options["login"] = "login";
$options["password"] = "password";
$wsdl = "https://" . $options["login"] . ":" . $options["password"] . "@ip:port/path/to/wsdl?wsdl";
$client = new SoapClient($wsdl, $options);
try {
$functions = $client->__getFunctions();
$types = $client->__getTypes();
$params = new stdClass();
$params->pong = (string)"Hello World!";
// This fails
$result = $client->ping($params);
var_dump($result);
} catch (SoapFault $exception) {
echo $exception;
}
另外,我还尝试了以所有可用方式调用方法,例如
$client->__soapCall("ping", array($params));
$client->__soapCall("ping", array(array("pong" => "Hello World!)));
$client->__soapCall("ping", array("pong" => "Hello World"));
$client->__soapCall("ping", array("parameters" => array("pong" => "Hello World"));
// and some more..
您还可以查看我尝试调用Webservice SOAP TEST的页面
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="com.computas.mt.extern.Ping">
<SOAP-ENV:Body>
<ns1:ping>
<pong>Hello World!</pong>
</ns1:ping>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
就我而言,服务器所需的原理图与PHP发送的请求的原理图不同。 解决方案是通过扩展SoapClient在发送请求XML之前对其进行物理更改。 一旦有了服务器通常提供的XML布局,就可以发现问题的更改。
class MySoapClient extends SoapClient {
function __doRequest( $request, $location, $action, $version, $one_way = NULL ) {
$request = str_replace("SOAP-ENV", "soapenv", $request);
$request = str_replace("xsi", "com", $request);
$request = str_replace("ns1", "com", $request);
var_dump($request);
return parent::__doRequest( $request, $location, $action, $version, $one_way );
}
}
请勿在网址中输入用户名和密码。 SoapClient接受为此目的提供参数的选项数组。 http://de2.php.net/manual/zh/soapclient.soapclient.php
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.