- 浏览: 196444 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
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 3810我们的一个项目,需要解析一个用户提供的rc4加密后的文件,特 ... -
JAVA7新特性
2010-09-30 14:38 1027Java7新特性 1.运行速度提高了,这个得益于Java7采用 ... -
Java Web开发(JSP、Servlet)乱码终极解决方案
2010-09-30 08:40 1537千万不要看网上那些杂七杂八的解决乱码的文章,解决乱 ... -
马士兵struts2学习笔记(详细版)
2010-09-29 15:57 174715、23_尚学堂马士兵_Struts2_模块包含 ... -
JAVA华为面试题
2010-09-29 15:49 3657这是华为Java的主要面试题目宝典。。。。真的是很有用。。。我 ... -
JVM学习笔记(四)------内存调优
2010-09-29 11:19 977首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别J ... -
JVM学习笔记(三)------内存管理和垃圾回收
2010-09-29 11:15 850JVM内存组成结构 JVM栈 ... -
JVM学习笔记(二)------Java代码编译和执行的整个过程
2010-09-29 11:10 1055Java代码编译是由Java源码编译器来完成,流程图 ... -
JVM学习笔记(一)------基本结构
2010-09-29 11:04 878从Java平台的逻辑结构上来看,我们可以从下图来了解JVM: ... -
Java调用外部exe程序方法
2010-09-29 09:20 1168用java调用外部.exe程序的方法: public ... -
EXT+DWR+SPRING+IBATIS+ORACLE分页显示+模糊查询
2010-09-28 13:14 2109EXT代码: Ext.onReady(fun ... -
Java编程把Word转Pdf
2010-09-28 08:42 2188我的word转pdf用到了一个虚拟的打印机,安装一个Adobe ... -
利用JSP实现的验证码
2010-09-28 08:38 799image.jsp <%@ page contentT ... -
经典的jsp分页显示
2010-09-28 08:34 773< %@ page contentType=" ... -
java类的设计技巧
2010-09-27 09:31 9471)一定将数据设计为私 ... -
Java邮件收发SMTP和POP3实例详解
2010-09-27 09:28 1913SMTP的连接和收发过程: a.建立TCP连接。 b.客户端发 ... -
谈谈java中的NaN值
2010-09-27 09:26 1084什么是NaN ?下面是我查到的结果。 Double中的 ... -
Java Jdbc查询MySQL数据库示例
2010-09-27 09:23 1842import java.sql.Connection; im ... -
Struts2 Error filterStart异常的解决方法总结
2010-09-27 09:01 988今天一位网友让polaris帮忙解决一些jqGrid的问题。在 ... -
JAVA开发编程规范
2010-09-27 08:55 911××××-××-××发布 ...
相关推荐
使用Axis客户端,开发者可以轻松地集成远程服务到自己的应用程序中,使得不同系统之间的交互变得无缝。 1. **rt.jar**:这是一个运行时库,包含了Java标准版(JRE)的基础类库。在Java应用程序中,rt.jar是Java运行...
在 Axis1.4 中传递复杂类型数组参数,涉及到的是 Web 服务中的数据绑定和消息处理。Axis 是一个开源的 SOAP 库,它允许开发者创建、部署和使用 Web 服务。在处理复杂类型数组时,ArrayMapping 是 Axis 中的一个关键...
4. **调用服务**: 使用Stub实例的方法调用远程服务,传递参数并接收返回值。 在实际应用中,为了调用Web服务,我们通常需要引用一系列的Axis2相关的jar包。然而,这些jar包往往数量众多,可能会增加项目的体积。...
现在你可以通过代理对象调用服务端的方法,传入必要的参数,并接收返回结果。 ```java Response response = port.myMethod(requestObject); ``` #### 7. 错误处理和资源释放 在调用完成后,别忘了清理和关闭资源...
它定义了一种标准的封装、编码和寻址消息的方法,使得不同的系统可以交换结构化和类型化的信息。 2. **Apache Axis**:Apache Axis是Java平台上用于构建和使用Web服务的框架。它包含了一系列工具,如wsdl2java...
标题 "Axis2服务发布与客户端代码示例" 涉及到的是Apache Axis2框架下如何创建和调用Web服务的实践。Apache Axis2是一个强大的Web服务引擎,它基于SOAP协议,用于构建和部署Web服务。这篇博客文章可能提供了一个实际...
4. **实例化并调用服务**:在客户端代码中,创建stub类的实例,然后通过实例调用服务的方法,传递参数并获取返回值。 5. **处理响应**:服务的响应通常以XML形式返回,客户端需要解析这个响应,并根据业务逻辑进行...
标题 "axis2-1.6.2客户端最少jar包" 指的是Apache Axis2的1.6.2版本中,用于构建客户端应用程序所需的最小Java Archive (JAR) 文件集合。Axis2是一个流行的Web服务框架,它允许开发人员创建、部署和管理Web服务。这...
在IT行业中,Web服务是一种广泛使用的接口技术,用于不同系统之间的数据交换和功能调用。Axis2是Apache软件基金会开发的一个高效、灵活的Web服务框架,它基于Java语言,为开发和部署Web服务提供了强大的支持。本文将...
- 模块化:可以通过加载不同的模块来扩展Axis2的功能。 总结,Axis2客户端是开发Web服务应用程序的强大工具,它简化了与远程Web服务的交互过程。通过生成的Stub类,开发者可以方便地调用Web服务方法,同时还能利用...
4. 在客户端项目中引入生成的客户端代码库,编写调用服务的代码,传入参数并接收返回结果。 总结,Web服务开发是企业级应用集成的关键技术,而Apache Axis作为强大的工具,简化了这一过程。理解并熟练掌握Web服务...
4. **调用Web服务**:使用生成的Stub类,你可以设置请求参数,然后调用对应的方法来发送SOAP请求并接收响应。例如: ```java ServiceNamePortTypeStub stub = new ServiceNamePortTypeStub(); SomeResponseType ...
这意味着当服务接收到`myNS:Student`类型的XML消息时,Axis会知道如何将其转换为JavaBean对象,反之亦然。 在实际调用Web服务时,客户端需要根据`StudentInfoService`这个服务名和提供的方法(例如`getAStudent`)...
WSDL文件描述了Web服务的接口,包括方法名、参数和返回类型。 3. **部署服务**: 将生成的Java源代码编译并部署到Web服务器,如Apache Tomcat。在这个例子中,提供了`apache-tomcat-6.0.18`版本,这将作为运行Web...
这些方法的实现是服务端的核心逻辑,通过XML配置文件`services.xml`进行描述,该文件位于`TestService\META-INF\services.xml`下,定义了服务名、描述、服务类以及消息接收器,以支持不同类型的Web服务交互模式。...
在本文中,我们将重点关注CXF客户端调用Web服务的方法,特别是处理Map类型参数的问题。 首先,CXF客户端调用Web服务时,通常会通过服务接口类来实现。在给出的示例中,`TestService`接口定义了几个服务方法,如`...
标题中的“手写Axis1.4发布WebService以及客户端调用”指的是使用Apache Axis1.4框架来创建和消费Web服务的过程。Apache Axis是用于构建Web服务的一个开源工具,它允许开发者将Java类转换为Web服务,并且提供客户端...
8. **测试Web服务**:使用SOAP客户端工具,如SoapUI,来测试我们的Web服务是否正常工作。 通过以上步骤,我们就成功地在SpringBoot中集成了Axis并创建了一个Web服务。这种组合的优势在于,SpringBoot的自动化配置和...
这些方法通常会接受 `java.io.InputStream` 或 `java.io.File` 对象作为参数,以便从客户端接收文件内容。 - **生成服务**:使用 Axis 的 wsdl2java 工具,根据服务接口生成相应的 Java 类和服务部署描述符(WSDL)...
3. WSDL文件:Web服务描述语言,定义了服务的接口、操作和数据类型,是wsimport生成客户端代码的输入。 4. README或指导文档:解释如何编译、运行服务端和客户端代码,以及可能遇到的问题和解决方案。 【知识点详细...