Axis2发布webservice(4)—webservice的异步调用

一,发布一个webservice,代码如下

package com.hoo.service;

public class AsynchronousService {

    public String execute() throws InterruptedException{

        //让当前线程睡眠5钟,展示异步调用
        Thread.sleep(5000);

        return "done";
    }
}

二、发布Service,参见前面教程,不多讲

三、RPC方式异步调用:

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;

public class AsynchronousServiceClient {

    public static void main(String[] args) throws IOException {
        String target = "http://localhost:8080/axis2/services/AsynchronousService";
        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.hoo.com", "execute");

        //指定调用的方法和传递参数数据,及设置返回值的类型,前面两个参数跟同步调用没区别,关键是后面一个参数,用到了AxisCallback类
        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("Client:异步调用WebService");

        //阻止程序退出
        System.in.read();
    }
}

程序输出:

Client:异步调用WebService

     <?xml version=‘1.0‘ encoding=‘utf-8‘?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns:executeResponse xmlns:ns="http://service.hoo.com"><ns:return>done</ns:return></ns:executeResponse></soapenv:Body></soapenv:Envelope>

      Message:done

四、Stub类异步调用

   首先,生成该webservice的wsdl文件,然后用wsdl文件生成Java源代码,方法参见http://www.cnblogs.com/hewenwu/p/3860083.html

五、编写客户端异步调用代码

package test;

import java.io.IOException;
import java.rmi.RemoteException;

import org.apache.axis2.AxisFault;

import com.hoo.service.AsynchronousServiceCallbackHandler;
import com.hoo.service.AsynchronousServiceStub;
import com.hoo.service.Execute;
import com.hoo.service.ExecuteResponse;

public class AsynchronousServiceClient {

    public static void main(String[] args) throws IOException {
        AsynchronousServiceStub stub = new AsynchronousServiceStub();
        stub.startexecute(new Execute(), new MyCallback());
        System.out.println("异步调用");
        System.in.read();
    }

}
//必须重新定义一个继承自相应CallbackHandler的类并重写receiveResult方法才能在main中调用
class MyCallback extends AsynchronousServiceCallbackHandler{

    @Override
    public void receiveResultexecute(ExecuteResponse result) {

        super.receiveResultexecute(result);
        System.out.println(result.get_return());
    }
}

输出结果:

异步调用

      done 

Axis2发布webservice(4)—webservice的异步调用,布布扣,bubuko.com

时间: 2024-10-27 16:58:30

Axis2发布webservice(4)—webservice的异步调用的相关文章

Sentinel 发布0.2.0,异步调用支持、热点参数限流等成产品新亮点

Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度来帮助用户保护服务的稳定性. 近日,Sentinel 0.2.0 正式发布.作为一个重要的里程碑版本,Sentinel 0.2.0 释放了多项产品新特性,如 异步调用支持.热点参数限流 等,并包括了大量的体验优化与 bug 修复.下面我们来看一下 Sentinel 0.2.0 的重要新特性. 异步调用支持 未来各种 RPC 框架.Web 框架都朝着异步

webService总结(四)——使用axis2发布和调用webService

准备工作 Axis2 官网 http://axis.apache.org/  下载axis2相关资料 其中 axis2-1.6.2-bin.zip文件中包含了Axis2中所有的jar文件, axis2-1.6.2-war.zip文件用于将WebService发布到Web容器中.最后两个是axis2在eclipse中的插件. 大概说说这几个文件如何使用. 1.解压axis2-1.6.2-bin.zip到任意目录.然后在eclipse中按下图配置. 2.将axis2-1.6.2-war.zip文件解

tomcat 用AXIS2发布WebService 网站的方法

Axis2+tomcat7.0 实现webService 服务端发布与客户端的调用. Aixs2开发webService的方法有很多,在此只介绍一种比较简单的实现方法. 第一步:首先要下载开发所需要的jar包 下载: axis2-1.6.2-war.zip  http://www.apache.org/dist//axis/axis2/Java/core/1.6.2/ 下载完后将axis2.war放至tomcat安装目录下的webapps文件夹下,然后启动tomcat后,在webapps目录下会

用AXIS2发布WebService的方法(转)

Axis2+tomcat6.0 实现webService 服务端发布与客户端的调用. 第一步:首先要下载开发所需要的jar包 下载:axis2-1.6.1-war.zip http://www.apache.org/dist//axis/axis2/java/core/1.6.1/ 下载完后解压至tomcat安装目录下的webapps文件夹下,启动tomcat后,在webapps目录下会生成axis2文件夹. 访问http://localhost:8080/axis2/能看到以下页面表示axis

Axis2发布webservice(1)--0配置发布

Axis2发布webservice(1)--0配置发布webservice 一. 准备工作 1.下载axis2程序包:   http://axis.apache.org/axis2/java/core/download.cgi      下载时选择Binary Distribution版本的zip格式文件和WAR Distribution的zip格式文件,总共2个zip文件:      axis2-1.6.2-bin.zip:包含axis2是所有jar包,再编程时根据需要将解压后的lib文件夹下

myeclipse上spring+mybatis+axis2发布webservice接口的问题及个人实现的方式

前提: 这个月的突然一天,有个项目对接需要使用axis2发布的接口,这下难倒我了,毕竟之前我是连webservice接口都不知怎么发布的.后来从HelloWorld开始发布了第一个接口--sayHi();到这一步的时候都是很顺利的,唯独和axis2整合的时候,出现问题了,spring的dao层在axis2发布后的接口里,一直为null,貌似是spring一直没有被初始化,这期间我测试过按照正常流程来执行一个请求,是正确的,唯独和axis2整合后就不行了,在这测试的时间内,很痛苦,很痛苦,所有能想

webservice发布--使用axis2发布

如何使用axis2发布webservice? axis2发布webservice分为打包发布和不打包发布两种,今天主要研究了一下打包发布的方法 1.部署axis2框架(使用tomcat部署) 1.1 下载axis2的war包,测试使用的war包为axis2-1.6.2-war.zip,解压获得axis2.war包 1.2 将axis2.war包拷贝到%Tomcat_Home%/webapps目录下,然后启动tomcat,启动成功之  后访问http://localhost:8080/axis2,

Axis2发布webservice(4)&mdash;利用XML文件同时发布多个webservice和跨多个WebService管理Session

我们需要ServiceGroupContext保存跨越多个webservice的session信息:同时需要设置services.xml文件的中service的scope属性为application 一.编写两个webservice: LoginServiceApplication.java代码如下: package com.hoo.service; import org.apache.axis2.context.MessageContext; import org.apache.axis2.c

Eclipse+Axis2创建WebService和相应的客户端调用

一.工具介绍 eclipse(luna) + axis2-1.6.3 二.在Eclipse里面配置Axis2 1.下载最新版的axis2 下载地址为:http://axis.apache.org/axis2/java/core/download.cgi 2.在Eclipse中配置Axis2: Window—>Preferences,安装下图中进行设置: 其中图右中的location对应已下载到本地的axis2的路径地址 三.创建.发布WebService: 1.创建一个Dynamic Web P