隨筆-95  評論-31  文章-10  trackbacks-0
          拋開MyEclipse,根據servlet規范,java_web應用必須采用固定的目錄結構。
          即:項目名/WEB-INF/classes
                項目名/WEB-INF/lib
                項目名/WEB-INF/web.xml
          xfire部署webservice需要在classes下面建立目錄META-INF/xfire/services.xml
           1<?xml version="1.0" encoding="UTF-8"?>
           2<beans xmlns="http://xfire.codehaus.org/config/1.0">
           3<service>
           4  <name>TeacherContent</name>
           5  <serviceClass>services.ITeacherManager</serviceClass>
           6  <implementationClass>services.TeacherManager</implementationClass>
           7  <scope>request</scope>
           8</service>
           9
          10</beans>
          里面的參數name、serviceClass、implementationClass、scope一看就明白

          重點:寫好服務端代碼后,只要里面的方法返回值不是map,那么客戶端代碼就統統可以用以下代碼調用獲得返回值
          1//假設存在一個接口為IUser
          2String ulr="webservice地址";
          3Service service=new ObjectServiceFactory().create(IUser.class);
          4IUser user = (IUser)new XFireProxyFactory().create(service,url);
          5//調用
          6user.方法();

          如果服務端接口代碼里的某個方法返回值為map,那么需要在該類同一目錄下建立名字為接口.aegis.xml 名字必須和該接口名字一致只是多了.aegis.xml后綴名文件
          內容如下(里面均為自己測試成功的內容):
           1<?xml version="1.0" encoding="UTF-8"?>
           2<mappings>
           3<mapping>
           4    <method name="getGradesMap">
           5     <return-type componentType="entity.Grades"/>
           6    </method>
           7    <method name="getStudentMap">
           8    <return-type componentType="entity.Student"/>
           9    </method>
          10    <method name="setMaps">
          11    <parameter index="0" componentType="entity.Student"/>
          12    <parameter index="1" componentType="entity.Grades"/>
          13    <return-type keyType="entity.Student" componentType="entity.Grades"/>
          14    </method>
          15</mapping>
          16</mappings>
          17
          18
          method的name屬性為該返回值為map的接口方法名字
          return-type的componentType表示返回類型為復雜類型(就是個自定義對象)
          如果返回值為這種Map<Integer,Student>那么就直接寫一個componentType屬性即可
          如果返回值為這種Map<Student,Teacher>那么要寫成<return-type keyType="包名.Student" componentType="包名.Teacher"/>
          如果該方法有參數,那么parameter index="0"表示第一個參數 依次類推

          總之:如果服務端的接口方法有返回值且是map,那么一定要寫一個接口.aegis.xml文件否則客戶端無法調用。
          以上測試沒有使用JAXB,如果根據wsdl文件生成客戶端代碼,那么需要使用JAXB的API進行調用服務端的webservice。
          在MyEclipse中可以根據wsdl生成客戶端代碼,流程如下:
          選中建好的客戶端webservice項目-點擊new web service-輸入webservice地址 一步一步操作即可生成客戶端代碼。
          這種方法與上面的方式不同點在于,自定義對象的賦值,全部變為JAXBElement(new QName("命名空間","屬性名字"),基本屬性.class,"屬性值");
          例如通過wsdl生成客戶端后一個自定義對象里面包含如下屬性:
          1    @XmlElementRef(name = "address", namespace = "http://service.patientservice.huahai.com", type = JAXBElement.class)
          2    protected JAXBElement<String> address;
          JAXBElement(new QName("命名空間","屬性名字"),基本屬性.class,"屬性值");
          命名空間=http://service.patientservice.huahai.com
          屬性名字=address
          基本屬性=String
          屬性值=澳大利亞
          即和上面一一對應

          xfire簡單用法就上述這么多,明天補上與spring集成的代碼以及關于前處理后處理(即handler)以及異常處理的代碼





          posted on 2011-05-30 17:48 朔望魔刃 閱讀(558) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2011年5月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          娛樂博客

          牛博

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 久治县| 兰西县| 老河口市| 松阳县| 独山县| 洪雅县| 梧州市| 札达县| 永和县| 宁蒗| 柘荣县| 通山县| 岳普湖县| 鄱阳县| 天柱县| 和政县| 绥德县| 墨竹工卡县| 邵阳市| 鄱阳县| 徐州市| 丹阳市| 武功县| 九龙坡区| 正阳县| 平湖市| 娱乐| 六枝特区| 卫辉市| 天津市| 自治县| 曲沃县| 隆回县| 那曲县| 遂昌县| 将乐县| 雷波县| 图木舒克市| 兴宁市| 武山县| 迁安市|