xfire使用小结

xfire使用小结
抛开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
2 String ulr = " webservice地址 " ;
3 Service service = new  ObjectServiceFactory().create(IUser. class );
4 IUser user  =  (IUser) new  XFireProxyFactory().create(service,url);
5 // 调用
6 user.方法();

如果服务端接口代码里的某个方法返回值为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)以及异常处理的代码





你可能感兴趣的:(xfire使用小结)