<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 | 齊中飛
    主站蜘蛛池模板: 亚洲精品中文字幕乱码影院| 国产成人亚洲精品狼色在线| 亚洲一欧洲中文字幕在线| 免费国产叼嘿视频大全网站| 久久久久亚洲精品成人网小说 | 久久久久久久尹人综合网亚洲| 特级毛片爽www免费版| 亚洲成年看片在线观看| 国产精品亚洲专区在线播放| 国产一级淫片免费播放电影| 阿v视频免费在线观看| 亚洲精品97久久中文字幕无码| 人妻巨大乳hd免费看| 亚洲精品中文字幕乱码三区| 久久国产精品一区免费下载| 亚洲一区二区成人| 久久综合AV免费观看| 亚洲av最新在线观看网址| 免费大片黄手机在线观看 | 亚洲av无码专区国产不乱码| 日韩免费a级在线观看| 极品美女一级毛片免费| 亚洲中文字幕无码一区 | 免费国产成人18在线观看| 亚洲日韩乱码中文无码蜜桃| 成年性生交大片免费看| 处破女第一次亚洲18分钟| 国产亚洲av片在线观看18女人| 日本xxxx色视频在线观看免费| 亚洲欧洲另类春色校园小说| 日韩黄色免费观看| a级精品九九九大片免费看| 亚洲国产视频网站| 免费一级国产生活片| 美女视频黄的免费视频网页| 亚洲丰满熟女一区二区v| 亚洲第一页日韩专区| 69视频免费观看l| 国产成人综合亚洲| 亚洲av丰满熟妇在线播放| 四虎免费大片aⅴ入口|