异步,说到异步需要首先将以下同步。同步就是代码按照顺序执行,当前面的代码的请求没有正常返回结果的情况下,后面的代码是不能运行。而异步正好和这点不同,异步是代码运行后,不管当前的请求是否返回结果,后面的代码都会继续运行。
关于异步在此就不再赘述了,有兴趣的可以去网上查查这方面的资料。
1、 编写服务器端的代码。
代码
package
com.hoo.service;
/** * <b>function:</b>异步WebService服务器端代码 * @author hoojo * @createDate 2011-3-14 上午08:16:59 * @file AsynchronousService.java * @package com.hoo.service * @project Axis2WebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */
public
class
AsynchronousService {
public
String execute() {
System.out.println("
正在执行此代码……
");
//延迟5秒后,返回结果
try
{
Thread.sleep(5000);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
return
"
完成
";
}
}
2、 services.xml文件,创建aar文件,然后复制aar文件到[tomcat-home]\webapps\axis2\WEB-INF\services目录下
services.xml
代码
<
service
name
=
"AsyncService"
>
<
description
>
AsyncService
</
description
>
<
parameter
name
=
"ServiceClass"
>
com.hoo.service.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
com.hoo.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;
/** * <b>function:</b>异步WebService客户端代码 * @author hoojo * @createDate 2011-3-14 上午09:00:03 * @file AsynchronousServiceClient.java * @package com.hoo.service * @project Axis2WebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */
public
class
AsynchronousServiceClient {
public
static
void
main(String[] args)
throws
IOException {
String target = "
http://localhost:8080/axis2/services/AsyncService?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.hoo.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接口
注意的是运行程序的时候要用Debug方式运行。
更多文章、技术交流、商务合作、联系博主
微信扫码或搜索:z360901061
微信扫一扫加我为好友
QQ号联系: 360901061
您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。
【本文对您有帮助就好】元

