隨筆-95  評(píng)論-31  文章-10  trackbacks-0
          拋開(kāi)MyEclipse,根據(jù)servlet規(guī)范,java_web應(yīng)用必須采用固定的目錄結(jié)構(gòu)。
          即:項(xiàng)目名/WEB-INF/classes
                項(xiàng)目名/WEB-INF/lib
                項(xiàng)目名/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>
          里面的參數(shù)name、serviceClass、implementationClass、scope一看就明白

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

          如果服務(wù)端接口代碼里的某個(gè)方法返回值為map,那么需要在該類同一目錄下建立名字為接口.aegis.xml 名字必須和該接口名字一致只是多了.aegis.xml后綴名文件
          內(nèi)容如下(里面均為自己測(cè)試成功的內(nèi)容):
           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表示返回類型為復(fù)雜類型(就是個(gè)自定義對(duì)象)
          如果返回值為這種Map<Integer,Student>那么就直接寫一個(gè)componentType屬性即可
          如果返回值為這種Map<Student,Teacher>那么要寫成<return-type keyType="包名.Student" componentType="包名.Teacher"/>
          如果該方法有參數(shù),那么parameter index="0"表示第一個(gè)參數(shù) 依次類推

          總之:如果服務(wù)端的接口方法有返回值且是map,那么一定要寫一個(gè)接口.aegis.xml文件否則客戶端無(wú)法調(diào)用。
          以上測(cè)試沒(méi)有使用JAXB,如果根據(jù)wsdl文件生成客戶端代碼,那么需要使用JAXB的API進(jìn)行調(diào)用服務(wù)端的webservice。
          在MyEclipse中可以根據(jù)wsdl生成客戶端代碼,流程如下:
          選中建好的客戶端webservice項(xiàng)目-點(diǎn)擊new web service-輸入webservice地址 一步一步操作即可生成客戶端代碼。
          這種方法與上面的方式不同點(diǎn)在于,自定義對(duì)象的賦值,全部變?yōu)镴AXBElement(new QName("命名空間","屬性名字"),基本屬性.class,"屬性值");
          例如通過(guò)wsdl生成客戶端后一個(gè)自定義對(duì)象里面包含如下屬性:
          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
          屬性值=澳大利亞
          即和上面一一對(duì)應(yīng)

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





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

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 龙陵县| 陆良县| 东兰县| 晋城| 丽水市| 吴江市| 景德镇市| 浦县| 灵石县| 巫山县| 托里县| 石阡县| 常熟市| 澄江县| 余江县| 瓦房店市| 杭锦后旗| 武山县| 阿坝县| 泗阳县| 古浪县| 铁岭县| 炎陵县| 绩溪县| 祁阳县| 凤山市| 安岳县| 昌乐县| 崇左市| 上饶县| 神木县| 吴旗县| 恭城| 马公市| 万州区| 平潭县| 星座| 康保县| 布尔津县| 富蕴县| 大悟县|