Php 使用SoapClient从webservice读取长值
我正在用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调用中得到的确切信息: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,而将其保留在字符串中 有人知道如何解决这个问题吗? 长溢出是因为
长溢出是因为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;
}
?>