- 浏览: 192945 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
chmadmin:
求源码,参考下
Extjs做的一个图书管理系统(详细解析) -
wilddonkey:
lz,我现在自定义了转换器,但是如果输入为空,则自动跳过,虽然 ...
struts2-ognl.MethodFailedException: Method "setId" failed for object -
accpchf:
/** * 懒汉式, * 既有延迟加载功能又能保证线程安全, ...
J2EE面试题集锦(附答案) -
accpchf:
java编程第三题明显错误 A ab = new B(); ...
J2EE面试题集锦(附答案) -
风雨故都:
求源码。参考一下
Extjs做的一个图书管理系统(详细解析)
axis只支持简单类型的返回值。在这里逐一介绍axis的各种返回值接受。
1:axis接受基本类型,如int ,string等
引入的系统文件:
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
Service service = new Service();//创建service对象
Call call;
try {
call = (Call) service.createCall();//得到Call对象
try {
call.setTargetEndpointAddress(new java.net.URL(Constants.sns_sms_service));//将要访问的接口地址,将接口地址加上?wsdl在浏览器中访问就可以查看到wsdl文件的信息,以及你所需要的参数名称等。
} catch (MalformedURLException e) {
e.printStackTrace();
}
call.setOperationName("sendSms");//WSDL 里面描述的接口名称
call.getMessageContext().setUsername(Constants.sns_httpbase_username);//http 认证用户名
call.getMessageContext().setPassword(Constants.sns_httpbase_password);//http 认证密码
call.addParameter("sendnum", org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);//接口的参数 sendnum 为String类型。addParameter()第一个参数是参数的名称与wsdl中相对应必须相同。第二个参数是参数的类型 。也必须与wsdl相同。
call.addParameter("acceptnums", org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);//接口的参数
call.addParameter("smscnt", org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);//接口的参数
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);// 设置返回类型 简单类型的返回就可以这样简单操作,只要设置返回类型即可。甚至可以不设置返回类型。不设置返回类型操作方法请看2
Object xml;
try {
xml = (Object)call.invoke(new Object[]{send,reving,content});//参数的顺序与addParameter的顺序相同,且设置了 addParmaters就必须setRuturnType返回值
//给方法传递参数,并且调用方法
System.out.println("result is "+xml);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
2.不设置返回类型的简单类型返回值。
Service和Call的创建都与1相同。
call = (Call) service.createCall();
call.setOperationName(new QName(url, "getIByusername"));//getByusername是服务端接口的方法名称url是接口地址
call.setTargetEndpointAddress(new java.net.URL(url));//接口地址
Object o = call.invoke(new Object[] { account ,IP, mcode });//这里直接传入参数,但是需要注意的是,传入的参数顺序必须与wsdl顺序相同,且类型相同。可以接收一个map的对象。
3.。返回值为自定义对象
try{
String url = Constants.sns_login_service;
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName(new QName(url, "Login"));//Login为要调用的方法名
// hoope.views.api.login_service.LoginService为 wsdl中 targetNamespace 的值 以下相同
call.addParameter(new QName("hoope.views.api.login_service.LoginService",
"username"),XMLType.SOAP_STRING,ParameterMode.IN);//这里的username为传入参数的变量名字
call.addParameter(new QName("hoope.views.api.login_service.LoginService",
"pwd"),XMLType.SOAP_STRING,ParameterMode.IN);//这里的units为传入参数的变量名字
call.addParameter(new QName("hoope.views.api.login_service.LoginService",
"code"),XMLType.SOAP_STRING,ParameterMode.IN);//这里的code为传入参数的变量名字
call.setReturnType(new QName("hoope.views.api.login_service.LoginService",
"response"), ITVAccount.class);//ITVAccount这里是重点,返回时主要在这配置,ITVAccount为返回的对象
// 注册映射关系
QName XljgInfo = new QName("hoope.views.api.login_service.LoginService", "LoginInfoDict");//此处的 LoginInfoDict为WSDL文件中complexType name的属性值
//这里注册映射关系,对自定义的类进行序列化与反序列化。
call.registerTypeMapping(ITVAccount.class, XljgInfo,
new BeanSerializerFactory(ITVAccount.class, XljgInfo),
new BeanDeserializerFactory(ITVAccount.class, XljgInfo));//ITVAccount.class同上,
ITVAccount itv =(ITVAccount) call.invoke(new Object[] {account,pwd,code});//接口接收的参数
if(itv!=null){
itv.setNickName(itv.getNickname());
itv.setUserName(itv.getUsername());
itv.setMobilePhone(itv.getUserphone());
}
System.out.println("xljg="+itv);//打印输出对象
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
4。返回自定义数组对象
返回数组对象与3相似,只要将注册返回类型为数组即可。
try{
String url = Constants.sns_login_service;
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName(new QName(url, "Login"));//Login为要调用的方法名
// hoope.views.api.login_service.LoginService为 wsdl中 targetNamespace 的值 以下相同
call.addParameter(new QName("hoope.views.api.login_service.LoginService",
"username"),XMLType.SOAP_STRING,ParameterMode.IN);//这里的username为传入参数的变量名字
call.addParameter(new QName("hoope.views.api.login_service.LoginService",
"pwd"),XMLType.SOAP_STRING,ParameterMode.IN);//这里的units为传入参数的变量名字
call.addParameter(new QName("hoope.views.api.login_service.LoginService",
"code"),XMLType.SOAP_STRING,ParameterMode.IN);//这里的code为传入参数的变量名字
call.setReturnType(new QName("hoope.views.api.login_service.LoginService",
"response"), ITVAccount[].class );//ITVAccount 这里是重点,返回时主要在这配置,ITVAccount为返回数组对象
// 注册映射关系
QName XljgInfo = new QName("hoope.views.api.login_service.LoginService", "LoginInfoDict");//此处的 LoginInfoDict为WSDL文件中complexType name的属性值
//这里注册映射关系,对自定义的类进行序列化与反序列化。
call.registerTypeMapping(ITVAccount[].class , XljgInfo,
new BeanSerializerFactory(ITVAccount[]. class, XljgInfo),
new BeanDeserializerFactory(ITVAccount[]. class, XljgInfo));//ITVAccount.class同上,
ITVAccount[] itv =(ITVAccount[]) call.invoke(new Object[] {account,pwd,code});//接口接收的参数
System.out.println("xljg="+itv);//打印输出数组
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
5。返回值为对象中包含对象及对象中包含数组
try {
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName( new QName(url, " seachRelateUserInfo " )); // seachRelateUserInfo为要调用的方法名
call.getMessageContext().setUsername( " admin " ); // httpbase认证用户名
call.getMessageContext().setPassword( " admin " ); // httpbase认证密码
// hoope.views.api.userinfo_service.UserInfoWebService 为 wsdl中 targetNamespace 的值 以下相同
call.addParameter( new QName( " hoope.views.api.userinfo_service.UserInfoWebService " ,
" condition " ),XMLType.SOAP_STRING,ParameterMode.IN); // 这里的condition为传入参数的变量名字
call.addParameter( new QName( " hoope.views.api.userinfo_service.UserInfoWebService " ,
" type " ),XMLType.SOAP_INT,ParameterMode.IN); // 这里的type为传入参数的变量名字
call.addParameter( new QName( " hoope.views.api.userinfo_service.UserInfoWebService " ,
" start " ),XMLType.SOAP_INT,ParameterMode.IN); // 这里的start为传入参数的变量名字
call.addParameter( new QName( " hoope.views.api.userinfo_service.UserInfoWebService " ,
" pagesize " ),XMLType.SOAP_INT,ParameterMode.IN); // 这里的pagesize为传入参数的变量名字
call.addParameter( new QName( " hoope.views.api.userinfo_service.UserInfoWebService " ,
" checkcode " ),XMLType.SOAP_STRING,ParameterMode.IN); // 这里的checkcode为传入参数的变量名字
call.setReturnType( new QName( " hoope.views.api.userinfo_service.UserInfoWebService " ,
" response " ), MapInfoDict. class ); // 这里设置返回值的类型
// 注册映射关系 // 此处的MapInfoDict userInfoDictArray userInfoDict为WSDL文件中complexType name的属性值 首先找到返回对象的complexType再看它中是否有其他的对象类型自定义对象类型,然后依次映射。
// 这里返回对象的complexType为MapInfoDict,MapInfoDict中有一个userInfoDictArray的对象,userInfoDictArray的对象中有一个List<UserInfoDict>的集合。
// 问题就在这里,这个集合获取不到。
QName XljgInfo = new QName( " hoope.views.api.userinfo_service.UserInfoWebService " , " MapInfoDict " );
QName XljgInfo2 = new QName( " hoope.views.api.userinfo_service.UserInfoWebService " , " userInfoDictArray " );
QName XljgInfo3 = new QName( " hoope.views.api.userinfo_service.UserInfoWebService " , " userInfoDict " );
// 为自定义类型进行序列化和反序列化。必须与上面定义的QName匹配。它与服务端返回的类型做映射匹配。
call.registerTypeMapping(MapInfoDict. class , XljgInfo,
new BeanSerializerFactory(MapInfoDict. class , XljgInfo),
new BeanDeserializerFactory(MapInfoDict. class , XljgInfo));
call.registerTypeMapping(UserInfoDictArray. class , XljgInfo2,
new BeanSerializerFactory(UserInfoDictArray. class , XljgInfo2),
new BeanDeserializerFactory(UserInfoDictArray. class , XljgInfo2));
//对 UserInfoDictArray中存在的是对象,则直接对对象进行序列化与反序列话即可。但如果UserInfoDictArray中的是List该如何去映射呢?该如何序列化呢?还没找到实现方法。待解决中。。。望高人指点。
call.registerTypeMapping(UserInfoDict. class , XljgInfo3,
new BeanSerializerFactory(UserInfoDict. class , XljgInfo3),
new BeanDeserializerFactory(UserInfoDict. class , XljgInfo3));[ / color]
MapInfoDict xljg = (MapInfoDict) call.invoke( new Object[] {parm, " 1 " , " 1 " , " 20 " , " itv " }); // 执行调用服务接口
System.out.println( " xljg= " + xljg); // 打印输出
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
发表评论
-
java版RC4加密解密算法
2010-10-25 11:01 3776我们的一个项目,需要解析一个用户提供的rc4加密后的文件,特 ... -
JAVA7新特性
2010-09-30 14:38 1000Java7新特性 1.运行速度提高了,这个得益于Java7采用 ... -
Java Web开发(JSP、Servlet)乱码终极解决方案
2010-09-30 08:40 1490千万不要看网上那些杂七杂八的解决乱码的文章,解决乱 ... -
马士兵struts2学习笔记(详细版)
2010-09-29 15:57 171815、23_尚学堂马士兵_Struts2_模块包含 ... -
JAVA华为面试题
2010-09-29 15:49 3634这是华为Java的主要面试题目宝典。。。。真的是很有用。。。我 ... -
JVM学习笔记(四)------内存调优
2010-09-29 11:19 946首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别J ... -
JVM学习笔记(三)------内存管理和垃圾回收
2010-09-29 11:15 826JVM内存组成结构 JVM栈 ... -
JVM学习笔记(二)------Java代码编译和执行的整个过程
2010-09-29 11:10 1036Java代码编译是由Java源码编译器来完成,流程图 ... -
JVM学习笔记(一)------基本结构
2010-09-29 11:04 848从Java平台的逻辑结构上来看,我们可以从下图来了解JVM: ... -
Java调用外部exe程序方法
2010-09-29 09:20 1141用java调用外部.exe程序的方法: public ... -
EXT+DWR+SPRING+IBATIS+ORACLE分页显示+模糊查询
2010-09-28 13:14 2083EXT代码: Ext.onReady(fun ... -
Java编程把Word转Pdf
2010-09-28 08:42 2151我的word转pdf用到了一个虚拟的打印机,安装一个Adobe ... -
利用JSP实现的验证码
2010-09-28 08:38 772image.jsp <%@ page contentT ... -
经典的jsp分页显示
2010-09-28 08:34 746< %@ page contentType=" ... -
java类的设计技巧
2010-09-27 09:31 9191)一定将数据设计为私 ... -
Java邮件收发SMTP和POP3实例详解
2010-09-27 09:28 1846SMTP的连接和收发过程: a.建立TCP连接。 b.客户端发 ... -
谈谈java中的NaN值
2010-09-27 09:26 1050什么是NaN ?下面是我查到的结果。 Double中的 ... -
Java Jdbc查询MySQL数据库示例
2010-09-27 09:23 1811import java.sql.Connection; im ... -
Struts2 Error filterStart异常的解决方法总结
2010-09-27 09:01 961今天一位网友让polaris帮忙解决一些jqGrid的问题。在 ... -
JAVA开发编程规范
2010-09-27 08:55 885××××-××-××发布 ...
相关推荐
axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端
Axis客户端调用代码,使用WSDL2JAVA生成的客户端,可以直接进行调用
java axis客户端调用webservice,可应用于ofbiz框架。 解决网络上共享代码两次调用后会出现timeout的BUG
axis2客户端调用axis1服务接口 调用方式 使用RPC方式调用WebService,为了防止冲突可以增加 // 与weblogic的lib冲突配置 System.setProperty("javax.xml.stream.XMLInputFactory", ...
axis客户端调用WebService需要的最少包。包含axis.jar commons-discovery-0.2.jar commons-logging.jar jaxrpc.jar mail.jar saaj.jar wsdl4j.jar
之前webservice客户端调用,使用RPC客戶端接口调用方法,但发现此种调用方式针对携参方式并不适用。最后经过多种方式测试选择了OMFactory......调用。经测试好用
axis1.4生成访问客户端代码
axis客户端生成set Axis_Lib=E:\DONGLING\document\JAR_LIB\axis-1_4\lib
axis2客户端需要的jar包总结,包含axis2客户端搭建需要的全部jar包。
NULL 博文链接:https://huttoncs.iteye.com/blog/2091706
cxf客户端调用axis服务端流程
axis1.4生成客户端 axis1.4生成客户端 axis1.4生成客户端 axis1.4生成客户端
java调用webservice axis 客户端 服务器端 包含jar包
非常好用的webservice for axis客户端详尽代码! 可以用以快速入门webservice的学习。
使用axis2生成客户端,调用服务端,测试服务端的接口所需要的最少的jar包。
axis根据服务端wsdl生成客户端工具。
axis2客户端调用工程代码
axis2客户端调用服务端,带用户身份认证
WebService Axis客户端调用接口需要用到的jar包