加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

异步调用Webservice

发布时间:2020-12-17 01:06:57 所属栏目:安全 来源:网络整理
导读:异步,说到异步需要首先将以下同步。同步就是代码按照顺序执行,当前面的代码的请求没有正常返回结果的情况下,后面的代码是不能运行。而异步正好和这点不同,异步是代码运行后,不管当前的请求是否返回结果,后面的代码都会继续运行。 1. ? 编写服务端代码

异步,说到异步需要首先将以下同步。同步就是代码按照顺序执行,当前面的代码的请求没有正常返回结果的情况下,后面的代码是不能运行。而异步正好和这点不同,异步是代码运行后,不管当前的请求是否返回结果,后面的代码都会继续运行。


1. ? 编写服务端代码:

?? ? ?

public class AsynchronousService {

	public String execute() {
		System.out.println("正在执行此代码……");
		// 延迟5秒后,返回结果
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return "完成";
	}
}

2. ? 编写services.xml代码,打包并发布至对应文件夹下

?

<service name="AsyncService">
	<description>
		AsyncService
   	</description>
	<parameter name="ServiceClass">
		server.asynchronous.AsynchronousService
   	</parameter>
	<messageReceivers>
		<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
			class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
		<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
			class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
	</messageReceivers>
</service>

3. ? 客户端代码:

package client;

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 AsynTest {

	
	public static void main(String[] args) throws IOException {
		String target = "http://localhost:8080/axis2/services/AsyncService";
		RPCServiceClient client = new RPCServiceClient();
		Options options = client.getOptions();
		options.setManageSession(true);
		
		EndpointReference epr = new EndpointReference(target);
		options.setTo(epr);
		
		QName qname = new QName("http://asynchronous.server","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();
	}
	
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读