【问题标题】:PHP SoapClient: Object passed is received as NULL in JavaPHP SoapClient:传递的对象在Java中被接收为NULL
【发布时间】:2014-12-03 15:05:34
【问题描述】:

我做了一个 php soap 客户端。我在soapcall期间传递了一个复杂的对象和一个字符串。传递的对象在 java 中被接收为 null,但传递的字符串被正确接收。类 (userGPSDataVisulization) 类具有 long (userGPSDataId)、int、float 和 string 属性。难道是因为它是作为简单的整数和字符串从java而不是long和float发送的?

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);

感谢所有回答和指导的人

【问题讨论】:

    标签: java php wsdl long-integer soap-client


    【解决方案1】:

    尝试传入一个 SOAP_ENC_OBJECT

    $struct = new stdClass();
    $struct->item1 = $item1; 
    
    $response = $client->RetrieveUserGPSDataVisualization(new SoapVar($struct, SOAP_ENC_OBJECT));
    

    【讨论】:

    • 感谢您的回复。肥皂调用有两个参数。一个是函数名,另一个是数组,所以这段代码行不通。 soapvar 也不返回数组。您能告诉我使用 SOAP_ENC_OBJECT 可以获得什么优势吗?谢谢
    • 哦,我以为 __soapCall 是你的函数,我会更新我的代码。函数名称是客户端调用的名称,您将soap变量传递给它。
    • 看看我如何在这里扩展soap客户端stackoverflow.com/questions/27068476/…
    • SOAP_ENC_OBJECT 只是一个预定义的常量
    【解决方案2】:

    重命名:

    function userGPSDataVisulization ($timeStampStart,$timeStampEnd){
    

    收件人:

    function __construct ($timeStampStart,$timeStampEnd){
    

    【讨论】:

    • 没关系。第一个也是一个有效的构造函数。
    • @Daan 在 PHP 5.3.3 之前是这样,但之后不是
    • 没错,不过他没有具体说明哪个php版本。
    • @Daan True,但由于 5.3.3 自 2010 年以来一直存在,我希望我们可以假设他使用的是更新版本...
    • 感谢大家的回复。我正在使用最新的 php。我纠正了它。我认为的问题是序列化。在 php 中传递的对象在 java 中被接收为 Null,因此出现空指针异常。任何解决方法?谢谢
    猜你喜欢
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 2010-12-15
    • 2017-06-12
    • 1970-01-01
    • 2015-08-26
    • 2017-01-20
    • 2014-10-14
    相关资源
    最近更新 更多