一個簡單的webservice demo(適合入門) – JAVA編程語言程序開發技術文章

1.下載需要的xfire包 
下載地址:<strong><span style="color:#3366ff;">https://xfire.codehaus.org/Download</span></strong>,下載xfire-distribution-1.2.6.zip文件,並解壓。 
新建web項目,取名TestXFire,將解壓目錄下的xfire-all-1.2.6.jar和lib目錄下的所有包導入到項目中。 
 
2.創建類 
使用接口的設計是一個好的實踐,所以先創建接口:ITestService,代碼如下: 
package com.gdie.xfire.example; 
//該接口提供一個方法,用於計算 
public interface ITestService { 
 public int add(int p1, int p2); 

創建接口實現類 
package com.gdie.xfire.example; 
 
public class TestService implements ITestService { 
 
 public int add(int p1, int p2) { 
  // TODO Auto-generated method stub 
  return p1 + p2; 
 } 
 

3.創建META-INF文件夾 
簡便起見,將WebRoot下的META-INF文件夾復制到項目的src下,這樣的話會在部署發佈目錄下web-inf下的classes下自動建立META-INF,而同時WebRoot下也有一個META-INF文件夾,這兩個容易混淆,實際webservice下真正起作用的是web-inf下的classes下的META-INF,所以,關鍵是在項目的src下面有META-INF這個文件夾,並定義裡面的內容,與WebRoot下META-INF無關。 
然後在src下的META-INF建立xfire子文件夾,裡面建立一名叫services.xml配置文件,配置如下:  
<?xml version="1.0" encoding="UTF-8"?>  
 
<beans xmlns="https://xfire.codehaus.org/config/1.0">  
 
<service>  
 
   <name>TestService</name>  
 
   <namespace>https://com/gdie/xfire/example/ITestService</namespace>  
  
   <serviceClass>com.gdie.xfire.example.ITestService</serviceClass>  
 
   <implementationClass>com.gdie.xfire.example.TestService</implementationClass>  
 
</service>  
 
</beans>  
註意:包文件路徑com.gdie.xfire.example.ITestService等需要正確對應。 
關鍵是在src下面要有META-INF文件夾和裡面的文件,否則會報找不到services.xml錯誤而加載不瞭項目。  
 
4.修改web.xml 
配置文件關鍵是定義XFireServlet,對應代碼如下:  
 
<?xml version="1.0" encoding="UTF-8"?>  
 
<web-app version="2.5" xmlns="https://java.sun.com/xml/ns/javaee"  
 
    xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"  
 
    xsi:schemaLocation="https://java.sun.com/xml/ns/javaee  
 
    https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
    <welcome-file-list>  
 
       <welcome-file>index.jsp</welcome-file>  
 
    </welcome-file-list>  
 
    <servlet>  
 
       <servlet-name>XFireServlet</servlet-name>  
 
       <servlet-class>  
 
           org.codehaus.xfire.transport.http.XFireConfigurableServlet  
 
       </servlet-class>  
 
       <load-on-startup>0</load-on-startup>  
 
    </servlet>  
 
    <servlet-mapping>  
 
       <servlet-name>XFireServlet</servlet-name>  
 
       <url-pattern>/services/*</url-pattern>  
 
    </servlet-mapping>  
 
     
</web-app>  
至此,服務器端部署完畢。完整的項目文件結構如圖: 
  
 將項目加載進tomcat並啟動tomcat,無異常。  
 
打開ie,輸入  
https://localhost:8080/TestXFire/services/  
出現  
  
 表明部署成功,點wsdl可以看見一堆xml代碼。  
 
5.客戶端測試 
先將剛才建立的TestXFire整個項目打包成jar包(myeclipse的export),名為TestXFire.jar,再新建一個web項目TestXFireClient,導入xfire的包,和剛才的TestXFire工程的打包TestXFire.jar  
 
在src下新建一個測試類,代碼如下:  
package com.gdie.xfire.test; 
 
import org.codehaus.xfire.service.Service; 
import org.codehaus.xfire.service.binding.ObjectServiceFactory; 
import org.codehaus.xfire.client.XFireProxyFactory; 
 
import com.gdie.xfire.example.ITestService;; 
 
public class MyClient { 
 public static void main(String[] args) { 
  try{ 
   Service serviceModel = new ObjectServiceFactory().create( 
     ITestService.class,"TestService","https://com/gdie/xfire/example/ITestService",null); 
    
   ITestService service = (ITestService) new XFireProxyFactory().create( 
     serviceModel,"https://localhost:8080/TestXFile/services/TestService"); 
    
   System.out.println("返回值是:"+service.add(5, 8)); 
  }catch (Exception e) { 
   // TODO: handle exception 
   e.printStackTrace(); 
  } 
 } 

運行,輸出結果是:  
返回值是:13 
則說明客戶端成功。  
 
至此,webservice部署測試例子成功。 
 
【項目創建】
 
 
包名 做瞭一些修改。
 
這裡隻貼出比較關鍵的文件
 
【src/META-INF/xfire/services.xml】
 
[html] view plaincopy
<?xml version="1.0" encoding="UTF-8"?>  
 
<beans xmlns="https://xfire.codehaus.org/config/1.0">  
 
    <service>  
     
       <name>TestService</name>  
     
       <namespace>https://com/feihuale/xfire/demo/ITestService</namespace>  
     
       <serviceClass>com.feihuale.xfire.demo.ITestService</serviceClass>  
     
       <implementationClass>com.feihuale.xfire.demo.TestService</implementationClass>  
     
    </service>  
 
</beans>  
 
【web.xml】
 
[html] view plaincopy
<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="https://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="https://java.sun.com/xml/ns/javaee  
    https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <welcome-file-list> 
 
        <welcome-file>index.jsp</welcome-file> 
 
    </welcome-file-list> 
 
    <servlet> 
 
        <servlet-name>XFireServlet</servlet-name> 
 
        <servlet-class> 
 
            org.codehaus.xfire.transport.http.XFireConfigurableServlet 
 
        </servlet-class> 
 
        <load-on-startup>0</load-on-startup> 
 
    </servlet> 
 
    <servlet-mapping> 
 
        <servlet-name>XFireServlet</servlet-name> 
 
        <url-pattern>/services/*</url-pattern> 
 
    </servlet-mapping> 
 
     
 
</web-app> 
 
【客戶端項目文件】
 
y
package com.feihuale.xfire.test; 
 
import org.codehaus.xfire.client.XFireProxyFactory; 
import org.codehaus.xfire.service.Service; 
import org.codehaus.xfire.service.binding.ObjectServiceFactory; 
 
import com.feihuale.xfire.demo.ITestService; 
 
 
public class MyClient { 
 
    /**
     * @param args
     */ 
 
    public static void main(String[] args) { 
        try { 
            Service serviceModel = new ObjectServiceFactory().create( 
                    ITestService.class, "TestService", 
                    "https://com/feihuale/xfire/demo/ITestService", null); 
 
            ITestService service = (ITestService) new XFireProxyFactory() 
                    .create(serviceModel, 
                            "https://localhost:8080/TestXFire/services/TestService"); 
 
            System.out.println("返回值是:" + service.add(5, 8)); 
        } catch (Exception e) { 
            // TODO: handle exception 
            e.printStackTrace(); 
        } 
    } 
}   

摘自 feihuale的專欄

發佈留言