0. 下載一個jdk1.5版本的。並且如果Oracle與之衝突..就刪掉Oracle的所有環境變數。雖然這樣做有點過,但是我的確受夠了jdk1.6+eclipse3.1+oracle中的jre 1.1.3和 1.8.1版本的衝突。另外jdk1.6會與eclipse3.1在啟動tomcat上衝突。我也不知道具體是什麼原因。
1. 下載一個Eclipse 3.4 for J2EE版本的http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/SR2/eclipse-jee-ganymede-SR2-win32.zip
2. 下載tomcat 5.5。 http://apache.cs.utah.edu/tomcat/tomcat-5/v5.5.27/bin/apache-tomcat-5.5.27.exe,下載一個 安裝到預設目錄。安裝完畢之後,不要啟動。另外注意,你啟動monitor後再點擊Exit,不代表格服務關閉了。
你要選擇Stop Service 才可以。
3. 下載xfire-1.2.6。http://repository.codehaus.org/org/codehaus/xfire/xfire-distribution/1.2.6/xfire-distribution-1.2.6.zip
4. 在Eclipse中windows->preference->Server->Runtime Environments。點擊add,選中tomcat 5.5, next, 瀏覽到你的tomcat 5.5的安裝路徑。然後Finish.
5. 建立一個工程(dynamic web project),取名為TestHelloWebService
6. 在此工程中添加一個新類:hello ,其package為test.
7. in hello.java中:
package test;<br />public class Hello {<br /> public String hello()<br /> {<br /> return "hello";<br /> }<br />}
8. 在web.xml中</web-app>之前添加
<servlet><br /> <servlet-name>XFireServlet</servlet-name><br /> <servlet-class><br /> org.codehaus.xfire.transport.http.XFireConfigurableServlet<br /> </servlet-class><br /> </servlet></p><p> <servlet-mapping><br /> <servlet-name>XFireServlet</servlet-name><br /> <url-pattern>/servlet/XFireServlet/*</url-pattern><br /> </servlet-mapping><br /> <servlet-mapping><br /> <servlet-name>XFireServlet</servlet-name><br /> <url-pattern>/services/*</url-pattern><br /> </servlet-mapping>
9. 將xfire-1.2.6解壓,然後將xfire-all-1.2.6.jar 和所有在xfire-1.2.6的lib中的jar
copy到WebContent/WEB-INF/lib下。
10.在WEB-INF中建立classes檔案夾,並將META-INF檔案夾移到classes檔案夾下,
並在META-INF下建立一個xfire檔案夾。在xfire中建立一個services.xml檔案。
service.xml檔案內容如下:
<?xml version="1.0" encoding="UTF-8"?><br /><beans xmlns="http://xfire.codehaus.org/config/1.0"><br /> <service><br /> <name>Hello</name><br /> <namespace>http://localhost:8090/TestHelloWebService/services/Hello</namespace><br /> <serviceClass>test.Hello</serviceClass><br /> </service><br /></beans>
其中name是你要提供service的類名
namespace 是你要訪問的服務地址。這裡我的連接埠因為與Oracle衝突所以不是8080.你自己改為你當時配置連接埠。
格式為:http://主機ip:連接埠號碼/項目工程名/services/類名
serviceClass是你的包名.類名
11.右擊的工程->Run as-> Run on server. Finish。這裡如果在eclipse之外還啟動了tomcat就會報錯。
12.訪問http://localhost:8090/TestHelloWebService/services/Hello?WSDL
13.如何訪問WebService...你可以用c#,那是非常簡單的..見一個C#工程,添加一個web reference.
然後就像你使用本地方法一樣使用這個webservice.注意要using webservice的名字空間。對於非本地的webservice調用就比較麻煩。
有時還要使用使用者驗證。這裡不詳細介紹。
13.如果使用java來調用webService 流行的方法是使用axis。
http://topic.csdn.net/t/20030403/09/1612072.html
java裡使用webservice 安裝配置Axis
下載一個Axis1.4。http://ws.apache.org/axis/releases.html
解壓Axis1.4.zip包,找到webapps目錄下的axis檔案夾,拷貝axis檔案夾到Tomcat中的webapps檔案夾下。
將Tomcat中的axis目錄下的WEB-INF/lib中的所有的檔案copy到Tomcat的common/lib目錄中。(以後凡是要在axis的lib中添加jar檔案,都要copy一份到Tomcat的common/lib目錄下)。
我的電腦->屬性->進階->環境變數->系統變數(使用者變數也可以)中添加:
TOMCAT_HOME
這裡是你的TOMCAT安裝目錄。我的是C:/Program Files/Apache Software Foundation/Tomcat 5.5
反正這個目錄下一定要有webapps
AXIS_HOME
%TOMCAT_HOME%/webapps/axis(TOMCAT的目錄)
AXIS_LIB
%AXIS_HOME%/lib
AXISCLASSPATH
%AXIS_LIB%/axis.jar;%AXIS_LIB%/commons-discovery.jar; %AXIS_LIB%/commons-logging.jar;%AXIS_LIB%/jaxrpc.jar; %AXIS_LIB%/saaj.jar;%AXIS_LIB%/log4j-1.2.8.jar; %AXIS_LIB%/xml-apis.jar;%AXIS_LIB%/xercesImpl.jar
修改或建立CLASSPATH ,在末尾加上:
%AXIS_LIB%/axis.jar;%AXIS_LIB%/commons-discovery.jar; %AXIS_LIB%/commons-logging.jar;%AXIS_LIB%/jaxrpc.jar; %AXIS_LIB%/saaj.jar;%AXIS_LIB%/log4j-1.2.8.jar; %AXIS_LIB%/xml-apis.jar;%AXIS_LIB%/xercesImpl.jar
注意檢查CLASSPATH是否正確:(有些軟體會在使用者變數區設定一個classpath,會有影響,如:XMLSPY)
在運行輸入cmd,然後:Echo %CLASSPATH%
檢查配置:
啟動Tomcat,訪問http://localhost:8090/axis/,
驗證axis的是否工作:http://localhost:8090/axis/happyaxis.jsp如果正常顯示表示正常。
14. 你要建立一個新的工程(一個常規的java工程即可)..建立一個包名test,添加一個類TestWebService
代碼如下:
package test;<br />import org.apache.axis.client.Call;<br />import org.apache.axis.client.Service;<br />import org.apache.axis.encoding.XMLType;<br />public class TestWebService {<br /> public static void main(String[] args) {<br /> try {<br /> //還記得剛才的那個WebService的services.xml中的namespace嗎?<br /> String endpoint = "http://localhost:8090/TestHelloWebService/services/Hello";<br /> Service service = new Service();<br /> Call call = (Call) service.createCall();<br /> call.setTargetEndpointAddress(new java.net.URL(endpoint));<br /> call.setOperationName("hello"); // 這裡是的Hello類中的方法名(注意大小寫)<br /> call.setReturnType(XMLType.XSD_STRING); // 傳回值類型。<br /> Object[] o = null;//如果你的方法中沒有參數,那麼就這樣寫吧。<br /> String hello = (String) call.invoke(o);// 做方法執行。<br /> System.out.println(hello);<br /> } catch (Exception e) {<br /> System.err.println(e.toString());<br /> }<br /> }<br />}
網上的這段代碼是用來調用一個float add(float a, float b)的方法。你現在應該知道怎麼進行webservice調用了吧。
不管webservice提供的函數有沒有參數,你應該都會調用了。
// Float i = new Float(1);<br />// Float j = new Float(2);<br />// call.setOperationName("add");<br />// call.addParameter("i", org.apache.axis.encoding.XMLType.XSD_FLOAT,<br />// javax.xml.rpc.ParameterMode.IN);<br />// call.addParameter("j", org.apache.axis.encoding.XMLType.XSD_FLOAT,<br />// javax.xml.rpc.ParameterMode.IN);<br />// call.setReturnType(XMLType.XSD_FLOAT);<br />// Float ret = (Float) call.invoke(new Object[] { i, j });
15.運行你的TestWebService試試。Done。(你剛才的webservice項目還在運行..,否則...)
真的很可惜,我過去使用的eclipse3.1,添加了很多plugin,死活都建不成webservice.再後來我使用Myclipse 4.0GA版本,還是看不到webservice。或者運行時候後來有好心MM傳給我MyEclipse5.0GA,結果報出災難性崩潰...只得重裝了jdk,並且下了較新的eclipse.