`
yunhuisdu19811011
  • 浏览: 94731 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论
  • fightingIOW: 案例看了,能实现上传,但是不是异步的,怎么改成页面可以预览呢? ...
    swfUpload实例
  • kizz: 您好,实例我看了,确实不错。您有struts2版的吗?现在项目 ...
    swfUpload实例

webService异步处理

阅读更多
第一步: 创建一个接口

package test;

import javax.jws.WebService;

@WebService
public interface IHelloWorld {
public String sayHello(String name);
}

第二步:创建接口的实现类
package test;

import javax.jws.WebService;

@WebService
public class HelloWorldImpl implements IHelloWorld {

public String sayHello(String name) {
try{
Thread.sleep(1000);
}catch(Exception ex) {

}
System.out.println("sayHello is called by " + name);
return "Hello " + name;
}

}

第三步:创建服务器端
package server;

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

import test.HelloWorldImpl;

public class Server {

public static void main(String[] args) {
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
factory.setServiceClass(HelloWorldImpl.class);
factory.setAddress("http://localhost:8888/HelloWorld");
factory.create();
}

}

第四步 创建客户端  Polling方式
package client;

import java.io.StringReader;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Response;
import javax.xml.ws.Service;
import javax.xml.ws.Service.Mode;

import org.xml.sax.InputSource;

public class AsyncPollingClient {

private static String payload =
"<ns1:sayHello xmlns:ns1='http://test/'>" +
" <arg0>Test</arg0>" +
"</ns1:sayHello>";

public static void main(String[] args) throws Exception {
QName serviceName = new QName("http://test/", "HelloWorldImplService");
Service service = Service.create(new URL("http://localhost:8888/HelloWorld?wsdl"), serviceName);
QName portName = new QName("http://test/", "HelloWorldImplPort");
Dispatch<Source> dispatch = service.createDispatch(portName, Source.class, Mode.PAYLOAD);

Source msg = new SAXSource(new InputSource(new StringReader(payload)));
Response<Source> responseSource = dispatch.invokeAsync(msg);

System.out.println("Sleep...");
Thread.sleep(1000);
System.out.println("Wake up...");

Source response = responseSource.get();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(response, new StreamResult(System.out));
}

}

第五步:创建客户端 CallBack方式
package client;

import java.io.StringReader;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.ws.AsyncHandler;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Response;
import javax.xml.ws.Service;
import javax.xml.ws.Service.Mode;

import org.xml.sax.InputSource;

public class AsyncCallBackClient {

private static String payload =
"<ns1:sayHello xmlns:ns1='http://test/'>" +
" <arg0>Test</arg0>" +
"</ns1:sayHello>";

public static class SimpleAsyncHandler implements AsyncHandler<Source> {
public void handleResponse(Response<Source> responseSource) {
try{
Source response = responseSource.get();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(response, new StreamResult(System.out));
} catch(Exception ex) {
ex.printStackTrace();
}
}
}

public static void main(String[] args) throws Exception {
QName serviceName = new QName("http://test/", "HelloWorldImplService");
Service service = Service.create(new URL("http://localhost:8888/HelloWorld?wsdl"), serviceName);
QName portName = new QName("http://test/", "HelloWorldImplPort");
final Dispatch<Source> dispatch = service.createDispatch(portName, Source.class, Mode.PAYLOAD);

final Source msg = new SAXSource(new InputSource(new StringReader(payload)));
final AsyncHandler<Source> handler = new SimpleAsyncHandler();
new Thread(){
public void run(){
dispatch.invokeAsync(msg, handler);
}
}.start();

System.out.println("I'm doing other..");
}

}

分享到:
评论

相关推荐

    webservice异步调用

    WebService 异步调用可以提高系统的响应速度和效率,特别是在需要处理大量数据或需要长时间处理的操作时。 在本例中,我们将展示如何使用 C# 类库创建一个简单的 WebService,并实现异步调用。我们将创建一个名为 ...

    WebSerices异步调用方法总结

    WebService 异步调用是指在客户端和服务器端之间进行异步数据交换的过程。异步调用可以提高系统的性能和可扩展性,实现高效的数据交换。下面是 WebService 异步调用的实现方法总结: 一、异步调用方式 WebService ...

    用WebService进行异步通信

    ### 用WebService进行异步通信 #### 一、引言 在现代软件开发中,Web服务(WebService)作为实现系统间交互的一种重要手段,在企业级应用和服务端开发中扮演着核心角色。然而,在某些场景下,例如智能客户端应用中...

    浪曦][原创]WebService在.NET中的实战应用四

    3. **[A359]WebService在.NET中的实战应用四 WebService异步处理续.exe**:这是一个可执行文件,可能是演示或教学程序,展示了如何在.NET中实现WebService的异步处理,以提高应用程序的响应速度和并发性能。...

    [浪曦][原创]WebService在.NET中的实战应用三

    4. **异步处理**:在“[A357]WebService在.NET中的实战应用三 WebService异步处理.exe”文件中,讲述了如何实现WebService的异步调用。这在处理长时间运行的操作时特别有用,避免阻塞客户端。使用`[System.Web....

    WebService同步异步调用示例代码.rar

    在这个"WebService同步异步调用示例代码.rar"压缩包中,我们很可能找到C#语言编写的源代码,这些代码演示了如何使用.NET框架来创建和消费WebService,特别是在同步和异步模式下进行调用的方法。 同步调用是最基础的...

    webservice8 异步调用webservice

    当我们谈论“webservice8 异步调用webservice”时,这通常指的是在Axis2框架下,使用RPCServiceClient类的invokeNonBlocking方法来实现Web服务的异步调用。 传统的同步调用方式会导致客户端程序在等待服务响应期间...

    WebService在·NET中的实战应用四

    "四 WebService异步处理续.ppt"可能是关于异步调用WebService的教程或演示文稿。在.NET中,可以使用BeginInvoke和EndInvoke方法实现WebService调用的异步处理,以避免阻塞UI线程,提升用户体验。异步调用特别适用于...

    ajax异步调用webservice实例

    本实例将重点讲解如何利用AJAX进行异步调用WebService,为用户提供无缝的交互体验。 一、AJAX基础 1. AJAX的核心是XMLHttpRequest对象,它提供了与服务器通信的能力,可以在后台与服务器进行数据交换。 2. AJAX通过...

    ajax WebService 对表格数据的异步获取和处理 实例.doc

    本实例将详细介绍如何利用Ajax技术与WebService进行表格数据的异步获取和处理。 首先,让我们理解什么是Ajax。Ajax是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过JavaScript创建XMLHttpRequest...

    android 异步封装调用Webservice

    可以使用AsyncTask、Handler、Thread/Runnable、ExecutorService等异步处理机制。本例中,可能是使用了AsyncTask或者自定义的线程池来进行异步调用。 封装调用Webservice的过程通常包括以下步骤: 1. **创建网络...

    WebService+XML标签解析(异步解析)

    StAX则允许开发者以流式的方式处理XML,通过迭代器读取XML元素,同样可以实现异步处理。 在.NET框架中,可以利用XmlReader类进行异步解析,该类提供了ReadAsync方法,能够在不阻塞调用线程的情况下读取XML数据。...

    异步调用WebService.zip

    本示例“异步调用WebService.zip”着重展示了如何在ASP.NET环境中实现异步调用Web服务,从而提高应用程序的响应速度和性能。 首先,让我们了解什么是异步调用。在传统的同步调用中,程序会等待一个操作完成后再执行...

    同步调用和异步调用WebService

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

    Asp.net 2.0新增特性异步页功能处理过程

    当使用了异步页功能时,如右图中,开始Thread1是为页面服务的,但当页面处理其它的事情(比如I/O或调用其它WebService) 时,Thread1被放回线程池, 此时Thread1可以为其它页面请求服务了. 当此页面执行完自己的操作回来后...

    WebService在·NET中的实战应用三

    5. **WebService异步示意图.jpg** - 图片可能展示了WebService的异步调用机制。在.NET中,可以使用`BeginInvoke`和`EndInvoke`方法实现异步调用,以避免阻塞UI线程,提高用户体验。 6. **WebService在.NET中的应用...

    异步调用Web Service程序 小例子,C++.net源代码编写

    在IT领域,异步编程是一种常见的优化性能的技术,特别是在处理耗时操作如网络通信时,如调用Web Service。Web Service是一种基于XML的接口,允许应用程序通过HTTP协议进行通信,实现跨平台的数据交换。本篇将详细...

    Delphi调用C#的Webservice返回Dataset

    例如,批量处理数据、缓存结果、使用异步调用以避免阻塞UI线程等。 总之,通过Delphi调用C#的Webservice返回Dataset是一种跨语言的数据交互方式,涉及到网络通信、数据序列化和反序列化等多个技术环节。熟练掌握...

Global site tag (gtag.js) - Google Analytics