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

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

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

    我的漫漫程序之旅

    專(zhuān)注于JavaWeb開(kāi)發(fā)
    隨筆 - 39, 文章 - 310, 評(píng)論 - 411, 引用 - 0
    數(shù)據(jù)加載中……

    XFire完整入門(mén)教程

    網(wǎng)上關(guān)于XFire入門(mén)的教程不少,要么是講得很簡(jiǎn)單,就像Hello World一樣的程序,要么就是通過(guò)IDE集成的工具來(lái)開(kāi)發(fā)的,這對(duì)于不同的人群有諸多不便,關(guān)于XFire的一些詳細(xì)的信息就不再多講,可以參考官方網(wǎng)站和相關(guān)的文檔,這里講一個(gè)完整的入門(mén)實(shí)例。

    實(shí)例中包括三個(gè)情況,我想基本上可以概括所有的需求,或者自己稍加擴(kuò)展即可。先來(lái)看看我們的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}
    這其中包含了簡(jiǎn)單對(duì)象的傳遞,對(duì)象的傳遞,List的傳遞。

    具體的開(kāi)發(fā)步驟如下:
    1、定義Web Service的接口,代碼見(jiàn)上面的接口定義。

    2、實(shí)現(xiàn)接口和業(yè)務(wù)邏輯,代碼如下:
     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兩個(gè)類(lèi)的代碼如下:
     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、編寫(xiě)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,編譯時(shí)會(huì)自動(dòng)編譯到classes的相應(yīng)目錄下面。

    4、因?yàn)槲覀冇玫搅薒ist等集合類(lèi)型,所以需要定義Mapping關(guān)系,文件名為: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>
    請(qǐng)注意,此文件一定要放到與IHelloService.java相同的目錄下面,否則會(huì)出錯(cuò)。

    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>


    此時(shí)Web Service的服務(wù)端就開(kāi)發(fā)完成了。
    我們來(lái)看看客戶(hù)端的代碼吧,也很簡(jiǎn)單,如下:
     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

    以上代碼均無(wú)注釋?zhuān)驗(yàn)槎挤浅:?jiǎn)單,呵呵。如有不清楚的地方,請(qǐng)留言!

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

    評(píng)論

    # re: XFire完整入門(mén)教程  回復(fù)  更多評(píng)論   

    我是一名學(xué)生 近期做一個(gè)項(xiàng)目要用到這一方面的技術(shù)
    我也在xfire中用到了list 也寫(xiě)了 一個(gè)aegis.xml 但還有個(gè)錯(cuò)誤 ,請(qǐng)幫忙看一下
    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 | 黯鄉(xiāng)魂

    # re: XFire完整入門(mén)教程  回復(fù)  更多評(píng)論   

    unspecified component type for parameter 0

    也就是根節(jié)點(diǎn)類(lèi)型沒(méi)有指定
    2009-07-20 16:08 | 々上善若水々

    # re: XFire完整入門(mén)教程  回復(fù)  更多評(píng)論   

    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
    這個(gè)錯(cuò)誤
    2009-12-06 18:26 | wxk

    # re: XFire完整入門(mén)教程[未登錄](méi)  回復(fù)  更多評(píng)論   

    如果是兩個(gè)工程的話(huà),傳對(duì)象有問(wèn)題啊
    2009-12-21 16:50 | zzy

    # re: XFire完整入門(mén)教程  回復(fù)  更多評(píng)論   

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

    # re: XFire完整入門(mén)教程  回復(fù)  更多評(píng)論   

    有沒(méi)有注解返回List 的例子,發(fā)布出來(lái)看看唄
    2012-09-06 10:42 | 齊中飛
    主站蜘蛛池模板: 成人性生交大片免费看无遮挡| 免费在线观看日韩| 日韩亚洲国产综合久久久| 久久综合日韩亚洲精品色| 亚洲熟妇AV日韩熟妇在线| 一区二区三区免费电影| 蜜臀98精品国产免费观看| 免费A级毛片无码久久版| 亚洲最大福利视频网站| 精品在线免费视频| 67pao强力打造高清免费| 日韩精品亚洲专区在线观看| 亚洲精品福利网泷泽萝拉| 九一在线完整视频免费观看| 亚洲三级高清免费| 久久久久亚洲AV综合波多野结衣 | 国产亚洲综合成人91精品| 亚洲精品国产国语| 成人精品一区二区三区不卡免费看| 在线观看免费宅男视频| 亚洲AV本道一区二区三区四区 | 亚洲色最新高清av网站| 免费一级毛片在线播放视频| 又大又粗又爽a级毛片免费看| 亚洲成人网在线播放| 中文字幕不卡免费视频| 精品国产免费观看一区| 97久久精品亚洲中文字幕无码| 午夜免费国产体验区免费的| 成人黄动漫画免费网站视频| 亚洲一区二区在线视频| 国产vA免费精品高清在线观看| 成人免费视频试看120秒| 亚洲伊人久久大香线蕉苏妲己| 一级午夜a毛片免费视频| 麻豆国产入口在线观看免费| 亚洲婷婷综合色高清在线| 你懂的免费在线观看| 亚洲国模精品一区| 亚洲av永久中文无码精品综合 | jizzjizz亚洲日本少妇|