随笔-30  评论-123  文章-0  trackbacks-0
摘要:在《XFire:开发Web服务的简易之道(二)》中最后提到过:要想检验Web服务是否有效,需要一个客户端程序实际调用一下这个Web服务。本章我们就来创建这样一个用于检验的客户端程序,验证一下我们前面的工作是不是真的有效。最后总结一下用XFire开发Web服务的步骤。

创建客户端程序
我们可以使用很多方法,任何SOAP工具来创建客户端程序,例如.Net或Apache Axis。我的这个例子中我是用一个名叫WsClient.java的Servlet中的动态代理。为了减少编码的代价,我将所有屏幕构建元素都放到doGet()方法中。对Web服务服务的实际调用在callWebService()方法中。代码很简单:
/* Call the Web service
    *
    
*/

    
public String callWebService(
        String fromAccount, String toAccount, 
double amount, String currency) 
        
throws MalformedURLException, Exception {
        
        
//Create a metadata of the service      
        Service serviceModel = new ObjectServiceFactory().create(IBankingService.class);        
        log.debug(
"callSoapServiceLocal(): got service model." );
   
        
//Create a proxy for the deployed service
        XFire xfire = XFireFactory.newInstance().getXFire();
        XFireProxyFactory factory 
= new XFireProxyFactory(xfire);      
    
        String serviceUrl 
= "http://localhost:8080/websvc/services/Banking";
        
        IBankingService client 
= null;
        
try {
            client 
= (IBankingService) factory.create(serviceModel, serviceUrl);
        }
 catch (MalformedURLException e) {
            log.error(
"WsClient.callWebService(): EXCEPTION: " + e.toString());
        }
    
               
        
//Invoke the service
        String serviceResponse = "";
        
try 
            serviceResponse 
= client.transferFunds(fromAccount, toAccount, amount, currency);
       }
 catch (Exception e){
            log.error(
"WsClient.callWebService(): EXCEPTION: " + e.toString());                 
            serviceResponse 
= e.toString();
        }
        
        log.debug(
"WsClient.callWebService(): status=" + serviceResponse);              

        
//Return the response
        return serviceResponse;
    }
   

这段代码做了些什么?让我解释一下:首先我们创建了一个服务模型,里面包含了对服务的描述,换句话说,我们创建了服务的元数据。我们是用XFire的ObjectServiceFactory通过接口IBankingService.class创建了这个服务模型。

下一步就是获取XFire的代理对象。这一步中没有任何应用细节。通过proxyFactory,使用服务模型和服务终点URL(用于获得WSDL),我们获得了服务的本地代理。

这个代理就是实际的客户端。现在我们可以调用transferFunds()方法获得我们想要的Web服务了。

一旦这个例子部署成功并启动,就可以用下面的Servlet URL检验:
http://localhost:8080/websvc/ws
Servlet使用默认的参数访问Web服务并显示接收到的响应。你应该能看到下面两行信息
Response Received
COMPLETED: CDN$ 500.00 was successfully transferred from A/C# 11111-01234 to A/C# 99999-05678
现在你可以确信Web服务真的起来了并且工作正常。

你可以尝试传入不同的数据。你可以输入类似于下面的URL
http://localhost:8080/websvc/ws?from=11-2345&to=77-9876&amt=250.00&cur=EUR.

Web服务开发的基本步骤
下面列出了使用XFire开发Web服务的基本步骤:
1、检验Java类的方法和构造函数时公共的;
2、将XFire Servlet相关的入口添加到web.xml中;
3、创建services.xml并把它放到WEB-INF/classes/META-INF/xfire目录下;
4、将Xfire和其他第三方库添加到你的Web应用的WEB-INF/lib 目录下。
OK,这就是全部要做,就是这么简单。
posted on 2006-05-16 09:43 学二的猫 阅读(5517) 评论(6)  编辑  收藏 所属分类: Java禅机

评论:
# re: XFire:开发Web服务的简易之道(三)--开发客户端程序 2006-05-16 10:54 | Harryson
我在TOMCAT下发现如下的信息:264344311 [http-8088-Processor22] ERROR example.WsClient - WsClient.callWebServ
ice(): EXCEPTION: org.codehaus.xfire.XFireRuntimeException: Could not invoke ser
vice.. Nested exception is org.codehaus.xfire.fault.XFireFault: Couldn't send me
ssage.似乎有点问题,请指点!  回复  更多评论
  
# re: XFire:开发Web服务的简易之道(三)--开发客户端程序 2006-06-03 16:18 | Apollo
不错,够简单,获益匪浅
不过,能不能讲一下用xfire自动生成客户端程序。我弄了一上午也没出来.
希望可以与你交流下哈
msn:Apollo_zhc@hotmail.com  回复  更多评论
  
# re: XFire:开发Web服务的简易之道(三)--开发客户端程序[未登录] 2008-08-12 13:59 | alex
太肤浅  回复  更多评论
  
# re: XFire:开发Web服务的简易之道(三)--开发客户端程序 2009-05-02 21:50 | sc
写得好,是我需要的。  回复  更多评论
  
# re: XFire:开发Web服务的简易之道(三)--开发客户端程序 2011-11-02 02:06 | lisongandy
Service serviceModel = new ObjectServiceFactory().create(IBankingService.class);

在实际中,开发者是不可能知道元数据接口IBankingService.class的,那么该如何创建元数据呢?  回复  更多评论
  
# re: XFire:开发Web服务的简易之道(三)--开发客户端程序 2011-11-02 02:07 | lisongandy
特指客户端开发者  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: