0

我正在使用 SabreAMF 调用 Java Web 服务。

这是Java函数:

@RemotingInclude
public Boolean testAMF(List<Integer> ints)
{
    for (Integer element : ints) 
    {  
        //do something
    }

    return true;
}

请注意,此函数接受整数列表。

这是PHP代码:

<?php
    require 'SabreAMF/Client.php';

    function make_request($service, $method, $params)
    {
        $client = new SabreAMF_Client('https://xxx');
        return $client->sendRequest($service.'.'.$method,$params);
    }

    $ints = array(1,2);
    $parameters = array($ints);
    $result = make_request('chartManager','testAMF',$parameters);
    var_dump($result);
?>

我传递一个包含 2 个整数的数组。在 Java 中,此数组以列表形式出现,但其中包含双精度数,而不是整数。

然后我收到以下错误:

java.lang.ClassCastException : java.lang.Double cannot be cast to java.lang.Integer

为什么它将我的整数更改为 double ?

4

1 回答 1

1

AMF0中只有双打。因此,您需要将类型更改为Double.

如果您使用 AMF3,您可以获得整数支持:

    $client = new SabreAMF_Client('https://xxx');
    $client->setEncoding(SabreAMF_Const::AMF3);
    return $client->sendRequest($service.'.'.$method,$params);
于 2013-02-06T13:13:40.030 回答