Web Service学习之六:CXF解决无法处理的数据类型
CXF不能够处理像Map复杂的数据类型,需要单独转换处理。
总体思路:创建一个转换器和一个对应的可以处理的数据结构类型,将不能处理的类型转换成可以处理的类型:
步骤:
一、创建一个可以处理的类型 举例:要转换Map<String,User>
package ws; import java.util.List; public class StringUser
{
public static class Entry
{
private String key;
private User value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public User getValue() {
return value;
}
public void setValue(User value) {
this.value = value;
}
}
private List<Entry> values;
public List<Entry> getValues() {
return values;
}
public void setValues(List<Entry> values) {
this.values = values;
} }
二、创建一个转换器,需要继承抽象类XmlAdapter<ValueType,BoundType>,其中ValueType是可以处理的类型 BoundType是不能处理的类型
package ws; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import javax.xml.bind.annotation.adapters.XmlAdapter; import ws.StringUser.Entry; /**
* 该转换器负责将StringUser 与 Map<String, User>进行转换
* 其中第一个参数StringUser是CXF可以处理的类型
* 第二个参数 Map<String, User> 是CXF不能处理的类型*/
public class FKXmlAdapter extends XmlAdapter<StringUser, Map<String, User>>
{ /**
* 将StringUser 转换成 Map<String, User>
*/
@Override
public Map<String, User> unmarshal(StringUser v) throws Exception
{
Map<String, User> map = new HashMap<String, User>();
for (Entry u : v.getValues())
{
map.put(u.getKey(), u.getValue());
}
return map;
} /**
* 将 Map<String, User> 转换成 StringUser
*/
@Override
public StringUser marshal(Map<String, User> v) throws Exception
{
StringUser u = new StringUser();
List<Entry> list = new ArrayList<Entry>(); for (String key : v.keySet())
{
Entry e = new Entry();
e.setKey(key);
e.setValue(v.get(key));
list.add(e);
} u.setValues(list);
return u;
} }
三、Web Service中定义该方法 需要使用注解 @XmlJavaTypeAdapter(value=FKXmlAdapter.class)注明返回值对应的处理转换器
@WebMethod(operationName="getSecUsers")
@WebResult(name="returninfo")
public @XmlJavaTypeAdapter(value=FKXmlAdapter.class) Map<String, User> getSecUsers();
四、测试如下 查看WSDL文档 返回数据类型均为可解析的类型

