隨筆-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

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          娛樂博客

          牛博

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 清水河县| 名山县| 仁寿县| 新平| 绥阳县| 安吉县| 汕尾市| 昔阳县| 神池县| 杭州市| 靖宇县| 庆云县| 乐平市| 宿迁市| 曲阳县| 屯门区| 南溪县| 湖口县| 和平区| 富平县| 蓬莱市| 泊头市| 汉川市| 双辽市| 陆川县| 邯郸市| 栖霞市| 聂荣县| 太康县| 开远市| 林西县| 长兴县| 丽江市| 泽普县| 奈曼旗| 延吉市| 金山区| 驻马店市| 孟州市| 吉首市| 高安市|