WS之cxf处理的复杂类型(Map)
一、服务端:
1、创建接口:
package cn.tdtk.ws.dao;
import java.util.List;
import java.util.Map;
import javax.jws.WebService;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import cn.tdtk.ws.domain.Cat;
import cn.tdtk.ws.domain.Horse;
import cn.tdtk.ws.domain.User;
import cn.tdtk.ws.util.FkXmlAdapter;
/** @WebService 所修饰的接口,那么接口里面的方法全部都属于web的服务 */
@WebService
public interface HelloWorld {
//基本数据类型都可以CXF进行实习
String sayHello(String name);
//复杂数据类型
List<Cat> getCatsByUser(User user);
/** CXF不能处理Map<String,Cat>类型,于是采用FkXmlAdapter进行处理。*/
@XmlJavaTypeAdapter(FkXmlAdapter.class)Map<String,Cat> getAllCats();
Horse selectMaxLongName(Horse h1,Horse h2);
}
2、实现接口:
package cn.tdtk.ws.dao.impl;
import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import cn.tdtk.ws.dao.HelloWorld;
import cn.tdtk.ws.dao.UserService;
import cn.tdtk.ws.domain.Cat;
import cn.tdtk.ws.domain.Horse;
import cn.tdtk.ws.domain.User;
public class HelloWorldImpl implements HelloWorld {
@Override
public String sayHello(String name) {
return name + ",你好,现在的时间是: "+new Date();
}
@Override
public List<Cat> getCatsByUser(User user) {
// 在这里只是调用业务逻辑组件,而不实现,具体的实现由业务类去完成
UserService us = new UserServiceImpl();
return us.getCatsByUser(user);
}
@Override
public Map<String, Cat> getAllCats() {
UserService us = new UserServiceImpl();
return us.getAllCats();
}
@Override
public Horse selectMaxLongName(Horse h1, Horse h2) {
if(h1.getName().length()>h2.getName().length())
return h1;
else{
h2.setImage(new DataHandler(new FileDataSource(
new File("c:\\"+File.separator+"1.jpg"))));
return h2;
}
}
}
3、将Map类型与简单类型互相转换:
package cn.tdtk.ws.util;
import java.util.List;
import cn.tdtk.ws.domain.Cat;
public class StringCat {
public static class Entry {
private String key;
private Cat value;
public Entry() {
super();
}
public Entry(String key, Cat value) {
super();
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> entrys;
public List<Entry> getEntrys() {
return entrys;
}
public void setEntrys(List<Entry> entrys) {
this.entrys = entrys;
}
}
4、XmlAdapter转换器:
package cn.tdtk.ws.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import cn.tdtk.ws.domain.Cat;
import cn.tdtk.ws.util.StringCat.Entry;
/**
* 该转换器负责 StringCat 和 Map<String, Cat> 类型的转换
* @author Administrator
*
*/
public class FkXmlAdapter extends XmlAdapter<StringCat, Map<String, Cat>> {
@Override
public Map<String, Cat> unmarshal(StringCat v) throws Exception {
Map<String, Cat> result = new HashMap<String, Cat>();
List<Entry> entrys = v.getEntrys();
for(Entry en : entrys)
result.put(en.getKey(), en.getValue());
return result;
}
@Override
public StringCat marshal(Map<String, Cat> v) throws Exception {
StringCat sc = new StringCat();
List<Entry> entrys = new ArrayList<Entry>();
for(String key : v.keySet())
entrys.add(new Entry(key,v.get(key)));
sc.setEntrys(entrys);
return sc;
}
}
5、业务数据:
package cn.tdtk.ws.dao.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import cn.tdtk.ws.dao.UserService;
import cn.tdtk.ws.domain.Cat;
import cn.tdtk.ws.domain.User;
public class UserServiceImpl implements UserService {
static Map<User,List<Cat>> catDb = new HashMap<User,List<Cat>>();
static{
List<Cat> catlist1= new ArrayList<Cat>();
catlist1.add(new Cat(1,"机器猫","橙色"));
catlist1.add(new Cat(2,"huanhuan","黑色"));
catlist1.add(new Cat(3,"xixi","红色"));
catDb.put(new User(1,"tom","123","shanghai"), catlist1);
List<Cat> catlist2= new ArrayList<Cat>();
catlist2.add(new Cat(1,"lulu","橙色"));
catlist2.add(new Cat(2,"haha","黑色"));
catDb.put(new User(1,"lili","123","shanghai"), catlist2);
}
@Override
public List<Cat> getCatsByUser(User user) {
return catDb.get(user);
}
@Override
public Map<String, Cat> getAllCats() {
Map<String, Cat> maps = new HashMap<String, Cat>();
int i=0;
for(List<Cat> lists : catDb.values()){
for(Cat cat : lists){
i++;
maps.put("第"+i+"个", cat);
}
}
return maps;
}
}
WS之cxf处理的复杂类型(Map)的更多相关文章
- WS之cxf与spring整合1
1.在web.xml中加入CXFServlet: <!-- 下面表示所有来自/cxfservice/*的请求,都交给 CXFServlet来处理 .--> <servlet> ...
- cxf client端借口类型找不到问题
问题: log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.Exception in ...
- WS之cxf的权限拦截器应用
一.服务器端: 1.权限判断: package cn.tdtk.ws.interceptor; import java.util.List; import org.apache.cxf.binding ...
- WS之cxf简单实现
1.服务端实现: 1.1 定义接口,用@WebService修饰: /** @WebService 所修饰的接口,那么接口里面的方法全部都属于web的服务 */ @WebService public ...
- 匿名函数lambda,过滤函数filter,映射类型map
匿名函数lambda, 作用是不用定义函数,用完之后会自动被删掉,在使用执行脚本的时候,使用lambda就可以省下定义函数的过程,简化代码的可读性. 格式是 例子g=lambda x,y:x+y g( ...
- WS之cxf与spring整合2
在action中加入webservice
- 为什么final类型map和list内容可以修改
URL地址:https://blog.csdn.net/AlbertFly/article/details/76855367
- (六)cxf处理一些Map等复杂类型
前面讲的一些都是简单类型,cxf都支持.但是有些复杂类型,cxf是不支持,比如常用的Map类型: 下面我们在前面的实例基础上在加一个方法,比如我们现在有个需求,获取所有用用户以及对应的每个用户所有角色 ...
- CXF2.7整合spring发布webservice,返回值类型是Map和List<Map>类型
在昨天研究了发布CXF发布webservice之后想着将以前的项目发布webservice接口,可是怎么也发布不起来,服务启动失败,原来是自己的接口有返回值类型是Map. 研究了一番之后,发现: we ...
随机推荐
- 《OD学hadoop》Linux基础
一.Linux基本环境 1. Linux常见版本及VMware虚拟机安装Linux系统 2. 虚拟机网络配置(IP地址.主机名.防火墙) 3. 文件基本命令操作 4. 四大远程连接工具使用 二.Lin ...
- JavaScript高级编程(一)
书中第2章,在HTML中使用JavaScript摘要总结 2.1 <script>元素 <script>中的5个属性:charset:可选.表示通过src属性指定的代码的字符集 ...
- 为Gradle添加tomcat插件,调试WEB应用
Gradle提供了不输于maven的依赖管理 提供了强大的test功能,输出优美的测试报告 并且提供war插件,使用内置的jetty调试WEB应用 因为博主偏偏钟情于tomcat,所以希望使用tomc ...
- laravel named route
laravel中一般对于路由的使用方法是在routes.php中定义一个路由,在view中如果要引用一个url则直接通过<a href="url/">来使用. 但是随着 ...
- 在asp.net前台页面中引入命名空间 和连接数据库
例如:<%@ Import Namespace="System.Data" %> 连接数据库 <% string strconn = "Data Sou ...
- 14.Object-C--浅谈Foundation框架字符串NSString 与NSMutableString
OC的字符串时经常使用到的,今天我对于OC字符串做一个简单的总结,如果有错误之处,麻烦留言指正.感谢! NSString是一个不可变长度的字符串对象.表示它初始化以后,你不能改变该变量所分配的内存中的 ...
- 各个 Maven仓库 镜像(包括国内)
本来之前用的OSC的Maven库,不过最近客户这边换了联通的网络之后,OSC的库就完全连不上了,不知道是不是因为OSC用的是天翼赞助的网络的原因,所以收集了一些其他的镜像库 首推当然还是OSC(不过联 ...
- OK335xS ethtool 移植
/******************************************************************* * OK335xS ethtool 移植 * 声明: * 由于 ...
- kdtree备份
库在这里 这个很好用. 例子: /*! gcc -Wall -g -o test test.c libkdtree.a */ #include <stdio.h> #include < ...
- mysql在update时,从其他select结果集更新表
需要使用join,例如 select g.id,g.res_count,count(gr.r_id) cnt from mb_game_res gr left join mb_game g on gr ...