xfire + spring +hibernate 实现webservice 偷懒版本

来源:互联网 发布:什么软件可以tvb 编辑:程序博客网 时间:2024/04/28 17:28

 

 

                                    xfire + spring +hibernate  实现webservice  偷懒版本

  今天将之前的一个工作情况进行了整理,是xfire + spring+ hibernate 实现webservice 的wsdl ,客户端生成代码并测试。


1. 附加数据库(我用的sql server 2005),主要是添加 hisdb.mdf  ,成功后,新建查询,use hisdb  ,然后 select 表, 测试获得数据,说明连接成功。另外附加一张 sql 启动需要开启服务的图:

 

  前面都是SQL  看后面的字段,需要开启的服务类别有:Server  ,   Server Analysis Services , Server Integration services , Server    VSS Writer  ,  如果服务列表顺序一样的话,应该就是第一个,然后隔两行(1个),再隔两行(2个)。

 

2. 开启 MyEclipse, 配置tomcat  和  数据源---   db_server

 

3. 建立项目  new  webservice  project (选择xfire为工具)

 

4. 项目框架建包,sh.(biz、dao、impl、test) ,ws.(webservice、client)

 

5.  导入webservices  接口和实现类 ------- new web service ,注意选择 xfire  和 create...bottom-up-scenario,并勾上,下一步就是定义接口的名字,然后完成。 

    以上就建立了一个最简单的webservice ,如同网上很多  holloword  例子

 

 

6. 发布项目,启动tomcat ,在浏览器中,可以访问wsdl,并在 myeclipse 的Web Services Explorer 视图下面测试,通过---------- 有个系统自动生成的接口。

 

7. 导入 spring + hibernate 框架。 spring 我用的是1.2,hibernate 3.2。  一切都由spring来管理。并通过hibernate 的映射生成 javabean  和  BeanDAO 等

 

 

8. 在sh 中 写接口和实现类,配置impl  (在ApplicationContext.xml 中) ,并在test 中测试,

 

ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:applicationContext.xml");
All_impl dao = (All_impl) ctx.getBean("all_impl");

 

是必须的,不是在struts 调用,所以没有配置,在 java  控制台调用 hibernatedao 就需要这里实例化一次,其实就是让spring去实现。

 

 

9. xfire  和sh 目前还没有联系,要调用数据库,就必须结合起来-------- 可以按照网上那些方法去配置,但是比较繁琐,自己偷懒的方法见 10。


10.   在webservice 的接口中,直接copy  sh.biz 中的各个方法(之前是按照websevice需求写的),然后在实现类中,添加上
Test   中那两句重要的话:


ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:applicationContext.xml");
All_impl dao = (All_impl) ctx.getBean("all_impl");

 

 

这样就间接的将  xfire  和  sh  结合起来了,而且不要被  new  所吓倒了,不会重复的生成实例的。

   这样接口的实现类中直接用   this.dao.方法名   来实现,每个都一句话。

 

 

11.  就这样,不用去配置xfire+spring了。........... 

 

 

12.  配置webservice 中的复杂接口(返回类型,参数类型)--------------  在接口同目录下,建立 Ixsh.aegis.xml,对每个接口都进行配置---------其中的具体怎么配置见我的csdn 上面的那篇文章。 ----------其实这个很重要。

 

 

13. 慢慢调试,然后可以查看到:http://localhost:8080/Xfire_SH/services/    点击进去就是wsdl 了。


14.  在Web Services Explorer 中测试,对每个接口都可以实现,在 body 中看到返回的值------- 至少已经成功了一大半。补充一点,由于hiabernate 的延迟加载,有时候在关联另外一张表的时候会报错,可以通过配置spring ,或者web.xml  但是我配置了好像没什么反应,就直接用最笨的方法了,直接在 bean.hbm.xml 中,将 <many-to one><set>  中添加 fetch="join" lazy="false"    除非大型数据不停的关联调用,这样不会影响性能,至少微小的影响是不构成影响的。


15. 建立另外一个webservice  工程,根据wsdl 反向生成实现客户端 ----------  在Myeclipse 下,这个很容易。 需要你copy  wsdl 的url  ,其他的一些配置不详细说。

   在webclient  中,调用方法  service.(可以点开方法名),打印,如果和 视图测试中一样,说明webservice 发布成功。至于客户端怎么去调用,怎么去解析,我就不说了,网上一大堆文章。


16. 设置访问wsdl  的访问权限,最简单的就是在 tomcat中 中设置用户名和密码,网上可搜到相关代码。 这样别人即使知道url,没有密码也是连接不成功的。

 

 

  以上是个人的愚见,亲身做过项目,是个偷懒的做法,能实现功能。

 

 

 


                                                                                                                                                      2010年7月24日 星期六

                                                                                                                                                      QQ : 932165304 

 

原创粉丝点击