`
zhongkem
  • 浏览: 152542 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

axis1.4 使用笔记(3)

阅读更多

3.2客户端程序的开发

3.2.1 java2WSDL 

 

这个工具应该是服务器端的人应该用的,放在这里主要是为了讲述方便。调用这个工具可以根据java类生成对应的wsdl文件发布出去。下面是一个批处理文件,大家可以保存下来,稍微改改就能用了。

set Axis_Lib=D:\JavaTools\axis-1_4\lib    
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
%Java_Cmd% org.apache.axis.wsdl.Java2WSDL  
   -osn_advanceSearch.wsdl 
   -lhttp://localhost:8080/axis/services/SN_AdvanceSearch 
   -n"urn:BeanService" 
   -p"cn.edu.tju.ikse.sn.advancedSearch" "urn:BeanService"    cn.edu.tju.ikse.sn.advancedSearch.SemanticQueryOperate
pause

 -O:指定生成的wsdl文件名

-l:指定生成服务的访问地址

-n:指定名字空间

-p:指定名字空间与包的对应关系

最后指定具体的java类即你要发布的类。

这个工具最适用的环境:服务端根据业务需要写完暴露的接口后就可以用这个工具生成wsdl文件了,而不必要自己动手写wsdl文件,理论上就可以根据这个wsdl文档发布这个服务了。客户端一般是不会调用这个方法的。。因为客户端一般拿不到类文件~~放在这里讲是告诉大家有这么一个好用的工具。

 

3.2.2 WSDL2java

 

      这个工具是根据wsdl文件生成对应的调用类。这个在客户端是很有用的。当你只能从服务端拿到wsdl文档而不能拿到任何的代码或类文件时就得靠它了!这个工具会根据wsdl文档的定义生成一些对应的类,如复杂类型定义就会生成对应的javaBean..

编辑一个WSDL2Java.bat,Axis_Lib为axis.jar路径。内容如下:

set Axis_Lib=D:\JavaTools\axis-1_4\lib    
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%    
set Output_Path=D:\JavaTools\eclipse3.2\workplace\axisTest\src   
set Package=cn.edu.tju.ikse.sn.advancedSearch  
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% http://localhost:8080/axis/services/SN_AdvanceSearch?wsdl
pause

 

应该不用解释吧。。很容易看懂,主要是调用WSDL2Java 根据服务端发布的服务生成对应的接口。

      倒数第二行是应用wsdl2java这个工具,最后是指定wsdl文件的位置,这个文件可以是本地的wsdl文件,也可以是网络上的wsdl文件。

      再解释下第三行,第三行是我客户端项目的源文件路径,这样通过工具生成的代码直接加到项目里了,省些复制粘贴的麻烦。刷新下项目,在包cn.edu.tju.ikse.sn.advancedSearch  下就能看到六个java文件:

AdvanceSearch.java//自定义类型,wsdl中的复杂类型定义都会生成对应的javaBean

Serviceinfo.java//这也是一个自定义类型。。一开始没生成这们。。后面的注意事项里会讲到原因。

SemanticQueryOperate.java,//这是一个接口,描述服务器端能干什么。对应于wsdl中的wsdl:portType

SemanticQueryOperateService.java,//这是一个接口.相当于wsdl中的wsdl:service结点

SemanticQueryOperateServiceLocator.java,实现了SemanticQueryOperateService接口.
这个类的作用是直接与服务器端通信,建立与服务器端的连接,实例化stub.然后客户端就可以通过stub与服务器通信了.

SN_AdvanceSearchSoapBindingStub.java.这个类实现了SemanticQueryOperate接口,作为服务器在客户端的存根,也就是一个stub.在客户端,对服务器的所有调用,本质上都是对stub的调用

 

3.2.3 客户端编码

 

客户端编码主要有两种方式:

  • 第一种方法是利用wsdl2java生成的stub类来进行调用,这种方式的好处是调用简单,不需要服务端的支持
  • 第二种方法是不通过stub类来进行调用,这种方式完全由用户控制调用的所有参数。

实际使用中应该多用第一种方式,代码写起来简单。下面分别进行讲述。

先讲第二种方式吧,看代码:

public static void testadvancesearch() {
		//设置服务连接路径
		String url = "http://127.0.0.1:8989/axis/services/SN_AdvanceSearch";
		//下面是构建服务的输入参数
		AdvanceSearch search = new AdvanceSearch();
		search.setDomain("Biology");
		search.setServiceName("getENTRYbyScientificName");//getENTRYbyScientificName

		try {
			Service service = new Service();//构建一个服务
			Call call = (Call) service.createCall();
			//注册javaBean 注意和server-config.wsdd保持一致
			QName qn = new QName("urn:BeanService", "Serviceinfo");
			call.registerTypeMapping(Serviceinfo.class, qn,
					new org.apache.axis.encoding.ser.BeanSerializerFactory(
							Serviceinfo.class, qn),
					new org.apache.axis.encoding.ser.BeanDeserializerFactory(
							Serviceinfo.class, qn));
			//创建调用*/			
			call.setTargetEndpointAddress(new java.net.URL(url));
			//调用服务器的方法
			call.setOperationName(new QName("SemanticQueryOperate",
					"getAdvancedSearchArrayList"));
			//设定返回类型
			//call.setReturnClass(ArrayList.class);	//call.invoke(new Object[]{"haha"});
			//设定传入参数
			//call.addParameter("userpara", XMLType.XSD_ANYTYPE, ParameterMode.IN);			
			//System.out.println(new Object[]{userPar});
			//接受结果
			Object[] result = (Object[]) call.invoke(new Object[] { search });
			if (result != null && result.length > 0) {
				for (int i = 0; i < result.length; i++) {
					Serviceinfo serviceinfo = (Serviceinfo) result[i];
					System.out.println(serviceinfo.getCatagoryName()
							+ serviceinfo.getAffiliation());
				}
			}

		} catch (ServiceException e) {
			e.printStackTrace();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

 

 上面代码已经注释得差不多了。就不具体解释了。

再看第一种方式的调用:

public static void testadvancesearchstub() throws ServiceException {
		// 创建你要对话的服务
		SemanticQueryOperateService service = new SemanticQueryOperateServiceLocator();
		
		SemanticQueryOperate client = service.getSN_AdvanceSearch();
		//构建服务的输入参数
		AdvanceSearch search = new AdvanceSearch();
		search.setDomain("Biology");
		search.setServiceName("dna");//getENTRYbyScientificName		
		Object[] retValue = null;
		try {
			//调用服务,获得结果
			retValue = client.getAdvancedSearchArrayList(search);
			System.out.println("start");
			if (retValue != null && retValue.length > 0) {
				for (int i = 0; i < retValue.length; i++) {
					Serviceinfo serviceinfo = (Serviceinfo) retValue[i];
					System.out.println(serviceinfo.getCatagoryName()
							+ serviceinfo.getAffiliation());
				}
			}
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 通过代码可以看出第一种方式比较简单,把配置和调用分开了。也不具体讲了,基本上看着代码就知道是什么意思。下一小节再讲这种方式的好处和需要注意的地方。

 

分享到:
评论

相关推荐

    axis1.4学习文档

    axis1.4 webservice个人学习笔记

    Axis + tomcate

    标题 "Axis + tomcat" 指涉的是在Apache Axis1.4版本与Tomcat应用服务器上部署和使用Web服务的技术。Apache Axis是Java平台上一个流行的开源工具,用于创建和部署Web服务,而Tomcat则是一款轻量级的Java应用服务器,...

    Axis2版本学习笔记

    本笔记将深入探讨Axis2的核心概念、版本差异、安装配置以及在实际项目中的应用。 1. **核心概念** - **SOAP**: Axis2是基于SOAP(Simple Object Access Protocol)协议的,它允许应用程序通过HTTP进行通信,实现跨...

    OracleEBS-WebService开发笔记.pdf

    - **Axis 1.4 在 EBS 11i 中的应用**:描述如何在 EBS 11i 中部署和使用 Axis 1.4。 - **Oracle Call-in WebService**:从外部调用 EBS 的 WebService。 - **Oracle Call-out WebService**:从 EBS 内部调用外部 ...

    axis学习资料汇总

    axis学习资料汇总: Axis实例与分析详解; Axis学习笔记.pdf; Tomcat5.0.28下AXIS完全安装手册.doc; Axis1.4 开发指南_V1.0.pdf; AXIS入门及应用.rar; Axis开发Web+Services.doc 等等

    Axis2_1.X学习笔记

    标题"Axis2_1.X学习笔记"指的是关于Axis2的一个学习资源,其中1.X代表可能是1.4或者1.5等版本,Axis2是Apache软件基金会开发的一个开放源代码Web服务平台,主要用于构建和部署Web服务。这个学习笔记可能是对Axis2在1...

    AXIS摄像机调试培训PPT教学课件.pptx

    - 使用AXIS IP Utility扫描物理连接中的摄像机IP,确保笔记本电脑的本地连接IP与摄像机在同一网段。 - 在设置IP时,需避免笔记本电脑使用169.254开头的DHCP地址,否则摄像机会学习到这个地址。 2. **初始配置**:...

    AXIS摄像机调试培训PPT学习教案.pptx

    1. **AXIS IP Utility的使用**:这是一个用于扫描并识别网络中物理连接的AXIS摄像机的工具。在使用前,需要将笔记本电脑的本地连接IP设置为与摄像机在同一网段,以确保通信。 2. **摄像机初始化设置**:当摄像机是...

    webservices 资源

    “Apache Axis 1.4.zip”和“103244826axis.zip”是Apache Axis的版本,Axis是一个流行的Java Web服务框架,用于生成和部署Web服务。它简化了SOAP通信,并提供了自动代码生成工具。 “axis文档.zip”很可能是Apache...

    卡耐基梅陇大学 计算机图形学 PPT 4-transform

    **N1.4. 给出一个用于刚体平移的变换矩阵,如第一页图所示。** 对于刚体平移,我们可以使用一个4x4的变换矩阵来表示。假设平移向量为 \(\mathbf{d} = [d_x, d_y, d_z]^T\),则变换矩阵可以表示为: \[ T(d_x, d_y,...

Global site tag (gtag.js) - Google Analytics