用Apache Axis实现Web Service(四)

四. 用Dynamic Proxy方式访问Web Service

Dynamic Proxy的意思是动态代理,是一种很常用的设计模式,它的核心思想是:要访问对象A,向为A提供一个代理对象B,B就是对A的包装,提供和A对象相同的接口。客户可以通过访问B对象的方法,此时,B对象负责把这个访问和实际对象(A)进行关联。这样做的好处是:代理对象B在把客户端调用传递给真实的对象(A)之前或者之后,可执行某个附加操作,也可以选择不把这个调用传递给A,从而事实上禁止了某些操作。(这里不再详细讨论Dymamic Proxy设计模式,可baidu/google之,资料很多)

Apache Axis提供了对Dynamic Proxy模式的支持。因此,我么可以先定义一个要访问的Web Service的代理,接口,然后通过这个代理接口访问Web Service。下面,我们用这种方式来访问HelloWorld:

首先, 编写一个代理接口HelloClientInferface.java

public   interface  HelloClientInterface  extends  java.rmi.Remote {
          
public String sayHello(String name)throws java.rmi.RemoteException;
}

需要注意的是,这个接口的方法定义必须和服务器端Web Service(HelloWorld.jws)中的定义一致,包括名称和参数。

然后,就可以通过这个代理接口访问Web Service:

import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;
import java.net.URL;
import javax.xml.namespace.QName;
public class WsHelloWorldTestClient {   
      public static void main(String[] args) {       
              try{            
                        String wsdlUrl = "http://localhost:8080/axis/HelloWorld.jws?wsdl";
                        String nameSpaceUri ="http://localhost:8080/axis/HelloWorld.jws";           
                        String serviceName = "HelloWorldService";           
                        String portName = "HelloWorld";           
                        ServiceFactory serviceFactory = ServiceFactory.newInstance();           
                        Service afService = serviceFactory.createService(new URL(wsdlUrl),
new QName(nameSpaceUri, serviceName));
                        HelloClientInterface proxy = (HelloClientInterface)afService.getPort(new QName(nameSpaceUri, portName),HelloClientInterface.class);           
                        System.out.println("return value is "+proxy.sayHello("Brookes")) ;
             }catch(Exception ex)  { ex.printStackTrace() ; }
      }
}

代码中,serviceName和portName两个参数名,可以通过HelloWorld的WSDL文件获得。访问http://localhost:8080/axis/HelloWorld.jws?wsdl,在社个文件的尾部,可以看到这样的信息:

< wsdl:service  name ="HelloWorldService" >
       
< wsdl:port  binding ="impl:HelloWorldSoapBinding"  name ="HelloWorld" >
         
< wsdlsoap:address  location ="http://localhost:8080/axis/HelloWorld.jws"   />  
       
</ wsdl:port >
</ wsdl:service >

运行程序,得到如下输出信息:

return value is: Hello Brookes,Welcome to my Web Service.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值