2014-12-03 73 views
2

我做了一個php肥皂客戶端。我在soapcall期間傳遞一個複雜的對象和一個字符串。傳入的對象在java中接收爲null,但傳遞的字符串正確接收。類(userGPSDataVisulization)類具有long(userGPSDataId),int,float和string屬性。它可以是因爲它是從java發送的簡單整數和字符串而不是long和float嗎?PHP SoapClient:傳入的對象在Java中被接收爲NULL

class RetrieveUserGPSDataVisualization { 

public $userGPSDataVisulization; 
public $StorageMedium='DATABASE'; 

function RetrieveUserGPSDataVisualization ($userGPSDataVisulization){ 

    $this->userGPSDataVisulization = $userGPSDataVisulization; 
} 
} 
class userGPSDataVisulization { 

    public $id=0; 
    public $latitude=0.0; 
    public $longitude=0.0; 
    public $speed=0.0; 
    public $timeStamp=''; 
    public $timeStampStart=''; 
    public $timeStampEnd=''; 
    public $userGPSDataId='0'; 
    public $userDeviceId='0'; 

function userGPSDataVisulization ($timeStampStart,$timeStampEnd){ 

    $this->timeStampStart = $timeStampStart; 
    $this->timeStampEnd = $timeStampEnd; 

}} 
    $client = new SoapClient("http://localhost/etc/Layer?WSDL"); 

//setting dates 
$useRGPSDataVisulization = new userGPSDataVisulization ('2014 12 01 00:00:00','2014 12 01 23:59:59'); 

//populate object 
$RetrieveUserGPSDataVisualization=new RetrieveUserGPSDataVisualization($useRGPSDataVisulization); 
$params = array(
"RetrieveUserGPSDataVisualization" => $RetrieveUserGPSDataVisualization, 
); 

var_dump($params); 

try{ 
$response = $client->__soapCall("RetrieveUserGPSDataVisualization", $params); 
var_dump($response); 
} 
catch(Exception $e) { 
    echo 'Message: ' .$e->getMessage(); 
} 

通過調試我才知道,useRGPSDataVisulization對象爲空Java編寫,但只在PHP中調用的SOAPCall之前,當它顯示了所有的價值。這是由於Java中的長數據類型嗎?

感謝

更新:我已經解決了這個問題 我已填充對象這樣和對象不接收爲NULL。這是另一種調用soap函數的方法。

$useRGPSDataVisulization = $client->RetrieveUserGPSDataVisualization($RetrieveUserGPSDataVisualization); 

感謝所有誰回答和引導

回答

3

嘗試傳遞一個SOAP_ENC_OBJECT

$struct = new stdClass(); 
$struct->item1 = $item1; 

$response = $client->RetrieveUserGPSDataVisualization(new SoapVar($struct, SOAP_ENC_OBJECT)); 
+0

感謝您的回覆。 soapcall有兩個參數。一個是函數名,另一個是數組,所以這段代碼不起作用。 soapvar也不返回數組。你能告訴我用SOAP_ENC_OBJECT可以獲得什麼優勢嗎? 謝謝 – shujaat 2014-12-04 03:10:49

+1

哦,我以爲__soapCall是你的功能,我會更新我的代碼。函數名稱是客戶端調用的,並將soap變量傳遞給它。 – Demodave 2014-12-05 15:00:03

+1

看看我如何在這裏擴展肥皂客戶端https://stackoverflow.com/questions/27068476/how-to-access-windows-web-service-in-php/27068539#27068539 – Demodave 2014-12-05 15:05:49

2

重命名以下:

function userGPSDataVisulization ($timeStampStart,$timeStampEnd){ 

要:

function __construct ($timeStampStart,$timeStampEnd){ 
+1

這沒關係。第一個也是一個有效的構造函數。 – Daan 2014-12-03 15:08:47

+2

@Daan直到PHP 5.3.3它是,但事後它不是 – RichardBernards 2014-12-03 15:09:21

+2

沒錯,他沒有指定哪個php版本。 – Daan 2014-12-03 15:10:25