`
zhyt710
  • 浏览: 205945 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

实现axis2两种不同方式的客户端

阅读更多

通过我的上一篇文章,相信有一定基础的人都可以用axis2开发和部署一个web service服务了。现在我们把焦点放在客户端。下面我主要以代码来说话了。

 

1.一个简单的服务类 ,并把它发布为web service服务。注意我的工程名为Test

package test;

public class TestService {
	
	public int add(int a, int b) {
		return a + b;
	}
	
	public String each(String name) {
		return name  + "你好";
	}

}

2.应用两种方式实现客户端调用

import javax.xml.namespace.QName;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.rpc.client.RPCServiceClient;

/**
 * axis2提供rpc和document两种style的实现。
 * 在这里我们别对其验证。关于说明,请参看代码中的注释
 * @author Administrator
 *
 */
public class Client {
	
	public static void main(String[] args) {
		
		Client client = new Client();
		//测试rpc方式
		client.testRPC();
		
		//测试document方式
		client.testDocument();
	}
	
	/**
	 * 应用rpc的方式调用
	 * 这种方式就等于远程调用,即通过url定位告诉远程服务器,告知方法名称,参数等,
	 * 调用远程服务,得到结果。
	 */
	//下面这个annotaion是为了不让代码出现关于没有应用泛型的警告信息
	//用elipse做编辑器的很容易理解。
	@SuppressWarnings("unchecked")
	public void testRPC() {
		try {
			RPCServiceClient serviceClient = new RPCServiceClient();
			Options options = serviceClient.getOptions();
			//指定访问的web service地址
			EndpointReference targetEPR = new EndpointReference(
					"http://localhost:8080/Test/services/TestService");
			options.setTo(targetEPR);

			//指定方法,注意指定命名空间
			QName opPrint = new QName("http://test",
					"add");
			//确定参数类型和参数值
			Class[] returnTypes = new Class[] { int.class };
			Object obj[] = new Object[] { 1, 2 };
            //得到返回结果,是一个数组
			Object[] order = serviceClient.invokeBlocking(opPrint, obj,
					returnTypes);
			System.out.println(order[0]);
			
			
			//下面是测试each方法的。和上面类似
			opPrint = new QName("http://test","each");
			returnTypes = new Class[] { String.class };
			obj = new Object[] { "zhangyt" };
			order = serviceClient.invokeBlocking(opPrint, obj,
					returnTypes);
			System.out.println(order[0]);
			
		} catch (AxisFault e) {
			e.printStackTrace();
		}	
	}
	
	/**
	 * 应用document方式调用
	 * 用ducument方式应用现对繁琐而灵活。现在用的比较多。因为真正摆脱了我们不想要的耦合
	 */
	public void testDocument() {
		try {
			ServiceClient sc = new ServiceClient();
			Options opts = new Options();
			//确定目标服务地址
			opts.setTo(new EndpointReference(
					"http://localhost:8080/Test/services/TestService"));
			//确定调用方法
			opts.setAction("urn:add");
			sc.setOptions(opts);
			//发送请求并并得到返回结果,注意参数生成方法的分析
			OMElement res = sc.sendReceive(createPayLoad());
			//值得注意的是,返回结果就是一段由OMElement对象封装的xml字符串。
			//我们可以对之灵活应用,下面我取第一个元素值,并打印之。因为调用的方法返回一个结果
			res.getFirstElement().getText();
			System.out.println(res.getFirstElement().getText());
		} catch (AxisFault e) {
			e.printStackTrace();
		}
	}
	/**
	 * ServiceClient 中 sendReceive(OMElement args) 方法参数的生成
	 * @return
	 */
	public static OMElement createPayLoad(){ 
		OMFactory fac = OMAbstractFactory.getOMFactory();
		//指定命名空间
		OMNamespace omNs = fac.createOMNamespace("http://test", "nsl");
		//指定方法
		OMElement method = fac.createOMElement("add",omNs);
		//指定方法的参数
		OMElement value = fac.createOMElement("value",omNs); 
		value.setText("1"); 
		method.addChild(value); 
		OMElement value1 = fac.createOMElement("value",omNs);
		value1.setText("2");
		method.addChild(value1);
		//返回方法(实际上就是OMElement封装的xml字符串)
		return method; 
	}

}

注意上面实现document方式调用的时候,只测试了服务类中的add方法。这个方法都用了,each方法调用的写法就可知比这个还要简单。

分享到:
评论
2 楼 wchd842564177 2012-11-27  
                             
1 楼 ydsakyclguozi 2008-12-24  
谢谢你的文章

相关推荐

    基于axis2实现的webservice简单实现(客户端+服务端)。

    【标题】中的“基于axis2实现的webservice简单实现(客户端+服务端)”表明了本文将探讨如何使用Apache Axis2框架来创建和消费Web服务。Apache Axis2是Apache软件基金会开发的一个Web服务引擎,它提供了高效且灵活的...

    axis2客户端需要的jar包

    在开发Axis2客户端时,正确地引入所需的jar包是至关重要的,因为这些库提供了与服务交互所需的各种功能。以下是关于Axis2客户端需要的jar包及其功能的详细解释: 1. **axis2-adb.jar**:这个jar包包含了Axis2的数据...

    axis2客户端

    3. **MTOM/XOP优化**:Message Transmission Optimization Mechanism (MTOM) 和XOP (XML-binary Optimized Packaging) 是两种提高Web服务传输效率的技术,Axis2客户端支持这两种机制,能有效地处理二进制数据。...

    cxf客户端调用axis服务端流程

    在Java开发中,CXF和Axis是两种广泛使用的Web服务框架。CXF主要用来创建和消费SOAP和RESTful Web服务,而Axis则是Apache组织早期推出的一款Web服务框架,主要用于SOAP服务。本文将深入探讨如何使用CXF客户端调用Axis...

    用脚本生成axis2的客户端

    标题中的“用脚本生成axis2...总的来说,通过脚本生成Axis2客户端是Web服务客户端开发的一种高效方式,尤其适用于快速集成和测试。在实际项目中,开发者可以根据需求选择合适的生成方法,平衡代码简洁性和功能复杂性。

    axis1.4生成客户端

    - WSDL2Java和Java2WSDL工具:这两个工具是Axis1.4的核心部分,它们帮助开发者在WSDL和Java代码之间转换。 - JAX-WS(Java API for XML Web Services):这是Java平台标准,用于创建和处理Web服务,它是Axis2的...

    axis2支持webservice 自动生成代码客户端服务端代码插件

    压缩包子文件的文件名称列表中,"org.apache.axis2.eclipse.codegen.plugin_1.7.7.jar"和"org.apache.axis2.eclipse.service.plugin_1.7.7.jar"是Axis2插件的两个组件。前者专注于代码生成,即从WSDL生成服务端和...

    在自己的项目中利用axis2+spring发布webservice与客户端调用包括session

    在axis2+spring的环境下,可以通过两种方式处理session: - **SOAP Header**:可以将session信息封装在SOAP消息的Header部分,每次请求时携带。 - **Cookie**:客户端和服务端可以通过Cookie来维护会话状态,但...

    AXIS2 RCP/literal样式,两种MESSAGE定义方式SOAP的payload

    总结起来,AXIS2 RCP/literal样式中的两种MESSAGE定义方式对于开发和调试SOAP Web服务客户端至关重要。硬编码XML字符串适用于简单场景,而JOM更适合处理复杂的业务逻辑和数据结构。TCPMon作为一个实用的辅助工具,...

    Axis2各种方式实现WebService案例代码

    总结起来,Axis2提供了多样化的Web服务实现方式,适应不同开发需求。选择合适的方式取决于项目的规模、性能要求以及团队对XML处理的熟悉程度。理解并掌握这些技术,对于提升Java Web服务开发的效率和质量具有重要...

    Axis_API和axis2_API

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而Axis和Axis2是两种流行的Java SOAP(简单对象访问协议)框架,用于构建和消费Web服务。本文将深入探讨这两个API,以及它们在Web服务开发中的作用。 ...

    Axis2例子Demo

    2. **服务部署**:Axis2支持两种部署方式——存档部署和热部署。存档部署通过将服务打包为`.aar`文件进行部署,而热部署允许直接通过类路径加载服务。 3. **模块**:模块是Axis2中的可插拔组件,可以添加额外的功能...

    s2axis2 实例

    在Java世界中,Web服务的开发是一项常见的任务,而Seasar2 Axis2项目提供了一种高效且灵活的方式来实现这一目标。Seasar2是一个全面的Java应用框架,它包含了诸如数据库访问、事务管理、权限控制等多方面的功能,而...

    axis2webservice接口例子

    Apache Axis2是Web服务的实现框架,而Web服务本身则是一种允许不同系统之间交换数据的标准协议。在Java开发中,Axis2常被用来简化Web服务的创建和消费过程,使得不同编程语言和平台之间的通信变得可能。 在压缩包子...

    axis客户端

    使用Axis客户端,开发者可以轻松地集成远程服务到自己的应用程序中,使得不同系统之间的交互变得无缝。 1. **rt.jar**:这是一个运行时库,包含了Java标准版(JRE)的基础类库。在Java应用程序中,rt.jar是Java运行...

    Axis2WebService 源码

    11. **代码第一(Code First)和WSDL First**:Axis2支持两种开发模式,即根据已有代码生成WSDL(Code First)和根据WSDL生成代码(WSDL First)。 12. **SOAP版本支持**:Axis2支持SOAP 1.1和1.2,能够处理不同...

    Axis2教程和java调用webservice的各种方法总结

    标题“Axis2教程和java调用webservice的各种方法总结”表明了本文档主要聚焦于两个核心内容:一是Axis2框架的使用教程,二是Java语言调用Web服务的不同方法的综合概述。 描述中的“Axis2教程”暗示了会详细讲解Axis...

    基于axis2的webservice

    调用Web服务通常分为两种方式:同步调用和异步调用。 - **同步调用**:客户端发送请求,等待服务端返回响应,完成一次交互。 - **异步调用**:客户端发送请求后不等待响应,而是通过回调机制处理服务端的返回。 ...

    axis2源码下载~

    开发者可以通过两种方式在Axis2上创建服务:Service Skeleton和服务Archive。Service Skeleton是通过WSDL自动生成的Java接口,而服务Archive则是打包服务的所有依赖项到一个单一的文件中。 7. **扩展机制**: ...

Global site tag (gtag.js) - Google Analytics