CXF学习(4) 处理无法自动转换的复合数据类型
只贴出服务端代码
1.Service接口类
package com.test.hello; import java.util.Map; import javax.jws.WebService;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import com.test.util.MineAdapter; @WebService
public interface HelloWorld {
// public void sayHello();
//cxf 不能处理 map 类型,于是我们采用MineAdapter.class进行处理
public @XmlJavaTypeAdapter(MineAdapter.class) Map<String,Cat> getMap();
}
2.服务实现类
package com.test.hello; import java.util.HashMap;
import java.util.Map; import javax.jws.WebService; @WebService(endpointInterface="com.test.hello.HelloWorld",serviceName="HelloWorldWS")
public class HelloWorldImpl implements HelloWorld{ private static Map<String,Cat> map;
static {
map = new HashMap<String, Cat>();
map.put("tomcat", new Cat());
map.put("garfield", new Cat());
} public Map<String,Cat> getMap() {
return map;
} }
Cat类
package com.test.hello; public class Cat {
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}
StringCat
package com.test.util; import java.util.ArrayList;
import java.util.List; import com.test.hello.Cat; public class StringCat { public static class Entry {
private String key;
private Cat value;
public Entry(String key, Cat value) {
this.key=key;
this.value=value;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public Cat getValue() {
return value;
}
public void setValue(Cat value) {
this.value = value;
}
}
private List<Entry> entries = new ArrayList<StringCat.Entry>();
public List<Entry> getEntries() {
return entries;
}
public void setEntries(List<Entry> entries) {
this.entries = entries;
}
@Override
public String toString() {
StringBuilder str = null;
for (Entry entry : entries) {
str.append(entry.getKey() +" : "+entry.getValue());
}
return str.toString();
}
}
这是重点,适配器类
package com.test.util; import java.util.HashMap;
import java.util.Map; import javax.xml.bind.annotation.adapters.XmlAdapter; import com.test.hello.Cat;
import com.test.util.StringCat.Entry; //改转换器就负责完成StringCat与Map的相互转换
public class MineAdapter extends XmlAdapter<StringCat, Map<String,Cat>>{ @Override
public Map unmarshal(StringCat strngCat) throws Exception {
Map result = new HashMap();
for(Entry entry : strngCat.getEntries()){
result.put(entry.getKey(),entry.getValue());
} return result;
} @Override
public StringCat marshal(Map<String,Cat> map) throws Exception {
StringCat stringCat = new StringCat();
for (String key : map.keySet()) {
stringCat.getEntries().add(new Entry(key,map.get(key)));
}
return stringCat;
}
}
最后是运行类
package com.test.hello; import javax.xml.ws.Endpoint; public class ServerMain {
public static void main(String[] args) {
HelloWorld helloWorldImpl = new HelloWorldImpl();
Endpoint.publish("http://localhost:1234/ws", helloWorldImpl);
System.out.println("webservice 暴露成功");
}
}
CXF学习(4) 处理无法自动转换的复合数据类型的更多相关文章
- 建议2:注意Javascript数据类型的特殊性---(2)慎用JavaScript类型自动转换
在JavaScript中能够自动转换变量的数据类型,这种转换是一种隐性行为.在自动转换数据类型时,JavaScript一般遵循:如果某个类型的值被用于需要其它类型的值的环境中,JavaScript就自 ...
- 漫长的旅途--C++primer学习-命名空间以及类的自动转换和强制转换
C++用名称空间来控制名称的作用域: 1不同命名空间的同名变量可以同时存在,不会发生冲突 2命名空间不能出现在代码块中 3我们用作用域运算符::,使用空间名来限定名称,最常用的std::cout 4u ...
- struts2各个功能详解(1)----参数自动封装和类型自动转换
struts2里面的各个功能,现在确实都不清楚,完全属于新学! 通过前面的例子,有时就会疑问,这些jsp中的数据信息是怎么传送给action的?例如: <form action = " ...
- 开源|如何使用CNN将视频从2D到3D进行自动转换(附源代码)
http://www.sohu.com/a/128924237_642762 全球人工智能 文章来源:GitHub 作者:Eric Junyuan Xie 它是如何运行的? 在运行代码之前,请先根据官 ...
- java基本类型自动转换
具体自动提升类型如上图所示.其中long->float的转换一开始让我感觉有点问题,因为long是64位的,而float却是32位的. 遂找寻答案,参考博客java中long到float的自动转 ...
- SENet(Squeeze-and-Excitation Networks)算法笔记---通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征
Momenta详解ImageNet 2017夺冠架构SENet 转自机器之心专栏 作者:胡杰 本届 CVPR 2017大会上出现了很多值得关注的精彩论文,国内自动驾驶创业公司 Momenta 联合机器 ...
- SpringBoot源码学习系列之SpringMVC自动配置
目录 1.ContentNegotiatingViewResolver 2.静态资源 3.自动注册 Converter, GenericConverter, and Formatter beans. ...
- 3_PHP表达式_5_数据类型转换_类型自动转换
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. PHP类型转换分为类型自动转换和类型强制转换. 1.布尔型数据参与算数运算时,TRUE被转换为整数1,FALSE被 ...
- Struts2 OGNL 自动转换Date类型的一些注意事项
Strut2 有比较完善的使用OGNL的jsp标签自动转化为对应的后台对象的功能. 这里java.util.Date的自动转化有一些需要注意的地方(局部转换): 1.必须要在struts的xml文件中 ...
随机推荐
- Github Bash
第一步生成密钥:ssh-keygen -C 'your@email.address' 第二步验证结果:ssh -T git@github.com 第三步克隆:git clone https://git ...
- ffmpeg解码视频流
//初始化.注册编解码器 avcodec_init(); av_register_all(); avformat_network_init(); //选取测试文件 char* FileName = & ...
- SSRS报表参数设置
一.日期时间类型的参数注意事项: 关于数据类型的选择:(只有数据类型设置为日期/时间格式,在查询的时候才会显示日期控件,提示信息一般改成汉字) 指定默认值:指定开始日期为前10天,
- 【leetcode】Merge Intervals
Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example,Given ...
- emoji表情初探
2015年12月28日 14:24:51 星期一 首先注意的地方: 1. emoji是需要操作系统支持的, 例如: ios更新时, 会在升级日志里说明, 增加了对多少个emoji图标的支持. 原理上是 ...
- TokuDB 引擎安装测试
背景: TokuDB引擎是有Tokutek开发的一个数据库存储引擎,在设计之初便引入了独特的索引算法,在其官网测试的文章中看到TokuDB性能比InnoDB高出很多. MySQL是一个插件式的数据库, ...
- ffmpeg-20160718-git-bin.7z
官方 2016-07-18 发布的bin,彻底不支持 xp. ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] + ...
- Linux下WebSphereV8.5.5.0 安装详细过程
自WAS8以后安装包不再区别OS,一份介质可以安装到多个平台.只针对Installation Manager 进行了操作系统的区分 ,Websphere产品介质必须通过专门的工具Install Man ...
- mybatis 获取自增ID
在Mybatis Mapper文件中添加属性“useGeneratedKeys”和“keyProperty”,其中keyProperty是Java对象的属性名,而不是表格的字段名. <inser ...
- 关于java中Double类型的运算精度问题
标题 在Java中实现浮点数的精确计算 AYellow(原作) 修改 关键字 Java 浮点数 精确计算 问题的提出:如果我们编译运行下面这个程序会看到什么?publi ...