XFire創建WebService實例

XFire創建WebService實例應用

 

  XFire使得在JavaEE應用中發佈Web服務變得輕而易舉。和其他Web服務引擎相比,
  XFire的配置非常簡單,可以非常容易地和Spring集成。
  下載地址:http://xfire.codehaus.org/Download

 

   一. 使用XFire發佈WebService


   1. 創建service接口 

 

Java代碼  收藏代碼
  1.  package com.test.service;  
  2.  import com.test.service.bean.User;  
  3.    
  4.  public interface IHelloService {  
  5.     public String sayHello(String name);  
  6.     public User  getUser(User user);  
  7.     }  
  8. }  

  2.創建Service接口的實現類

Java代碼  收藏代碼
  1. package com.test.service;  
  2. import com.test.service.bean.User;  
  3. public class HelloService implements IHelloService{   
  4.     public String sayHello(String name){  
  5.         return "Hello, "+name;  
  6.     }  
  7.     public User getUser(User user) {  
  8.         User userNew = new User();  
  9.         userNew.setId("new:"+user.getId());  
  10.         userNew.setName("new:"+user.getName());  
  11.         return userNew;  
  12.     }  
  13. }  

  

Java代碼  收藏代碼
  1. package com.test.service.bean;  
  2. public class User {       
  3.     private String id;  
  4.     private String name;      
  5.     public String getId() {  
  6.         return id;  
  7.     }  
  8.     public void setId(String id) {  
  9.         this.id = id;  
  10.     }  
  11.     public String getName() {  
  12.         return name;  
  13.     }  
  14.     public void setName(String name) {  
  15.         this.name = name;  
  16.     }  
  17. }  

 

3.在web.xml文件中進行XFire攔截配置,可參照官網提供的sample。

Xml代碼  收藏代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  
  3.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  5.    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  6.   
  7. <servlet>  
  8.     <servlet-name>XFireServlet</servlet-name>  
  9.     <servlet-class>  
  10.         org.codehaus.xfire.transport.http.XFireConfigurableServlet  
  11.     </servlet-class>  
  12. </servlet>  
  13. <servlet-mapping>  
  14.     <servlet-name>XFireServlet</servlet-name>  
  15.     <url-pattern>/servlet/XFireServlet/*</url-pattern>  
  16. </servlet-mapping>  
  17. <servlet-mapping>  
  18.     <servlet-name>XFireServlet</servlet-name>  
  19.     <url-pattern>/services/*</url-pattern>  
  20. </servlet-mapping>  
  21. </web-app>  

 4.在WEB-INF/classes目錄下建立META-INF目錄,如(META-INF>xifre->services.xml),
    在services.xml文件中進行webservice服務的發佈,可參照官網提供的sample。 

Xml代碼  收藏代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://xfire.codehaus.org/config/1.0">  
  3. <service>  
  4.     <name>HelloService</name>  
  5.     <serviceClass>com.test.service.IHelloService</serviceClass>  
  6.     <implementationClass>com.test.service.HelloService</implementationClass>  
  7. </service>      
  8. </beans>  

 

5.將xfire的Jar包和相關依賴包拷到系統應用中,在Tomcat下部署應用。
   啓動tomcat後訪問服務(需在應用後加上/services,webservice纔會進行攔截):
   例:http://localhost:8080/ws2/services。(IE下有時無法顯示列表,可用其它瀏覽器顯示或指定接口名稱)
   界面如下:   

 

 點擊後查看詳細的wsdl文檔,不同的瀏覽器下訪問會有區別,展示效果不一致。

 

 

   二.建立XFire客戶端進行調用

  

    1.本地客戶端調用,與webservice服務在同一應用。

Java代碼  收藏代碼
  1. package com.test.client;  
  2.   
  3. import java.net.MalformedURLException;  
  4. import org.codehaus.xfire.XFireFactory;  
  5. import org.codehaus.xfire.client.XFireProxyFactory;  
  6. import org.codehaus.xfire.service.Service;  
  7. import org.codehaus.xfire.service.binding.ObjectServiceFactory;  
  8. import com.test.service.IHelloService;  
  9. import com.test.service.bean.User;  
  10.   
  11. public class ClientTest {  
  12.     public static void main(String args[]) throws MalformedURLException {  
  13.         Service service = new ObjectServiceFactory().create(IHelloService.class);  
  14.         XFireProxyFactory factory = new XFireProxyFactory(XFireFactory  
  15.                 .newInstance().getXFire());  
  16.         String url = "http://localhost:8080/ws2/services/HelloService";  
  17.         IHelloService helloService = (IHelloService) factory.create(service,url);  
  18.         System.out.println(helloService.sayHello("張三"));  
  19.         User user = new User();  
  20.         user.setName("張三");  
  21.         System.out.println(helloService.getUser(user).getName());  
  22.     }  
  23. }  

 
     執行結果如下:

Java代碼  收藏代碼
  1. Hello, 張三  
  2. new:張三  

 

   2. 利用XFire創建build.xml文件生成客戶端代碼調用webservice服務

  

     2.1在src目錄下創建build.properties文件,配置如下:

Java代碼  收藏代碼
  1. src.dir=${basedir}  
  2. lib.dir=D:/myspace/ws2/WebRoot/WEB-INF/lib  
  3. wsdl.dir=http\://localhost\:8080/ws2/services/HelloService?wsdl  

 

     2.2在src目錄下創建build.xml文件,配置如下:

Xml代碼  收藏代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <project name="WebService" basedir="." default="gen-webservice">  
  3.     <property file="build.properties"></property>  
  4.     <path id="project-classpath">  
  5.         <fileset dir="${lib.dir}">  
  6.             <include name="**/*.jar" />   
  7.         </fileset>  
  8.     </path>  
  9.   
  10.     <target name="gen-webservice">  
  11.         <taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask"   
  12.                                              classpathref="project-classpath" />  
  13.         <wsgen outputDirectory="${src.dir}"  wsdl="${wsdl.dir}"   
  14.                     package="stub.test.client" overwrite="true"/>          
  15.     </target>  
  16. </project>  

    

     用ant構建生成代碼,生成後的目錄如下:

 

 

 

     2.3編寫客戶端代碼進行調用

Java代碼  收藏代碼
  1. package com.test.client;  
  2. import stub.test.client.HelloServiceClient;  
  3. import stub.test.client.HelloServicePortType;  
  4. import com.test.service.bean.ObjectFactory;  
  5. import com.test.service.bean.User;  
  6.   
  7. public class HelloServiceTest {  
  8.   
  9.     public static void main(String args[]){  
  10.         HelloServiceClient service = new HelloServiceClient();        
  11.         HelloServicePortType portType = service.getHelloServiceHttpPort();            
  12.         System.out.println(portType.sayHello("張三"));  
  13.           
  14.         ObjectFactory factory = new ObjectFactory();          
  15.         User user = factory.createUser();  
  16.         user.setName(factory.createUserName("張三"));  
  17.         System.out.println(portType.getUser(user).getName().getValue());  
  18.     }  
  19. }  

 

    執行結果如下:

Java代碼  收藏代碼
  1. Hello, 張三  
  2. new:張三  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章