axis2c 做的客户端程序接收基于Axis2 java的Webservice服务返回的超长字符串
2010-04-02 09:02
786 查看
问题描述:
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);
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);
相关文章推荐
- Java编写一个简单的TCP通信程序。服务器发送一条字符串,客户端接收该信息并显示。
- axis2客户端调用免费的webservice服务的实例之一通过wsdl生成客户端程序并本地调用
- axis2通过wsdl2java.bat生成webservice异步客户端程序
- 利用Axis2开发WebService(3)---用Java实现调用WebService的客户端程序
- 使用Axis2用Java实现调用WebService的客户端程序
- 构建基于CXF的WebService服务(2)-- 利用CXF提供的wsdl2java工具创建客户端
- Java 中利用 axis2 进行webservice 客户端编写
- Java实现调用WebService的客户端程序
- Java创建WebService服务及客户端实现
- 基于TCP网络通信的自动升级程序源码分析-客户端接收文件
- <项目一>struts2+java 接收安卓客户端post过来的json字符串
- Java创建WebService服务及客户端实现
- java在线聊天项目0.8版 实现把服务端接收到的信息返回给每一个客户端窗口中显示功能
- webservice发布服务:AXIS2及客户端调用
- java客户端调用C#webservice服务相关问题
- 基于XFire框架利用ant构建WebService的客户端程序
- [转载]Java创建WebService服务及客户端实现
- axis1.4发布返回复杂类型的webservice服务+代码访问+客户端访问
- java客户端调用c#的webservice服务