第二種:用eclipse創建webservice:
最近看了一下web service,算是揭開了它的面紗,才發現它原來并不神秘,相反很簡單,但是它卻很強大.
一句話來描述它:跨語言平臺,將寫好的組件利用接口分布式發布出來,供其他人調用.
呵呵,當然,可能說的不完全對,大家就包含了,因為僅僅只是看了一天,寫了一個簡單的例子.
這里寫一下如何發布一個簡單的web service吧....
Web Services引擎現在有兩大主流:XFire和AXIS2
這里我只介紹XFire,這兩個主流我都分別寫了一個簡單的例子,個人覺的XFire比AXIS2更容易一點.
首先,在看后面的例子講解前,有必要去看一下web service的教程,它究竟能做什么,它的標準是什么。
這里我介紹一個網址,淺顯而易懂,有的解釋的過于復雜,讓人看的挺暈的.
http://www.w3school.com.cn/webservices/ws_platform.asp
下面開始講解一個由XFire做為web service引擎的例子
首先來講解服務端的構建:
服務器環境是:jdk1.6+Apache tomcat5.5
1.我們首先寫一個接口:IBankingService
public interface IBankingService {
public int transferFunds(int a, int b);
}
2.寫它的實現類:BankingService
public class BankingService implements IBankingService {
//Default constructor.
public BankingService() {
}
public int transferFunds(int a, int b) {
int c = a + b;
return c;
}
}
3.Web應用的部署描述符
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
4.在WebRoot\META-INF目錄下新建xfire文件夾,然后在xfire目錄下添加一個XFire使用的配置文件 services.xml,該配置文件中的內容反映了要將哪些java類發布為web服務。本例中的services.xml內容如下:
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>Banking</name>
<namespace>mybank</namespace>
<serviceClass>com.xfire.test.IBankingService</serviceClass>
<implementationClass>com.xfire.test.BankingService</implementationClass>
</service>
</beans>
5.加入xfire的庫文件,包含以下jar包:
XFire和其它類庫,需要得到所有必需的類庫。我們怎樣得到它們呢?去XFire網站,下載xfire-distribution- 1.0.zip,然后解壓到一個本地文件夾。復制下面的jar文件和它的庫文件夾到WEB-INF/lib中:
6.打war包,放到tomcat下,開啟tomcat,然后訪問http://localhost:8080/xfireDemo/services/Banking?wsdl
xfireDemo是我項目的名稱.
如果頁面中看到wsdl的XML文件,說明服務端發布成功了.如果拋異常了:說明services.xml文件不存在
“org.springframework.beans.factory.BeanDefinitionStoreExcep
解決方案:把WebRoot下整個META-INF文件夾(包含前面生成的xfire文件)拷貝到WebRoot下的classes文件夾下就OK了
到這里,我相信大家都能看到在頁面上看到wdsl文件內容了,可以看看內容具體是什么,如果大家了解過wdsl.
現在開始構建客戶端:
BankingClient bc;
BankingPortType bpt;
public Client(){
bc=new BankingClient();
bpt=bc.getBankingHttpPort();
System.out.println("result: "+bpt.transferFunds(2, 3));
}
public static void main(String[] args){
Client c = new Client();
}
}
4.如果這個時候運行,你可能會遇見以下報錯信息:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/httpclient/methods/RequestEntity
這是由于缺少apache的commons httpclient庫文件.添加進去再試,又報錯
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException
這是由于缺少apache的commons codec庫文件,添加進去再試,成功顯示:result: 5
下面是服務端和客戶端結構截圖:

