此篇文章是我在搭建Hibernate WebService時學到的一些知識。
1> 新建名為HibernateWebService的Web Project
2> 選中此項目點擊右鍵--MyEclipse->Add Hibernate Capabilities...彈出Hibernate Support for MyEclipse對話框
3> 選中添加到工程的包Core和Advanced,點擊next在src目錄下新建hibernate.cfg.xml配置文件
4> 選中use jdbc Driver 并填寫數據庫的鏈接信息
在此我連接的是MySQL數據庫,URL:jdbc.mysql://localhost:3306/database
Driver class:com.mysql.jdbc.Driver
username:root
password:******
5> 選中創建Session Factory class,finish!
如果要生成struts1的配置文件struts~configure.xml,只需選中項目點擊右鍵--MyEclipse--> Add Struts Capabilities...
在/WEB-INF下就會生成你所需要的xml文件。
接下來講解的是如何生出hibernate的映射文件,*.hbm.xml
首先在Eclipse里連接數據庫,找到你要映射的table,如users,對users表點擊右鍵,選擇Hibernate Reverse Engineering,選擇目錄src和包com.scylla.users,選擇Hibernate mapping file 和 Java Data Object 點擊finish!
在com.scylla.users包下生成了兩個java文件和一個xml文件,分別是 Users.java 和 AbstractUsers.java和Users.hbm.xml
在Project下還生成了另一個xml文件,為hibernate.reveng.xml
(注:AbstructUsers.java可以去掉,同時修改一下Users.java文件,把它修改成一般的entity類即可。
hibernate.reveng.xml 也可去掉)
Test.java
UserHandler.java
User.java
Users.hbm.xml
Hibernate.cfg.xml
確定Hibernate環境搭建好之後就可以開始把它部署成webservice了。
第一步:在C:盤目錄下建立如下目錄結構
C:/ws/com/scylla/user 將HibernateSessionFactory.class和UserHandler.class放在此目錄下
C:/META-INF/ 新建webservice.xml文件放在此目錄下,文件內容如下:
用如下CMD命令打包
cd C:/ws
jar -cvf ws.aar *.*
將打包好的ws.aar文件放在../axis2/WEB-INF/services中,然後將Hibernate.cfg.xml文件放在../axis2/WEB-INF/classes目錄中,
同時在此目錄下新建com/scylla/user目錄,并將Users.class和Users.hbm.xml文件放在此新建目錄中。
到此Hibernate WebService已經部署好了。(本人在實際操作中遇到了如下異常:org.hibernate.HibernateException: /hibernate.cfg.xml not found ,和Users.hbm.xml not found。原因就是hibernate.cfg.xml和Users.hbm.xml文件放的位置不對 )
下面的工作就是調用此WebService
第一種調用方法,編寫如下代碼:
(注意:此行代碼是聲名返回值的類型為Users對象 Class[] classes = new Class[] {com.scylla.user.Users.class};)
第二種調用方法:
首先使用如下CMD命令
cd C:/Program Files/apache-tomcat-5.5.28/webapps/axis2-1.4.1/bin
wsdl2java -uri http://localhost:8080/axis2/services/HibernateWebService?wsdl -p client -s -o stub
在axis2-1.4.1/bin目錄下生成了stub/src/client目錄,將此目錄下的HibernateWebServiceStub.java文件複製到你測試調用工程的client包下。然後新建如下代碼進行調用:
調用后輸出數據庫中的值,user id is:1 user name is:johnny。
注意:WebService不支持集合類型的數據傳遞,像ArrayList Map Set 等等,否則在客戶端調用的時候出現類型轉換異常!
最為鬱悶的是出現:Mapping qname not fond for the package:。。。(回憶中)