posts - 0, comments - 77, trackbacks - 0, articles - 356
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          myeclipse下用XFire開發webservice

          Posted on 2008-03-08 17:07 semovy 閱讀(5717) 評論(8)  編輯  收藏 所屬分類: WebService
          myeclipse下用XFire開發webservice

          1.new->other->MyEcplise->Web Services->Web Services


          自動在classpath:META-INF/xfire

          下建立services.xml:

          <?xml version="1.0" encoding="UTF-8"?>
          <beans xmlns="http://xfire.codehaus.org/config/1.0">

           <service>
            <name>UserService</name>
            <serviceClass>com.semovy.service.IUserService</serviceClass>
            <implementationClass>
             com.semovy.service.impl.UserServiceImpl
            </implementationClass>
            <style>wrapped</style>
            <use>literal</use>
            <scope>application</scope>
           </service>
          </beans>

          2.在WEB-INF下的web.xml下添加servlet:

          <?xml version="1.0" encoding="UTF-8"?>
          <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
            <servlet>
              <servlet-name>XFireServlet</servlet-name>
              <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
              <load-on-startup>0</load-on-startup>
            </servlet>
            <servlet-mapping>
              <servlet-name>XFireServlet</servlet-name>
              <url-pattern>/services/*</url-pattern>
            </servlet-mapping>
          </web-app>

           3.com.semovy.beans下建立測試類User

          User.java

          package com.semovy.beans;

          public class User {

           private String id = "";

           private String name = "";

           private String remark = "";

           public User() {
           }

           public User(String id, String name, String remark) {
            this.id = id;
            this.name = name;
            this.remark = remark;
           }

           public String getId() {
            return id;
           }

           public void setId(String id) {
            this.id = id;
           }

           public String getName() {
            return name;
           }

           public void setName(String name) {
            this.name = name;
           }

           public String getRemark() {
            return remark;
           }

           public void setRemark(String remark) {
            this.remark = remark;
           }

           public String toString() {
            return "Id: " + id + " , name: " + name + " , remark: " + remark + "\n";
           }

           @Override
           public int hashCode() {
            final int PRIME = 31;
            int result = 1;
            result = PRIME * result + ((id == null) ? 0 : id.hashCode());
            result = PRIME * result + ((name == null) ? 0 : name.hashCode());
            result = PRIME * result + ((remark == null) ? 0 : remark.hashCode());
            return result;
           }

           @Override
           public boolean equals(Object obj) {
            if (this == obj)
             return true;
            if (obj == null)
             return false;
            if (getClass() != obj.getClass())
             return false;
            final User other = (User) obj;
            if (id == null) {
             if (other.id != null)
              return false;
            } else if (!id.equals(other.id))
             return false;
            if (name == null) {
             if (other.name != null)
              return false;
            } else if (!name.equals(other.name))
             return false;
            if (remark == null) {
             if (other.remark != null)
              return false;
            } else if (!remark.equals(other.remark))
             return false;
            return true;
           }
           
          }


          在com.semovy.service包下建立服務接口IUserService

          IUserService.java


          package com.semovy.service;

          import java.util.List;

          import com.semovy.beans.User;

          public interface IUserService {
           public abstract String getStringTest(String msg1,String msg2);
           public abstract List getStringList();
           public abstract List getUsersList();
           public abstract User[] getUsersArray();
           public abstract String[] getUsersStringArray();
           public abstract User getUserById(String id);
           public abstract void addUser(User user);
          }
          這在接口包下建立.與服務接口相同名稱的IUserService.aegis.xml


          <?xml version="1.0" encoding="UTF-8"?>
          <mappings>
            <mapping><!-- 返回類型是String ,String[]的,參數是String類型的方法不用定義 -->
              <method name="getStringList">
                 <return-type  componentType="java.lang.String" /><!-- 返回類型對應集合Collection,數組中的元素的類型 -->
              </method>
              <method name="getUsersList">
               <return-type componentType="com.semovy.beans.User"/>
              </method>
              <method name="getUsersArray">
               <return-type componentType="com.semovy.beans.User"/>
              </method>
              <method name="getUserById">
               <return-type componentType="com.semovy.beans.User"/>
              </method> 
             </mapping>
          </mappings>

          在com.semovy.service.impl包下

          UserServiceImpl.java

          package com.semovy.service.impl;

          import java.util.ArrayList;
          import java.util.Iterator;
          import java.util.List;

          import com.semovy.beans.User;
          import com.semovy.service.IUserService;

          /**
           *
           * @author semovy
           * @version 1.0
           * the user service class implemente the IUserService implementation for testing
           */
          public class UserServiceImpl implements IUserService {

           private List<User> users;
           public UserServiceImpl()
           {
            users = new ArrayList<User>();
            users.add(new User("1","semovy","semovy's remark"));
            users.add(new User("2","韋善茂","韋善茂的備注"));
            users.add(new User("3","superman_wshm","superman_wshm's remark"));
           }
           /**
            * @param msg1 the string msg1
            * @param msg2 the string msg2
            *
            */
           public String getStringTest(String msg1,String msg2) {

            return "Hello :" + msg1 + " : "  + msg2;
           }
           /**
            * @return list the list Collection with some String element
            */
           public List getStringList()
           {
            List<String> list = new ArrayList<String>();
            list.add("string1");
            list.add("字符串2");
            list.add("字符串3");
            list.add("string4");
            return list;
           }
           /**
            * @return all users
            */
           public List getUsersList() {
            return users;
           }
           /**
            * @param id the id of user
            * @return the user by specifical id
            */
           public User getUserById(String id) {
            Iterator it = users.iterator();
            while(it.hasNext())
            {
             User user = (User)it.next();
             if(user.getId().equals(id))
             {
              return user;
             }
            }
            return null;
           }
           /**
            * @return return all users of array form with type User.
            */
           public User[] getUsersArray() {
            
            return users.toArray(new User[]{new User()});
           }
           /**
            * @return return all users of array form with type String
            */
           public String[] getUsersStringArray() {
            
            User[] users_arr = (User[])users.toArray(new User[]{});
            String[] tempUser_arr = new String[users_arr.length];
            for(int i=0;i<users_arr.length;i++)
            {
             tempUser_arr[i] = users_arr[i].toString();
             System.out.println(tempUser_arr[i]);
            }
            return tempUser_arr;
           }
           public void addUser(User user) {
            users.add(user);
           }
           
          }


          4.在com.semovy.test包下
          建立客戶調用測試類.UserServiceWSTest .java

          package com.semovy.test;

          import java.net.MalformedURLException;
          import java.util.Iterator;
          import java.util.List;

          import org.codehaus.xfire.XFireFactory;
          import org.codehaus.xfire.client.XFireProxyFactory;
          import org.codehaus.xfire.service.Service;
          import org.codehaus.xfire.service.binding.ObjectServiceFactory;

          import com.semovy.beans.User;
          import com.semovy.service.IUserService;

          public class UserServiceWSTest {
           public static void main(String[] args) {
            // 創建服務實例
            Service srvcModel = new ObjectServiceFactory()
              .create(IUserService.class);
            XFireProxyFactory factory = // 創建代理工廠實例
            new XFireProxyFactory(XFireFactory.newInstance().getXFire());
            String helloWorldURL = "http://localhost:8000/webServiceTest/services/UserService";
            IUserService srvc = null;
            try { // 獲取指定位置的web服務對象
             srvc = (IUserService) factory.create(srvcModel, helloWorldURL);
            } catch (MalformedURLException e) {
             e.printStackTrace();
            }
            
            //調用只返回String的方法.在接口名.aegis.xml中不用設置方法名
            String result = srvc.getStringTest("msg1", "msg2");
            System.out.println(result);
            //調用返回String[]數組的方法,在接口名.aegis.xml中不用設置方法名.
            String[] userInfo_str_arr = srvc.getUsersStringArray();
            for(String aUserInfo:userInfo_str_arr)
             System.out.println(aUserInfo);
            //調用返回List類型值的方法,需要定義,List容器中的元素類型為String
            List strList = srvc.getStringList();
            Iterator str_it = strList.iterator();
            while (str_it.hasNext()) {
             String str = (String) str_it.next();
             System.out.println(str);
            }
            //調用返回User[]數組
            User[] user_arr = srvc.getUsersArray();
            for (User a_user : user_arr)
             System.out.print(a_user.toString());
            
            //調用返回User類型值的方法.方法參數是字符串.
            User a_user = srvc.getUserById("2");
            System.out.print(a_user.toString());
            
            //調用參數為User的方法,沒有返回值,不用配置方法
            srvc.addUser(new User("4","添加的名稱","添加的備注"));
            
            //調用返回List類型值的方法,需要定義,List容器中的元素類型為User
            List userList = srvc.getUsersList();
            Iterator userList_it = userList.iterator();
            while (userList_it.hasNext()) {
             User user = (User) userList_it.next();
             System.out.print(user.toString());
            }
           }

          }
          5.結果:
          Hello :msg1 : msg2
          Id: 1 , name: semovy , remark: semovy's remark
          Id: 2 , name: 韋善茂 , remark: 韋善茂的備注
          Id: 3 , name: superman_wshm , remark: superman_wshm's remark
          string1
          字符串2
          字符串3
          string4
          Id: 1 , name: semovy , remark: semovy's remark
          Id: 2 , name: 韋善茂 , remark: 韋善茂的備注
          Id: 3 , name: superman_wshm , remark: superman_wshm's remark
          Id: 2 , name: 韋善茂 , remark: 韋善茂的備注
          Id: 1 , name: semovy , remark: semovy's remark
          Id: 2 , name: 韋善茂 , remark: 韋善茂的備注
          Id: 3 , name: superman_wshm , remark: superman_wshm's remark
          Id: 4 , name: 添加的名稱 , remark: 添加的備注


          評論

          # re: myeclipse下用XFire開發webservice[未登錄]  回復  更多評論   

          2008-04-07 13:20 by dd
          測試不是遠程調,如果是遠程的怎么Service srvcModel = new ObjectServiceFactory()
          .create(IUserService.class);
          如果調用的工程沒有IUserService.class怎么辦?

          # re: myeclipse下用XFire開發webservice  回復  更多評論   

          2008-06-04 14:58 by zhouyu
          我先建User類,然后用myeclipse自動生成客戶端時,就會把User類里我自已寫
          的代碼全給換了,參數全是JAXBElement<String>類型的,于是我在客戶端傳入
          JAXBElement<String>類型的參數,結果在服務器那邊用user.getName()取值為空,user.getName().getValue()也沒值,但user這個對像是不為空的,這是為什么呢????
          我郵箱maosha8@163.com
          謝謝了幫我解決下吧

          # re: myeclipse下用XFire開發webservice[未登錄]  回復  更多評論   

          2010-01-27 21:10 by ccc
          非常感謝??!終于可以調用Webservice返回List,不為空了,IUserService.aegis.xml這個文件至關重要

          # re: myeclipse下用XFire開發webservice  回復  更多評論   

          2010-05-13 01:37 by xc
          您好,我也碰到和樓上一樣的問題,myeclipse自動生成客戶端時把自定義類里的類型都變成JAXBElement類型,我客戶端傳入JAXBElement類型,可在服務器上user.getName()為空,user.getName().getValue()就報錯,2010-5-12 19:16:52 org.codehaus.xfire.handler.DefaultFaultHandler invoke
          嚴重: Fault occurred!
          能不能再幫忙回答一下!非常感謝!
          zephyr.xu@gmail.com

          # re: myeclipse下用XFire開發webservice  回復  更多評論   

          2011-07-29 10:24 by 劍天
          @dd
          如果在別的地方掉,那么需要創建一個與這個借口一樣的接口,才能調用,明白么?

          # re: myeclipse下用XFire開發webservice  回復  更多評論   

          2011-12-19 07:16 by 游客
          @ccc
          怎么弄的???我的一直為空

          # re: myeclipse下用XFire開發webservice  回復  更多評論   

          2011-12-19 07:32 by 游客
          @zhouyu
          你好,這個問題你解決了嗎?已經困擾我一晚上了
          如果解決請幫忙回答一下
          makeboluo000@163.com
          謝謝

          # re: myeclipse下用XFire開發webservice  回復  更多評論   

          2011-12-19 15:57 by 游客
          你是用遠程還是在本地同一個工程文件中?@ccc
          主站蜘蛛池模板: 辉县市| 黄山市| 义马市| 上饶县| 定兴县| 沅江市| 雷波县| 水富县| 南江县| 台江县| 珠海市| 安义县| 金湖县| 图木舒克市| 揭西县| 井冈山市| 同江市| 鹿泉市| 连平县| 奈曼旗| 册亨县| 迁西县| 繁昌县| 钟祥市| 师宗县| 泾阳县| 卓尼县| 平邑县| 西吉县| 桓仁| 关岭| 城步| 乌什县| 玉树县| 长子县| 白银市| 台南市| 县级市| 炎陵县| 南丰县| 浮梁县|