我的漫漫程序之旅

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

          XFire完整入門教程

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

          實(shí)例中包括三個(gè)情況,我想基本上可以概括所有的需求,或者自己稍加擴(kuò)展即可。先來看看我們的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的傳遞。

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

          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è)類的代碼如下:
           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,編譯時(shí)會(huì)自動(dòng)編譯到classes的相應(yīng)目錄下面。

          4、因?yàn)槲覀冇玫搅薒ist等集合類型,所以需要定義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ù)端就開發(fā)完成了。
          我們來看看客戶端的代碼吧,也很簡(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

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

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

          評(píng)論

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

          我是一名學(xué)生 近期做一個(gè)項(xiàng)目要用到這一方面的技術(shù)
          我也在xfire中用到了list 也寫了 一個(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完整入門教程  回復(fù)  更多評(píng)論   

          unspecified component type for parameter 0

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

          # re: XFire完整入門教程  回復(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完整入門教程[未登錄]  回復(fù)  更多評(píng)論   

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

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

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

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

          有沒有注解返回List 的例子,發(fā)布出來看看唄
          2012-09-06 10:42 | 齊中飛
          主站蜘蛛池模板: 南汇区| 湾仔区| 准格尔旗| 紫云| 且末县| 贵定县| 襄城县| 湘西| 宜黄县| 镇宁| 杭州市| 老河口市| 彩票| 高淳县| 元氏县| 赤壁市| 榕江县| 海口市| 合山市| 嵊泗县| 宿迁市| 马公市| 金阳县| 娄底市| 建湖县| 堆龙德庆县| 石林| 资阳市| 无为县| 宁河县| 上思县| 张家口市| 内丘县| 星子县| 双峰县| 横山县| 庄河市| 鱼台县| 惠州市| 新营市| 虹口区|