axis2c 做的客户端程序接收基于Axis2 java的Webservice服务返回的超长字符串

当axis2c客户端调用基于Axis2 Java的Webservice服务时,遇到返回超长字符串变为null的问题。解决方法是服务器端将返回类型改为byte[],客户端使用axutil_base64_binary_t*处理返回数据,通过解码得到原始字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述: 

  axis2c写的客户端程序与java开发的Webservice服务器端程序进行交互时,若WebService服务端的接口返回一个超长字符串,在服务器端使用String作为返回类型。当客户端请求该服务时,该服务会在服务端运行且运行得到结果是正确的,但在客户端接收的该字符串为null. 为什么请求可以被执行且结果是正确的,但该字符串无法正确的返回到客户端。

 

解决方法:

   在服务器端Webservice不使用String作为返回类型,而选择byte[]。客户端利用axis2c工具生成Stub
eg:
java WSDL2C -uri interoptestdoclitparameters.wsdl -d adb -u
或不使用adb数据绑定方式
java WSDL2C -uri interoptestdoclitparameters.wsdl -d none

 

在编写客户端代码时,调用类似以下函数adb_getDepStringResponse_get_return ,返回一个axutil_base64_binary_t* 类型的指针数据 ,而不是对应于服务器端得返回类型为String的char *。在处理axutil_base64_binary_t* 类型的指针数据时,可以参照下面的方法得到我们想要的char * 类型的数据。
 
 adb_getDepStringResponse_t * depStringRes = NULL ;
 axis2_char_t* str = NULL ;
 char * base64Str = NULL ;
 axutil_base64_binary_t * baseStrRes = NULL ;
 int len ;

 baseStrRes = adb_getDepStringResponse_get_return( depStringRes, env);
 printf("The getDeptString len  : %d/n" ,axutil_base64_binary_get_decoded_binary_len( baseStrRes, env));

 base64Str = axutil_base64_binary_get_encoded_binary( baseStrRes, env) ;
 //printf("The getDeptString  : %s/n" ,axutil_base64_binary_get_encoded_binary( baseStrRes, env));

 //返回字符串的长度
 *len = axutil_base64_decode_len(base64Str) ;
 printf("the len is %d /n" ,*len) ;
 //返回的字符串
 *str = (char *)malloc(sizeof(char)*(*len+1)) ; //内存分配为len+1
 axutil_base64_decode( *str, base64Str);
 printf("The ExportTree  : %s/n" ,*str);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值