`

AXIS客户端解释

阅读更多
方式1:DII(Dynamic Invocation Interface)方式,这个方式企业一般不用,但是这是axis提供的方式

先去解压开的axis目录下去找axis-1_4\samples\userguide\example1里面有个客户端的例子:

其中:
 String endpoint = 
     "http://nagoya.apache.org:5049/axis/services/echo";
说的是这个服务的地址,终端也就是服务端的地址。。。注意区别于 "http://nagoya.apache.org:5049/axis/services/echo?wsdl";这个是服务端描述文件的地址。。。


还有在这个例子中被注释的部分是可以不写的。。。。写了只是让读者看的明白点,不写也可以。。。


方式2:动态代理(Dynamic Proxy)


动态代理需要一个本地的接口作为代理
public interface ITestDynameicProxy extends Remote {
public String getMessage() throws RemoteException;
}//这就是一个代理哦,他只有这个类的架构,没有类的实现,正好与多态技术结合起来,这里这个接口实现了远程接口,也就是告诉虚拟机我是来实现远程对象的哦

public static void main(String[] args) throws Exception {
String wsdlUrl = "http://localhost:8080/axis/test/Test.jws?wsdl";
String nameSpaceUri = "http://soapinterop.org/";
String serviceName = "Test1Service";
String portName = "Test1";
ServiceFactory serviceFactory = ServiceFactory.newInstance();
Service service = serviceFactory.createService(
new URL(wsdlUrl), new QName(nameSpaceUri,serviceName));


//下面是这个代理的使用
ITestDynameicProxy proxy = (ITestDynameicProxy)service.getPort(
new QName(nameSpaceUri,portName),ITestDynameicProxy.class);
System.out.println(proxy.getMessage());
}
通过输入wsdl地址,命名空间地址和服务名,用服务工厂创建出一个服务实例,再通过设置端口名得到一个服务类型的服务代理对象,通过该代理,就可以直接访问web服务了。


方式3:静态方式(Stubs)

按常规方式发布一个web service
得到wsdl文件
通过web页面直接另存为
通过Java2WSDL工具类生成
(java org.apache.axis.wsdl.Java2WSDL -o demo1.wsdl -l http://localhost:8080/axis/services/demo -n http://www.itcast.cn/   test.Demo)



//下面是重点,我们得到一个wsdl,那么怎么来使用它
利用WSDL2Java工具类生成客户端调用代码
(java org.apache.axis.wsdl.WSDL2Java demo.wsdl -p client)
用cmd进入axis所在的classes目录下,把demo.wsdl粘贴到那里,然后执行这个命令WSDL就会To Java了。。。-p client的意思是  生成之后存放到classes中的client下 -p即path

在生成的代码基础上,进行客户端的调用	
    	public static void main(String[] args) throws ServiceException, RemoteException {
	DemoServiceLocator demoService = new DemoServiceLocator();
	Demo demo = demoService.getdemo();
	System.out.println(demo.getMessage());
	}
//其中DemoServiceLocator 是远程服务的本地类,他把该设置的参数都设置进去了,demoService.getdemo();直接得到了远程服务的接口代理。。。。这个思想和动态代理是一样的,然后就可以像操作本地的类一样操作它了哈


远程调用中的Stub是客户端的存根,他也相当于一个代理,他做些序列化和反序列化的工作,和一些接口(这里是代理的体现,因为是接口所以不干真正意义的事情)。。。。Steleton是服务器端的代理。。。他是骨架


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics