Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用SoapClient从webservice读取长值_Php_Web Services_Soap_Jax Ws - Fatal编程技术网

Php 使用SoapClient从webservice读取长值

Php 使用SoapClient从webservice读取长值,php,web-services,soap,jax-ws,Php,Web Services,Soap,Jax Ws,我正在用PHP为用Java编写的ws(Jax ws)编写soap使用者。webservice导出一个函数listRooms(),该函数返回复杂数据类型Room的数组,该数组包含一个id(64位长)和一个描述(字符串)。现在,每当我使用SoapClient使用webservice时,id都会转换为float(因为PHP中没有64位整数),我希望避免使用它。因为我需要房间id来使用其他web服务,所以我宁愿避免将其隐式转换为float,而将其保留在字符串中 有人知道如何解决这个问题吗? 长溢出是因为

我正在用PHP为用Java编写的ws(Jax ws)编写soap使用者。webservice导出一个函数listRooms(),该函数返回复杂数据类型Room的数组,该数组包含一个id(64位长)和一个描述(字符串)。现在,每当我使用SoapClient使用webservice时,id都会转换为float(因为PHP中没有64位整数),我希望避免使用它。因为我需要房间id来使用其他web服务,所以我宁愿避免将其隐式转换为float,而将其保留在字符串中

有人知道如何解决这个问题吗?

长溢出是因为ext/soap将其映射为int,而您处于32位拱形上。您可以通过使用自定义类型映射器覆盖{http://www.w3.org/2001/XMLSchema }长:

函数到长xml($longVal){ 返回“.$longVal.”; } 来自长xml的函数($xmlFragmentString){ 返回(字符串)条带标签($xmlFragmentString); } $client=新的SoapClient('http://acme.com/products.wsdl,数组( “类型映射”=>数组( 排列( '类型'=>'http://www.w3.org/2001/XMLSchema', 'type_name'=>'long', 'to_xml'=>'to_long_xml', 'from_xml'=>'from_long_xml', ), ), )); 另外,请按照手册检查您从SOAP调用中得到的确切信息:


长溢出是因为ext/soap将其映射为int,而您处于32位拱形上。您可以通过使用自定义类型映射器覆盖{http://www.w3.org/2001/XMLSchema }长:

函数到长xml($longVal){ 返回“.$longVal.”; } 来自长xml的函数($xmlFragmentString){ 返回(字符串)条带标签($xmlFragmentString); } $client=新的SoapClient('http://acme.com/products.wsdl,数组( “类型映射”=>数组( 排列( '类型'=>'http://www.w3.org/2001/XMLSchema', 'type_name'=>'long', 'to_xml'=>'to_long_xml', 'from_xml'=>'from_long_xml', ), ), )); 另外,请按照手册检查您从SOAP调用中得到的确切信息:


另一种方法是在将数据作为长类型发送之前使用
float()
函数

在下面的示例中,我将使用stdclass对象作为参数发送:

<?php
if ($index == "Your_longtype_Field"){
    $a->$index = (float) $value;
} else {
    $a->$index = $value;
}
?>

另一种方法是在将数据作为长类型发送之前使用
float()
函数

在下面的示例中,我将使用stdclass对象作为参数发送:

<?php
if ($index == "Your_longtype_Field"){
    $a->$index = (float) $value;
} else {
    $a->$index = $value;
}
?>


作为一个浮点数有什么问题吗?作为一个浮点数有什么问题吗?很好!就我个人而言,我现在被困在SOAP‘multicall’上,如果您的WSDL花费的时间太长,您也需要它……那是什么?(我对Java ws也有问题,对于返回的某些函数,对象是空的,你有解决方案吗?)有些API代码编写得很糟糕,你可能是第一个测试特定调用的人。如果你得到过多的延迟或者没有得到你期望的结果,请联系开发人员,并与他们建立工作关系。你刚刚救了我的命。非常感谢。太好了!就我个人而言,我现在被困在SOAP‘multicall’上,如果您的WSDL花费的时间太长,您也需要它……那是什么?(我对Java ws也有问题,对于返回的某些函数,对象是空的,你有解决方案吗?)有些API代码编写得很糟糕,你可能是第一个测试特定调用的人。如果你得到过多的延迟或者没有得到你期望的结果,请联系开发人员,并与他们建立工作关系。你刚刚救了我的命。非常感谢。
<?php
if ($index == "Your_longtype_Field"){
    $a->$index = (float) $value;
} else {
    $a->$index = $value;
}
?>