服务端实现类:
package ws.impl; import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import javax.jws.WebService; import ws.HelloWordI;
import ws.User; /**
* 类说明
* @author wangjunyu
* @createDate 2016-7-10 上午10:59:27
* @version V1.0
*/
@WebService(endpointInterface="ws.HelloWordI",serviceName="HelloWordImpl")
public class HelloWordImpl implements HelloWordI
{ public String sayHi(String name)
{
return name+",你好,当前时间是:"+new Date();
} public List<User> getUsers(User user)
{
System.out.println("测试:"+user.getName());
List<User> list = new ArrayList<User>();
User u1 = new User();
u1.setId("1");
u1.setName("小明");
list.add(u1);
User u2 = new User();
u2.setId("2");
u2.setName("雪梅");
list.add(u2);
return list;
} @Override
public Map<String, User> getSecUsers()
{
Map<String,User> map = new HashMap<String,User>();
User u1 = new User();
u1.setId("1");
u1.setName("小明");
map.put("一", u1); User u2 = new User();
u2.setId("2");
u2.setName("小红");
map.put("二", u2); return map;
} }
package ws;
import javax.xml.ws.Endpoint;
import ws.impl.HelloWordImpl;
public class ServerMain {
public static void main(String[] args)
{
HelloWordI hw = new HelloWordImpl();
Endpoint.publish("http://192.168.0.104/test", hw);
System.out.println("WebService 暴露成功!");
}
}
客户端打印:
package ws;
import java.util.List;
import ws.impl.HelloWordImpl;
public class ClientMain {
/**
* @param args
*/
public static void main(String[] args)
{
StringUser u = hw.getSecUsers();
System.out.println(u.getValues().get(0).getValue().getName());
System.out.println(u.getValues().get(1).getValue().getName());
}
}
Web Service学习之六:CXF解决无法处理的数据类型的更多相关文章
- Web Service学习-CXF开发Web Service实例demo(一)
Web Service是什么? Web Service不是框架.更甚至不是一种技术. 而是一种跨平台,跨语言的规范 Web Service解决什么问题: 为了解决不同平台,不同语言所编写的应用之间怎样 ...
- Web Service学习笔记:动态调用WebService
原文:Web Service学习笔记:动态调用WebService 多数时候我们通过 "添加 Web 引用..." 创建客户端代理类的方式调用WebService,但在某些情况下我 ...
- Web Service学习-CXF开发Web Service的权限控制(二)
Web Service怎样进行权限控制? 解决思路:server端要求input消息总是携带实username.password信息,假设没实username和password信息.直接拒绝调用 解决 ...
- Web Service学习之一:Web Service原理
一.定义 Web Service 不是框架也不是技术 而是解决远程调用.跨平台调用.跨语言调用问题的一种规范. 二.应用1.同一个公司新.旧系统的整合:比如CRM系统与OA.客服系统相互调用2.不同公 ...
- Java Restful Web Service 学习指南
Restful是一种架构style,目前常说的有restful web service, resultful http.现在热搜榜的微服务,大多数会采用Restful方式. JAX-RS 作为一个Re ...
- Web Service学习之二:Web Service(for JAVA)的几种框架
在讲Web Service开发服务时,需要介绍一个目前开发Web Service的几个框架,分别为Axis,axis2,Xfire,CXF以及JWS(也就是前面所述的JAX-WS,这是Java6发布所 ...
- Web Service学习笔记(webservice、soap、wsdl、jws详细分析)
Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...
- Web Service学习文旦下载
Web Service的学习暂且告一段落,因为毕竟只是对它作简要了解,至于其原理什么并不打算涉及. 在这里我提供下我之前文档的整理版本: http://kuai.xunlei.com/d/YlzvAG ...
- Web Service学习笔记
Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...
随机推荐
- hibernate--lazy(懒加载)属性
关联映射文件中<class>标签中的lazy(懒加载)属性 Lazy(懒加载):只有在正真使用该对象时,才会创建这个对象 Hibernate中的lazy(懒加载):只有我们在正真使用时,它 ...
- Word Properties <?ref:xdo000X?> - BIP Deskotop 11.119.00.0 (32-bit) with Office 2013 (32-bit) on Win 7 64-bit
BIP Deskotop 11.119.00.0 (32-bit)Office 2013 (32-bit)Win 7 (64-bit)The current certification matrix ...
- HDU 4948
题目大义: 给一张图,任意两点间有单向边,找出一种方案,使得每个新入队的点与队中的点距离<=2. 题解: 贪心,从最后入队点开始反向插入,每次找出最大入度的点入队. 只需证明最大入度点A与所有未 ...
- Linux shell下批量创建缩略图
一.背景 今天,突然发现手机客户端上的最新新闻缩略图都不显示了,上服务器上看了看, 发现新的新闻图片根本没有生成缩略图. 这套新闻发布系统是很老的程序了,查了一下,问题的原因是不支持png格式的图片, ...
- Android异常之 unable to write jarlist cache file
异常: android开发调试时候不能运行,出现 unable to write jarlist cache file 错误. 解决方法: 1.找到appcompt文件夹如下的位置.
- [源代码] - C#代码搜索器 - 续
在前文 [源代码] - C#代码搜索器 中我开发了一个代码搜索器. 我对其做的最后改动是将索引保存到磁盘中, 以备今后使用. 如今, 我在工作中又接到一项新任务: 有一个大项目, 其中10个负责数据访 ...
- 【iOS-Cocos2d游戏开发之四】独自收集Cocos2d提供的字体!共57种(有对照的字体图)
本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-c ...
- Liunx系统学习一,liunx系统的目录结构及含义
LIUNX系统目录结构: “/” ===>这是linux文件系统的入口,也是整个linux文件系统的根目录,linux不同于windows,没有所谓的C,D,E盘,整个liunx只有一个根分区 ...
- 是时候学习Android分屏开发了
今年Google发布了Android N,Android N新增了不少功能,最受关注的自然就是分屏了. 这一功能对国内的很多手机用户并不陌生,其实很多第三方系统早已经实现了这一功能,如EMUI,Fly ...
- K2 blackpearl 流程开发(二)
转:http://blog.csdn.net/gxiangzi/article/details/8444590 本来想一篇文章把流程开发介绍完的,后来发现实在是太多了,只好分成两部分了.上一篇很简单的 ...