<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的漫漫程序之旅

    專注于JavaWeb開發
    隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
    數據加載中……

    XFire完整入門教程

    網上關于XFire入門的教程不少,要么是講得很簡單,就像Hello World一樣的程序,要么就是通過IDE集成的工具來開發的,這對于不同的人群有諸多不便,關于XFire的一些詳細的信息就不再多講,可以參考官方網站和相關的文檔,這里講一個完整的入門實例。

    實例中包括三個情況,我想基本上可以概括所有的需求,或者自己稍加擴展即可。先來看看我們的Interface。
     1package test;
     2
     3import java.util.List;
     4
     5public interface IHelloService {
     6    public String sayHello(String ttt);
     7    
     8    public Course choose(User u);
     9    
    10    public List  test(List t);
    11}
    這其中包含了簡單對象的傳遞,對象的傳遞,List的傳遞。

    具體的開發步驟如下:
    1、定義Web Service的接口,代碼見上面的接口定義。

    2、實現接口和業務邏輯,代碼如下:
     1package test;
     2
     3import java.util.ArrayList;
     4import java.util.List;
     5
     6public class HelloServiceImpl implements IHelloService {
     7
     8    public String sayHello(String ttt) {
     9        return "Hello, "+ttt;
    10    }

    11    
    12    public Course choose(User u){
    13        System.out.println(u.getName());
    14        Course c=new Course();
    15        c.setName("Eee");
    16        return c; 
    17        
    18    }

    19    
    20    public List  test(List t){
    21        for (int i = 0; i < t.size(); i++{
    22            System.out.println((String) t.get(i));
    23        }

    24        List  al=new ArrayList();
    25        Course c=new Course();
    26        c.setName("EeeDDDDDD");
    27        al.add(c);
    28        return al;
    29        
    30    }

    31}
    用到的User和Course兩個類的代碼如下:
     1package test;
     2
     3public class User {
     4    private String name;
     5
     6    public String getName() {
     7        return name;
     8    }

     9
    10    public void setName(String name) {
    11        this.name = name;
    12    }

    13}

    14
     1package test;
     2
     3public class Course  {
     4    private String name;
     5
     6    public String getName() {
     7        return name;
     8    }

     9
    10    public void setName(String name) {
    11        this.name = name;
    12    }

    13
    14}

    3、編寫XFire要求的WebSevice定義描述文件,如下:
     1<?xml version="1.0" encoding="UTF-8"?>
     2<beans xmlns="http://xfire.codehaus.org/config/1.0">
     3
     4    <service>
     5        <name>HelloService</name>
     6        <namespace>http://test/HelloService</namespace>
     7        <serviceClass>test.IHelloService</serviceClass>
     8        <implementationClass>test.HelloServiceImpl</implementationClass>
     9    </service>
    10    
    11</beans>
    此文件放在src/META-INF/xfire/services.xml,編譯時會自動編譯到classes的相應目錄下面。

    4、因為我們用到了List等集合類型,所以需要定義Mapping關系,文件名為:src/test/IHelloService.aegis.xml,代碼如下:
    1<?xml version="1.0" encoding="UTF-8"?>
    2<mappings>
    3    <mapping>
    4        <method name="test">
    5            <parameter index="0" componentType="java.lang.String" />
    6            <return-type componentType="test.Course" />
    7        </method>
    8    </mapping>
    9</mappings>
    請注意,此文件一定要放到與IHelloService.java相同的目錄下面,否則會出錯。

    5、在Web.xml中配置XFire需要用到的Servlet,代碼如下:
     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
    14    <servlet-mapping>
    15        <servlet-name>XFireServlet</servlet-name>
    16        <url-pattern>/servlet/XFireServlet/*</url-pattern>
    17    </servlet-mapping>
    18
    19    <servlet-mapping>
    20        <servlet-name>XFireServlet</servlet-name>
    21        <url-pattern>/services/*</url-pattern>
    22    </servlet-mapping>
    23
    24
    25    <welcome-file-list>
    26        <welcome-file>index.jsp</welcome-file>
    27    </welcome-file-list>
    28</web-app>


    此時Web Service的服務端就開發完成了。
    我們來看看客戶端的代碼吧,也很簡單,如下:
     1package test;
     2
     3import java.net.MalformedURLException;
     4import java.util.ArrayList;
     5import java.util.List;
     6
     7import org.codehaus.xfire.XFireFactory;
     8import org.codehaus.xfire.client.XFireProxyFactory;
     9import org.codehaus.xfire.service.Service;
    10import org.codehaus.xfire.service.binding.ObjectServiceFactory;
    11
    12public class Client {
    13
    14    public static void main(String[] args) {
    15
    16        Service srvcModel = new ObjectServiceFactory()
    17                .create(IHelloService.class);
    18        XFireProxyFactory factory = new XFireProxyFactory(XFireFactory
    19                .newInstance().getXFire());
    20
    21        String helloWorldURL = "http://localhost:8080/xfiretest/services/HelloService";
    22        try {
    23            IHelloService srvc = (IHelloService) factory.create(srvcModel,
    24                    helloWorldURL);
    25            System.out.println(srvc.sayHello("Robin"));
    26            
    27            User u=new User();
    28            u.setName("RRRRR");
    29            Course c=srvc.choose(u);
    30            System.out.println(c.getName());
    31            
    32            List  al=new ArrayList();
    33            al.add("1212");
    34            al.add("2222");
    35            List t=srvc.test(al);
    36            for (int i = 0; i < t.size(); i++{
    37                Course co=(Course)t.get(i);
    38                System.out.println(co.getName());
    39            }

    40            
    41            
    42        }
     catch (MalformedURLException e) {
    43            e.printStackTrace();
    44        }

    45
    46    }

    47
    48}

    49

    以上代碼均無注釋,因為都非常簡單,呵呵。如有不清楚的地方,請留言!

    posted on 2008-04-24 18:00 々上善若水々 閱讀(8002) 評論(6)  編輯  收藏 所屬分類: WebService

    評論

    # re: XFire完整入門教程  回復  更多評論   

    我是一名學生 近期做一個項目要用到這一方面的技術
    我也在xfire中用到了list 也寫了 一個aegis.xml 但還有個錯誤 ,請幫忙看一下
    Exception in thread "main" org.codehaus.xfire.XFireRuntimeException: Cannot create mapping for java.util.List, unspecified component type for parameter 0 of method test in interface Client.kkk
    at org.codehaus.xfire.aegis.type.DefaultTypeCreator.createCollectionType(DefaultTypeCreator.java:43)
    at org.codehaus.xfire.aegis.type.java5.Java5TypeCreator.createCollectionType(Java5TypeCreator.java:139)
    at org.codehaus.xfire.aegis.type.XMLTypeCreator.createCollectionType(XMLTypeCreator.java:116)
    at org.codehaus.xfire.aegis.type.AbstractTypeCreator.createTypeForClass(AbstractTypeCreator.java:113)
    at org.codehaus.xfire.aegis.type.AbstractTypeCreator.createType(AbstractTypeCreator.java:356)
    at org.codehaus.xfire.aegis.AegisBindingProvider.getSuggestedName(AegisBindingProvider.java:255)
    at org.codehaus.xfire.service.binding.DefaultServiceConfiguration.getInParameterName(DefaultServiceConfiguration.java:162)
    at org.codehaus.xfire.service.binding.ObjectServiceFactory.getInParameterName(ObjectServiceFactory.java:1063)
    at org.codehaus.xfire.service.binding.ObjectServiceFactory.addOperation(ObjectServiceFactory.java:817)
    at org.codehaus.xfire.service.binding.ObjectServiceFactory.initializeOperations(ObjectServiceFactory.java:761)
    at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:444)
    at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:374)
    at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:355)
    at Client.aa.main(aa.java:25)
    2009-07-17 23:19 | 黯鄉魂

    # re: XFire完整入門教程  回復  更多評論   

    unspecified component type for parameter 0

    也就是根節點類型沒有指定
    2009-07-20 16:08 | 々上善若水々

    # re: XFire完整入門教程  回復  更多評論   

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at org.codehaus.xfire.transport.DefaultTransportManager.<clinit>(DefaultTransportManager.java:26)
    at org.codehaus.xfire.DefaultXFire.<init>(DefaultXFire.java:37)
    at org.codehaus.xfire.XFireFactory.<init>(XFireFactory.java:36)
    at org.codehaus.xfire.XFireFactory.newInstance(XFireFactory.java:61)
    at org.codehaus.xfire.service.binding.ObjectServiceFactory.<init>(ObjectServiceFactory.java:112)
    at test.Client.main(Client.java:17)
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    ... 6 more
    這個錯誤
    2009-12-06 18:26 | wxk

    # re: XFire完整入門教程[未登錄]  回復  更多評論   

    如果是兩個工程的話,傳對象有問題啊
    2009-12-21 16:50 | zzy

    # re: XFire完整入門教程  回復  更多評論   

    @wxk
    java.lang.NoClassDefFoundErrorx異常消除了沒有啊?
    2011-04-22 12:08 | Elven

    # re: XFire完整入門教程  回復  更多評論   

    有沒有注解返回List 的例子,發布出來看看唄
    2012-09-06 10:42 | 齊中飛
    主站蜘蛛池模板: 国产精品日本亚洲777| 亚洲国产中文在线视频| 美女黄频视频大全免费的| 免费中文熟妇在线影片 | 日本中文字幕免费看| 国产精品公开免费视频| 亚洲AV无码一区二区三区电影| 日韩激情无码免费毛片| 亚洲Av永久无码精品一区二区| 免费精品一区二区三区在线观看| 亚洲人成未满十八禁网站| 中文字幕无码不卡免费视频| 亚洲一久久久久久久久| 国产精品极品美女免费观看| 免费无码国产V片在线观看| 亚洲精品在线视频| 国产精品免费无遮挡无码永久视频| 色拍自拍亚洲综合图区| 黄页网站在线看免费| 亚洲av色香蕉一区二区三区 | 国产乱子伦精品免费无码专区| 亚洲欧美在线x视频| 亚洲 综合 国产 欧洲 丝袜| 国产免费久久精品99久久| 久久国产亚洲精品麻豆| 国产免费女女脚奴视频网| 色天使色婷婷在线影院亚洲| 久久久青草青青国产亚洲免观| 日本视频在线观看永久免费| youjizz亚洲| 亚洲国产午夜中文字幕精品黄网站| 中国在线观看免费的www| 亚洲日本一区二区| 大香人蕉免费视频75| 七次郎成人免费线路视频| 精品亚洲A∨无码一区二区三区| 成年女人视频网站免费m| 久久国产精品免费一区二区三区| 亚洲色成人网一二三区| 亚洲第一视频在线观看免费| 色欲A∨无码蜜臀AV免费播 |