异步,说到异步需要首先将以下同步。同步就是代码按照顺序执行,当前面的代码的请求没有正常返回结果的情况下,后面的代码是不能运行。而异步正好和这点不同,异步是代码运行后,不管当前的请求是否返回结果,后面的代码都会继续运行。
1、编写服务器端的代码
package com.iflytek.service; /** * @author xdwang * * @create Apr 25, 2013 9:42:58 PM * * @email:xdwangiflytek@gmail.com * * @description 异步WebService服务器端代码 * */ public class AsynchronousService { public String execute() { System.out.println("正在执行此代码……"); // 延迟5秒后,返回结果 try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } return "完成"; } }
2、编写客户端测试代码
package com.iflytek.service; import java.io.IOException; import javax.xml.namespace.QName; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.client.async.AxisCallback; import org.apache.axis2.context.MessageContext; import org.apache.axis2.rpc.client.RPCServiceClient; /** * @author xdwang * * @create Apr 25, 2013 9:46:53 PM * * @email:xdwangiflytek@gmail.com * * @description 异步WebService客户端代码 * */ public class AsynchronousServiceClient { public static void main(String[] args) throws IOException { String target = "http://localhost:8080/axis2/services/AsynchronousService?wsdl"; RPCServiceClient client = new RPCServiceClient(); Options options = client.getOptions(); options.setManageSession(true); EndpointReference epr = new EndpointReference(target); options.setTo(epr); QName qname = new QName("http://service.iflytek.com", "execute"); // 指定调用的方法和传递参数数据,及设置返回值的类型 client.invokeNonBlocking(qname, new Object[] {}, new AxisCallback() { public void onMessage(MessageContext ctx) { System.out.println(ctx.getEnvelope()); System.out.println("Message:" + ctx.getEnvelope().getFirstElement().getFirstElement() .getFirstElement().getText()); } public void onFault(MessageContext ctx) { } public void onError(Exception ex) { } public void onComplete() { } }); System.out.println("异步WebService"); // 阻止程序退出 System.in.read(); } }
上面是异步调用WebService的代码,调用的方法是client.invokeNonBlocking,这个方法有三个参数,参数一是执行的方法签名,参数二是执行该方法的参数,参数三是异步回调,这里隐式实现AxiaCallback接口
相关推荐
当我们谈论“webservice8 异步调用webservice”时,这通常指的是在Axis2框架下,使用RPCServiceClient类的invokeNonBlocking方法来实现Web服务的异步调用。 传统的同步调用方式会导致客户端程序在等待服务响应期间...
Axis2 支持异步调用,可以实现异步调用 WebService,提高系统的性能和可扩展性。 8. Axis2 的 Module 模块: Axis2 提供了模块化的设计,可以将 WebService 分解成多个模块,实现了模块化的开发和部署。 9. Axis...
- 创建一个同步或异步调用Web Service的类,通常会用到`org.apache.axis2.client.ServiceClient`。 3. **生成客户端 stubs:** - 服务发布后,可以通过Axis2的wsdl2java工具,根据服务的WSDL(Web Service ...
**异步调用WebService** - Axis2支持异步调用模式,允许客户端以非阻塞方式调用Web服务,提高系统性能。 **Axis2的Module模块** - Axis2的Module机制允许扩展服务功能,例如添加安全、事务管理等特性。 **使用...
异步调用WebService - **概念**:发送请求后不等待响应即可继续执行其他操作。 - **实现**:通过异步调用接口或回调机制实现。 ##### 9. 编写Axis2模块(Module) - **定义**:扩展Axis2的功能,如日志记录、...
Axis2调用SAP Webservice源码 使用Axis2 org.apache.axis2.eclipse.codegen.plugin_1.6.2.jar插件生成本地Java Proxy同事生成同步和异步调用测试用例 更重要的是配备详细文档,实乃Java与SAP集成是宝典!
1):用POJO实现0配置的WebService 2):复合类型数据的传递 3):使用services.xml文件发布WebService ...8):异步调用WebService 9):编写Axis2模块(Module) 10):使用soapmonitor模块监视soap请求与响应消息
- **异步调用WebService:** - Axis2还支持异步调用Web服务,这对于提高系统性能和响应性非常重要。 - **编写Axis2模块(Module):** - 用户可以扩展Axis2的功能,通过编写自定义模块实现特定的需求。 - **使用...
随着深入学习,Axis2提供了更多高级特性,如复合类型数据的传递、二进制文件传输、会话管理、Spring JavaBean的发布、异步调用、自定义模块的编写以及soapmonitor模块的使用,用于监控SOAP请求与响应消息。...
- **异步调用WebService**:在某些情况下,为了提高系统的响应速度和吞吐量,可以采用异步的方式来调用WebService。 - **编写Axis2模块**:Axis2支持自定义模块,开发者可以根据自己的需求编写特定的模块来扩展Axis2...
在异步调用方面,Axis2提供了异步调用WebService的能力,允许客户端异步发送请求,提高系统效率和响应速度。Axis2模块化的设计还允许开发者编写自定义模块,以增强或修改引擎功能。最后,Axis2提供了soapmonitor模块...
**3.5 异步调用WebService** Axis2支持异步调用模式,允许开发者设计更为灵活的服务架构。 **3.6 Module模块** Axis2通过模块化的设计支持各种扩展功能,例如安全性、日志记录等。 **3.7 使用SoapMonitor监视...
Axis的简单准备 Axis的入门实例 Axis复杂对象类型的WebService Axis的辅助工具发布、调用WebService ...Axis异步调用WebService Axis 的Module模块 Axis使用SoapMonitar监视WebService的请求和响应信息
【基于Axis2的Web服务详解】 在信息技术领域,Web服务是一种通过互联网进行通信的软件系统。它们使用标准的协议和格式,如XML(eXtensible Markup Language)和SOAP(Simple Object Access Protocol),使得不同...
5. ** 调用服务**:学习如何使用 Axis2 的客户端API来调用已发布的Web服务,包括同步和异步调用,以及处理返回结果。 6. ** 错误处理和调试**:理解如何处理可能出现的错误,以及如何利用Axis2的调试功能进行问题...
使用axis2-eclipse-codegen-wizard-1.4生成代理方法调用SAP PI发布的Webservice,因为codegen-wizard不能识别Policy节点,所以需要手工将Policy节点删掉,此实例为异步场景 文档 + 代码 + Jar