您的位置:首页 > 其它

cxf处理一些Map等复杂类型

2017-04-05 11:37 288 查看
原网页 http://blog.java1234.com/blog/articles/56.html
前面讲的一些都是简单类型,cxf都支持。但是有些复杂类型,cxf是不支持,比如常用的Map类型;

下面我们在前面的实例基础上在加一个方法,比如我们现在有个需求,获取所有用用户以及对应的每个用户所有角色信息;

服务器端:

HelloWorld接口加方法:
HelloWorldImpl实现类加方法实现:

然后我们启动Server类:发现报错:



这个报错信息说,不支持该类型;

这里我们有好几种解决方案,这里我们用最常用的一种,使用适配器,把cxf不能接受的类型通过适配器,转能接受的类型。

我们使用@XmlJavaTypeAdapter注解,加在接口定义上,完整接口代码如下:
这里参数需要一个实现了XmlAdapter类的适配器类;
这里的话XmlAdapter要加两个参数,XmlAdapter<ValueType,BoundType>

ValueType是cxf能接收的类型,这里我用了数组;

BoundType是cxf不能接受的类型,也就是我例子里的需求的Map类型;

这里大家会看到,还有一个MyRole自定义类型,key:value。我们搞成两个属性,具体实现如下:

OK 这样就行了。我们运行Server类,发布webservice接口:



然后就到了webservice客户端,我们用wsdl2java工具生成下最新代码,具体过程前面讲过,这里不重复讲:

生成代码如下:



我们修改下Client类:
运行下:



OK,这样就实现了复杂类型的调用;

完整代码:http://pan.baidu.com/s/1kTUseOZ
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: