簡體   English   中英

針對Java Server的PHP SoapClient

[英]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..

您還可以看到我正在針對WSDL測試的WSDL

您還可以查看我嘗試調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM