posts - 66,  comments - 11,  trackbacks - 0
实现WEB服务客户
web服务是跨平台的、跨语言的,所以WEB服务的客户端使用的语言和平台和他的服务端没有必然的关系。比如我们可以在.Net下开发、部署web服务,然后在J2EE平台下调用它,或者使用在J2EE平台下开发、部署web服务,然后使用VB来调用它。
在J2EE平台中,WEB服务客户同EJB客户类似。如下两种方式能够访问到WEB服务:
1、不借助于JNDI查找,即使用单独的JAX-RPC客户访问。
2、借助于JNDI上下文访问WEB服务的J2EE客户
第一种方法称之为静态存根,此时需要在客户端预先生成SOAP客户存根,这同RMI存根类似。第二种方法称之为动态代理。它将在运行时获得WSDL描述,然后创建动态代理。无论采用哪种方式访问WEB服务,客户都需要获得服务Endpoint地址URL,否则单凭JNDI名是很难访问到WEB服务的。
package com.testproject.ejb.web;

import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;

/**
 * 单独JAX-RPC客户代码实例。
 * 它使用了动态代理方法,以获得对远程WEB服务的引用。
 *
 
*/

public class HelloClient {
    
static String host = "localhost";
    
//web服务的名字
    static String serviceURL = "HelloBean";
    
//名称空间
    static String nameSpaceUri = "urn:examples";
    
static String serviceName = "HelloWorldWS";
    
//web服务调用的地址
    static String serviceEndpointAddress = "http://"+host+":8000"+serviceURL;
    
public static void main(String[] args)throws Exception{
        HelloInterface hello 
= null;
        
//动态代理方法
        
//1、指定WSDL文件的位置
        URL url = new URL(serviceEndpointAddress+"?WSDL");
        
//2、创建服务工厂实例
        ServiceFactory serviceFactory = ServiceFactory.newInstance();
        
//3、创建服务对象,以作为代理工厂
        Service HelloService = serviceFactory.createService(url,new QName(nameSpaceUri,serviceName));
        
//4、获得port引用
        hello = (HelloInterface)HelloService.getPort(HelloInterface.class);
        
//调用hello()方法
        System.out.println("Dynamic Proxy:"+hello.hello());
    }

}

posted on 2009-11-13 16:45 王永庆 阅读(130) 评论(0)  编辑  收藏 所属分类: EJB学习笔记

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


网站导航:
 
<2009年11月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用链接

留言簿(1)

随笔分类

随笔档案

关注blogs

搜索

  •  

最新评论

阅读排行榜

评论排行榜