针对Java服务器的PHP SoapClient

针对Java服务器的PHP SoapClient,java,php,soap,Java,Php,Soap,我已经穷途末路了,所以是时候向社区寻求帮助了。我一直在网上搜刮我能找到的关于这个问题的任何资源,但没有一个能帮到我 我目前正试图通过PHP与JavaWebService服务器通信。我可以通过\uu getFunctions()下拉WSDL并列出它的函数和类型和\uuu getTypes() 我正在以这种格式创建客户端 newsoapclient(“https://username:password@ip:port/path/to/wsdl?wsdl“ 现在,最初这不会带来任何问题,但当我尝试对此

我已经穷途末路了,所以是时候向社区寻求帮助了。我一直在网上搜刮我能找到的关于这个问题的任何资源,但没有一个能帮到我

我目前正试图通过PHP与JavaWebService服务器通信。我可以通过
\uu getFunctions()下拉WSDL并列出它的函数和类型
\uuu getTypes()

我正在以这种格式创建客户端

newsoapclient(“https://username:password@ip:port/path/to/wsdl?wsdl“

现在,最初这不会带来任何问题,但当我尝试对此服务进行函数调用时,我得到了2个响应中的1个

我知道其中一个是超时错误,第二个我还不明白

错误:
SoapFault异常:[SOAP-ENV:Client][MT-IP]SOAP消息在…中的格式不正确。

代码如下:

// 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..
您还可以看到我正在测试的WSDL

您还可以查看我尝试调用webservice的页面


你好,世界!

不要在url中输入用户名和密码。SoapClient接受为此目的提供参数的选项数组

在我的例子中,服务器想要的示意图与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 );
    }
}

它抱怨您的邮件格式不正确,我们可以查看您的请求吗?我不确定如何为您获取该信息。将最后一个请求添加到该邮件中,删除URL中的用户名和密码无效。
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 );
    }
}