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文件中 ...
随机推荐
- js之DOM和事件
DOM 查找 直接查找 var obj = document.getElementById('i1') 间接查找 文件内容操作: innerText 仅文本 innerHTML 全内容 value i ...
- js之序列化、eval和Date类用法
序列化 JSON.stringify() 将对象转换为字符串 JSON.parse() 将字符串转换为对象类型 示例 var jsonStr = '{"name":"le ...
- MY_FIRSH_MODULE
模块描述 将30个字节的内存空间模仿成设备文件.每次读写不超过30个字节. 模块加载成功之后,需建立设备文件 mknod /dev/mydev c 231 0 模块代码 #include <li ...
- docker open files的设置
- DevStack安装时报“download of get-pip.py failed”
ref from : http://www.voidcn.com/blog/ldli8979/article/p-5005958.html 这个可能会有多种原因造成.网上搜了一下,有人说需要手动下载, ...
- git cherry-pick简介
本文编辑整理自: http://sg552.iteye.com/blog/1300713 http://web.mit.edu/bitbucket/git-doc/git-cherry-pick.tx ...
- [转]IntelliJ Idea 常用快捷键 列表(实战终极总结!!!!)
IntelliJ Idea 常用快捷键 列表(实战终极总结!!!!) ntelliJ Idea 常用快捷键 列表(实战终极总结!!!!) 1. -----------自动代码-------- 常用的有 ...
- jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件
day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...
- std::map
1.例: map<int,string> m_mapTest; m_mapTest.insert(make_pair(1,"kong")); m_mapTest.ins ...
- ACM/ICPC 之 枚举(POJ1681-画家问题+POJ1166-拨钟问题+POJ1054-讨厌的青蛙)
POJ1681-画家问题 枚举的经典例题,枚举第一行即可,其余行唯一. //画家问题,y表示黄色,w表示白色,怎样让墙上所有方格为y,操作类似熄灯问题poj1222 //memory 136K Tim ...