- 论坛徽章:
- 0
|
这两天在研究Java的Web Service实现方式。其实大家用的比较多的是Apache发布的Axis组件,以及Axis2。这两种实现方式在国内用的比较多,在网上找了很多,不过大部分都是关于它们的资料。
本来我也在用Axis组件,这个组件开发的确也挺简单的。它的实现大概有两种方式:jws方式和wsdd方式。
jws方式很简单,只要将Java文件改名为×.jws然后部署就可以访问了,不过这个有局限性,至于wsdd方式就能做得更好些,它是写部署文件来实现的,感觉用起来应该挺爽。不过可惜的是当我用第二种方式的时候老是找不到不能编译出wsdl文件。后来在网上找了一些资料,有的说是要什么注册什么的,不过感觉还是挺麻烦的。最后感觉不爽而放弃走Axis这条路。
MyEclipse中有Xfire这个组件。后来又在网上找到一篇关于Xfire开发的文章。(在博客中已有转载:http://blog.chinaunix.net/u/10369/showart_197976.html)这篇文章也只是国人翻译过来的。
看完这篇文件后感觉用Xfire还是挺方便的。就决定试试手。不过在网上找了好久也没找到太多关于Xfire的中文资料,看样子大家都不用Xfire开发的。最后没办法,只好到官方网站走一糟。(官方网站有时打不开:昨天我访问的时候打不开,今天早上过来就可以用了)下了Document。
对于Xfire的Web Service的开发在那篇文章里已经介绍了。不过对于客户端的调用就比较不爽了,介绍得不是太详细。最后在官文文档里找了好久,总算找到了出路。
首先要安装Plugin,按照官方介绍的方法,这里不再描述。然后用WSDL2Java自动生成Java类(官方文档里有介绍)。最后就可以用了,不过这里Xfire自动生成的类有问题,生成的Client类不能new出来,这个应该是一个Bug,在官方的留言中找到了别人有同样的问题。
不过这个Bug到现在官方还没有正式给出解决方案,不过我们可以手工来修改自动生成的类,以修正这个Bug所带来的问题。解决方法如下:
生成的Client类中有一个方法是
private void create0();
在这个方法中有类似这样一句:
service0 = asf.create((XXXXPortType.class), props);
XXXXPortType是自动生成的一个接口,这里只要将XXXXPortType改成XXXXImpl就可以了。
XXXXImpl是自动生成的一个类,这个类实现了接口XXXXPortType。
这样修改后在你的客户端程序中就可以直接调用XXXXClient了,就像调用普通的类一样。
示例代码:
XXXXClient xxxxClient = new XXXXClient();
XXXXPortType test = xxxxClient.getXXXXHttpPort(serviceUrl);
……
后面就是一般的操作了。而且操作中完全隐藏了复杂数据结构的实现细节。
以这种方式开发,感觉比较简单,感觉与微软的.Net方式开发有的一拼。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/10369/showart_198453.html |
|