好了,我這人挺懶的,都不喜歡寫些筆記,今天真是難得寫一次呀。
最近看了一下web service,算是揭開了它的面紗,才發現它原來并不神秘,相反很簡單,但是它卻很強大.
一句話來描述它:跨語言平臺,將寫好的組件利用接口分布式發布出來,供其他人調用.
呵呵,當然,可能說的不完全對,大家就包含了,因為僅僅只是看了一天,寫了一個簡單的例子.
這里寫一下如何發布一個簡單的web service吧....
Web Services引擎現在有兩大主流:XFire和AXIS2
這里我只介紹XFire,這兩個主流我都分別寫了一個簡單的例子,個人覺的XFire比AXIS2更容易一點.
首先,在看后面的例子講解前,有必要去看一下web service的教程,它究竟能做什么,它的標準是什么。
這里我介紹一個網址,淺顯而易懂,有的解釋的過于復雜,讓人看的挺暈的.
http://www.w3school.com.cn/webservices/ws_platform.asp
下面開始講解一個由XFire做為web service引擎的例子
首先來講解服務端的構建:
服務器環境是:jdk1.6+Apache tomcat5.5
1.我們首先寫一個接口:IBankingService
public interface IBankingService {
public int transferFunds(int a, int b);
}
2.寫它的實現類:BankingService
public class BankingService implements IBankingService {
//Default constructor.
public BankingService() {
}
public int transferFunds(int a, int b) {
int c = a + b;
return c;
}
}
3.Web應用的部署描述符
在Java中,Web應用程序通常需要至少一個部署描述符(叫做web.xml)對其進行配置。XFire本身是一個基于servlet的應用
程序。因此,我們需要增加必要的引用到描述符文件中。然后我們還必須配置將要創建的Web
Services。我們使用一個稱為services.xml的新文件來完成這件事。
首先,修改web.xml。
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
4.在WebRoot\META-INF目錄下新建xfire文件夾,然后在xfire目錄下添加一個XFire使用的配置文件 services.xml,該配置文件中的內容反映了要將哪些java類發布為web服務。本例中的services.xml內容如下:
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>Banking</name>
<namespace>mybank</namespace>
<serviceClass>com.xfire.test.IBankingService</serviceClass>
<implementationClass>com.xfire.test.BankingService</implementationClass>
</service>
</beans>
5.加入xfire的庫文件,包含以下jar包:
XFire和其它類庫,需要得到所有必需的類庫。我們怎樣得到它們呢?去XFire網站,下載xfire-distribution- 1.0.zip,然后解壓到一個本地文件夾。復制下面的jar文件和它的庫文件夾到WEB-INF/lib中:
- activation-1.0.2.jar
- commons-codec-1.3.jar
- commons-httpclient-3.0.jar
- commons-logging-1.0.4.jar
- jaxen-1.1-beta-8.jar
- jdom-1.0.jar
- log4j-1.2.x.jar
- mail-1.3.3_01.jar
- spring-1.2.x.jar
- stax-api-1.0.jar
- wsdl4j-1.5.2.jar
- wstx-asl-2.9.jar
- xbean-2.1.0.jar
- xbean-spring-2.2.jar
- xfire-all-1.0.jar
- XmlSchema-1.0.jar
6.打war包,放到tomcat下,開啟tomcat,然后訪問http://localhost:8080/xfireDemo/services/Banking?wsdl
xfireDemo是我項目的名稱.
如果頁面中看到wsdl的XML文件,說明服務端發布成功了.如果拋異常了:說明services.xml文件不存在
“org.springframework.beans.factory.BeanDefinitionStoreExcep
解決方案:把WebRoot下整個META-INF文件夾(包含前面生成的xfire文件)拷貝到WebRoot下的classes文件夾下就OK了
到這里,我相信大家都能看到在頁面上看到wdsl文件內容了,可以看看內容具體是什么,如果大家了解過wdsl.
現在開始構建客戶端:
說明:本客戶端使用xfire針對eclipse開發的插件(還可使用ant生成客戶端,請參考其他材料),下載和使用說明參見:http://xfire.codehaus.org/Eclipse+Plugin
1.在eclipse中新建一個名為helloClient的java object。
2.使用xfire插件調用服務器端的wsdl(web服務描述語言)文檔生成客戶端可調用的java類,
打開file->new->other->Code generation from wsdl document
3.新建一個名為Client的客戶端類。其代碼如下:
BankingClient bc;
BankingPortType bpt;
public Client(){
bc=new BankingClient();
bpt=bc.getBankingHttpPort();
System.out.println("result: "+bpt.transferFunds(2, 3));
}
public static void main(String[] args){
Client c = new Client();
}
}
4.如果這個時候運行,你可能會遇見以下報錯信息:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/httpclient/methods/RequestEntity
這是由于缺少apache的commons httpclient庫文件.添加進去再試,又報錯
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException
這是由于缺少apache的commons codec庫文件,添加進去再試,成功顯示:result: 5
下面是服務端和客戶端結構截圖:
好了,我這人挺懶的,都不喜歡寫些筆記,今天真是難得寫一次呀。