我做了一个php soap客户端。我在肥皂调用期间传递了一个复杂对象和一个字符串。传递的对象在 java 中作为 null 接收,但传递的字符串被正确接收。类(userGPSDataVisulization)类具有长(userGPSDataId),int,float和字符串属性。可能是因为它从 java 作为简单的整数和字符串发送,而不是长整型和浮点数?
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);
感谢所有回答和指导的人
尝试传入SOAP_ENC_OBJECT
$struct = new stdClass();
$struct->item1 = $item1;
$response = $client->RetrieveUserGPSDataVisualization(new SoapVar($struct, SOAP_ENC_OBJECT));
重命名以下内容:
function userGPSDataVisulization ($timeStampStart,$timeStampEnd){
自:
function __construct ($timeStampStart,$timeStampEnd){