webservice学习之处理Map等CXF无法自动转化的类型
发布时间:2020-12-16 23:51:45 所属栏目:安全 来源:网络整理
导读:转自:http://blog.csdn.net/wlsyn/article/details/8756068 CXF形参、返回值 ? ? ? 1. 当形参和返回值的类型是String、基本数据类型是,CXF肯定可以轻松处理 ? ? ? ?2.当形参和返回值的类型是javabean式的复合类(就是普通的POJO实体类)、List集合、数组等
转自:http://blog.csdn.net/wlsyn/article/details/8756068
CXF形参、返回值
? ? ? 1. 当形参和返回值的类型是String、基本数据类型是,CXF肯定可以轻松处理
? ? ? ?2.当形参和返回值的类型是javabean式的复合类(就是普通的POJO实体类)、List集合、数组等复杂类型时, CXF也可以很好处理。
? ? ? ?3.还有一些像Map、非javabean式的复合类,CXF是处理不了的
如果遇到系统无法自动处理的类型,就需要程序员自行处理,方法是提供一个转化器,该转化器负责把CXF不能处理的类型,转化为CXF能够处理的类型,具体过程如下:
(1) 使用注解 @XmlJavaTypeAdapter(java自身的注解,可在jdkAPI文档中查到)修饰CXF无法自动处理的类型,使用该Annotation时,通过value属性指定一个转换器(自己定义)。
@XmlJavaTypeAdapter (value="MyXmlAdapter.class")?
(2) 实现自己定义的转化器,实现转化器时,需要开发一个CXF能够处理的类型。
1. 注解@XmlJavaTypeAdapter标识返回值为Map的接口
copy
copy
实现类保持不变:
copy
jdkAPI中定义如下,valuType是能够处理的类型,boundType是不能处理的类型:
转化的实质是将不能处理的类型,如Map,将其值取出,赋予另一个实体类,这个类模拟Map,保存他的值,这样便是可以进行相互转化。为此,需要定义一个Map的模拟类,这样Map的key和value都保存在Entry类中(Entry自行定义,名字也可以随便,只要符合命名规范就行),所有的Entry保存在List中,这样一个Map集合就转化成了MyStringMap类,MyStringMap自然也可以转化为Map类:
copy
avax.xml.bind.annotation.adapters
Class XmlAdapter<ValueType,BoundType>
3.部署项目到tomcat中,启动,如能访问到WSDL文件,WSDL发布成功。
4.使用命令生成客户端,具体方法见
博文。
5.测试客户端:
copy
结果如下: copy
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |