文档章节

使用CXF处理JavaBean式的复合类型和List集合类型的形参和返回值

xpttxsok
 xpttxsok
发布于 2016/05/01 13:04
字数 1237
阅读 100
收藏 1
先抛出这一章的结论:
    1.当返回值,形参的类型是String,基本类型时,cxf可以轻松处理
    2.当返回值,形参的类型是javaBean复合类,List集合,数组等,cxf可以也轻松处理
    3.Map,非javaBean的复合类,cxf是处理不了的,后面会将到

接着上一张直接上代码

==================================服务端===========================

//服务端接口代码

/**
 * @author xp
 * @Title: WebServiceDemo.java
 * @Package com.xp.cn
 * @Description: TODO
 * @date 2016年4月30日 下午8:27:44
 * @version V1.0  
 */
package com.xp.cn.ws;

import java.util.List;

import javax.jws.WebService;

import com.xp.cn.bean.Cat;
import com.xp.cn.bean.User;

/**
 * @author xp
 * @ClassName: WebServiceDemo
 * @Description: webService服务端
 * @date 2016年4月30日 下午8:27:44
 */
@WebService
public interface IWebServiceDemo {
	
	String sayHello(String name);
	
	List<Cat> getCatsByUser(User user);
	
}
//服务端接口代码实现类
/**
  @author xp
  @Title: WebServiceImpl.java
  @Package com.xp.cn
  @Description: TODO
  @date 2016年4月30日 下午8:39:22
  @version V1.0  
 **/
package com.xp.cn.ws.impl;

import java.util.Date;
import java.util.List;

import javax.jws.WebService;

import com.xp.cn.bean.Cat;
import com.xp.cn.bean.User;
import com.xp.cn.service.IuserService;
import com.xp.cn.service.impl.UserServiceImpl;
import com.xp.cn.ws.IWebServiceDemo;

/**
  @author xp
  @ClassName: WebServiceImpl
  @Description: TODO
  @date 2016年4月30日 下午8:39:22
 **/
@WebService(endpointInterface = "com.xp.cn.ws.IWebServiceDemo", 
			serviceName = "webServiceImpl")
public class WebServiceImpl implements IWebServiceDemo {
	
	/**
	 * 处理简单类型
	 * 1.形参和返回值都是简单类型
	 */
	@Override
	public String sayHello(String name) {
		return "你好" + name + new Date();
	}

	/**
	 * 处理复杂类型
	 * 2.形参和返回值都是复杂类型
	 */
	@Override
	public List<Cat> getCatsByUser(User user) {
		//webService自己并不会去实现业务逻辑功能
		//webService只是调用业务逻辑主键
		IuserService userService = new UserServiceImpl();
		return userService.getCatsByUser(user);
	}
}
//服务单javaBean,User
/**
 * @author xp
 * @Title: User.java
 * @Package com.xp.cn.bean
 * @Description: TODO
 * @date 2016年5月1日 下午12:07:58
 * @version V1.0  
 */
package com.xp.cn.bean;

/**
 * @author xp
 * @ClassName: User
 * @Description: TODO
 * @date 2016年5月1日 下午12:07:58
 *
 */
public class User {

	private Integer id;
	private String name;
	private String password;
	private String address;

	public User() {
		super();
	}

	public User(Integer id, String name, String password, String address) {
		super();
		this.id = id;
		this.name = name;
		this.password = password;
		this.address = address;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	/**
	 * 只要name和password相等
	 * 我们就认为该对象是同一个对象
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		result = prime * result + ((password == null) ? 0 : password.hashCode());
		return result;
	}

	/**
	 * 只要name和password相等
	 * 我们就认为该对象是同一个对象
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		User other = (User) obj;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		if (password == null) {
			if (other.password != null)
				return false;
		} else if (!password.equals(other.password))
			return false;
		return true;
	}

}
//服务端javaBean  Cat

/**
 * @author xp
 * @Title: Cat.java
 * @Package com.xp.cn.bean
 * @Description: TODO
 * @date 2016年5月1日 下午12:11:02
 * @version V1.0  
 */
package com.xp.cn.bean;

/**
 * @author xp
 * @ClassName: Cat
 * @Description: TODO
 * @date 2016年5月1日 下午12:11:02
 *
 */
public class Cat {
	
	private Integer id;
	private String name;
	private String color;
	
	public Cat() {
		super();
	}
	
	public Cat(Integer id, String name, String color) {
		super();
		this.id = id;
		this.name = name;
		this.color = color;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
}
//Service 接口组件
/**
 * @author xp
 * @Title: IuserService.java
 * @Package com.xp.cn.Service
 * @Description: TODO
 * @date 2016年5月1日 下午12:21:48
 * @version V1.0  
 */
package com.xp.cn.service;

import java.util.List;

import com.xp.cn.bean.Cat;
import com.xp.cn.bean.User;

/**
 * @author xp
 * @ClassName: IuserService
 * @Description: TODO
 * @date 2016年5月1日 下午12:21:48
 *
 */
public interface IuserService {
	
	List<Cat> getCatsByUser(User user);

}
//serviceimpl
/**
 * @author xp
 * @Title: UserServiceImpl.java
 * @Package com.xp.cn.Service
 * @Description: TODO
 * @date 2016年5月1日 下午12:22:21
 * @version V1.0  
 */
package com.xp.cn.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.xp.cn.bean.Cat;
import com.xp.cn.bean.User;
import com.xp.cn.service.IuserService;

/**
 * @author xp
 * @ClassName: UserServiceImpl
 * @Description: TODO
 * @date 2016年5月1日 下午12:22:21
 *
 */
public class UserServiceImpl implements IuserService {
	
	//模拟内存数据库
	static Map<User, List<Cat>> catDb = new HashMap<User, List<Cat>>();
	
	static{
		List<Cat> catList  = new ArrayList<Cat>();
		catList.add(new Cat(1, "cat1", "black"));
		catList.add(new Cat(2, "cat2", "write"));
		catDb.put(new User(1, "jaychou", "jaychou", "taiwan"), catList);
		
		List<Cat> catList2  = new ArrayList<Cat>();
		catList2.add(new Cat(1, "cat3", "black"));
		catList2.add(new Cat(2, "cat3", "write"));
		catDb.put(new User(2, "xp", "xp", "shanghai"), catList2);
	}
	
	@Override
	public List<Cat> getCatsByUser(User user) {
		return catDb.get(user);
	}

}
//发布服务
/**
 * @author xp
 * @Title: WebServicePublish.java
 * @Package com.xp.cn
 * @Description: TODO
 * @date 2016年4月30日 下午9:06:49
 * @version V1.0  
 */
package com.xp.cn;

import javax.xml.ws.Endpoint;

import com.xp.cn.ws.IWebServiceDemo;
import com.xp.cn.ws.impl.WebServiceImpl;


/**
 * @author xp
 * @ClassName: WebServicePublish
 * @Description: TODO
 * @date 2016年4月30日 下午9:06:49
 *
 */
public class WebServicePublish {
	public static void main(String[] args) {
		IWebServiceDemo demo = new WebServiceImpl();
		//调用EndPoint发布服务
		Endpoint.publish("http://127.0.0.1/XXX", demo);
	}
}

好了,现在可以测试是否发布成功

打开浏览器地址栏输入:http://127.0.0.1/XXX

出现下图说明发布成功


==================================客户端===========================

首先利用wsdl2java工具生成客户端代码

步骤章节和WebService简单开发 apache-cxf-3.1.6环境配置章节一样

调用webservice服务

/**
 * @author xp
 * @Title: ClientMain.java
 * @Package com.xp.cn.test
 * @Description: TODO
 * @date 2016年5月1日 下午12:39:03
 * @version V1.0  
 */
package com.xp.cn.test;

import java.util.List;

import com.xp.cn.ws.Cat;
import com.xp.cn.ws.IWebServiceDemo;
import com.xp.cn.ws.User;
import com.xp.cn.ws.impl.WebServiceImpl;

/**
 * @author xp
 * @ClassName: ClientMain
 * @Description: TODO
 * @date 2016年5月1日 下午12:39:03
 *
 */
public class ClientMain {
	
	public static void main(String[] args) {
		
		//继承Service的类当成工厂使用
		WebServiceImpl webServiceImpl = new WebServiceImpl();
		//此处返回的只是远程webservice的代理
		IWebServiceDemo webService = webServiceImpl.getWebServiceImplPort();
		String sayHello = webService.sayHello("xp");
		System.out.println(sayHello);
		
		User user = new User();
		user.setName("jaychou");
		user.setPassword("jaychou");
		List<Cat> catsByUser = webService.getCatsByUser(user);
		
		for (Cat cat : catsByUser) {
			System.out.println(cat.getName());
			System.out.println(cat.getColor());
		}
	}
}

客户端和服务端包结构

控制台打印信息如下

OK!



© 著作权归作者所有

xpttxsok
粉丝 7
博文 187
码字总数 109478
作品 0
徐汇
程序员
私信 提问
加载中

评论(1)

q
qwerty123456
63636363不错,很详细
使用CXF开发RestFul WebService问题解决方案

最近在项目中,因为几个系统自己需要数据交换,所以采用进来都比较流行的RestFul风格WebService,实现框架采用apache的cxf,apache的东西一直以来都是比较的好用,回话少说,进入正题。 首先...

xdev
2013/05/18
11.7K
3
Web Service 那点事儿(4)—— 使用 CXF 开发 REST 服务

现在您已经学会了如何使用 CXF 开发基于 SOAP 的 Web 服务,也领略了 Spring + CXF 这个强大的组合,如果您错过了这精彩的一幕,请回头看看这篇吧: [Web Service 那点事儿(2) —— 使用 ...

黄勇
2014/07/23
22.1K
43
通过 CXF 使用 WS-Security

简介: Apache CXF Web 服务堆栈支持 WS-Security,包括使用 WS-SecurityPolicy 配置安全处理。CXF 允许通过灵活地配置运行时使用的部署参数实现安全处理,支持客户端使用静态和动态配置方法...

红薯
2010/04/21
2.3K
1
CXF WebService 可以自定义返回类型为csv吗?

工作中用户提了这样的要求,通过CXF WebService + spring3 来实现API的功能。 用户要求我们提供SOAP和Restful两种方式的API,Rest方式需要支持json/xml/csv这3种格式的返回值。 之前使用过C...

Yue-Su
2014/04/30
339
1
apache cxf map问题

apache cxf 可以直接使用map吗。我看好多资料都说cxf不能直接支持map类型,必须写一个适配器来对map类型进行绑定。 但是我在测试中,把cxf 2.7.14的JAR包全部导入的情况下,不需要写map的适配...

啊一
2014/12/27
92
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 不要在领导修风扇的时候打开电扇

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :《Whats Up》 主唱妹子 Lina Perry 的嗓音实在太有力了,收放自如的自信才能唱出这么优秀的歌吧!#今日歌曲推荐# 《Whats Up》-...

小小编辑
今天
11
0
SpringBoot集成Elasticsearch并进行增删改查操作

一、创建工程 使用IntelliJ创建SpringBoot工程 SpringBoot版本为2.0.4 ElasticSearch为5.6.10 删掉蓝框中的文件(如上) 最后我们的目录结构(如下) 下面pom文件主要修改的是把spring boot从Int...

一字见心
今天
5
0
x001-版本介绍

python版本介绍 目前有2 和 3 有很多企业用的代码是2版本,随着技术的发展,以后用3的会成为大趋势 python3的安装 yum -y install wget gcc zlib-devel bzip2-devel openssl-devel ncurses-d...

侠客行之石头
今天
5
0
聊聊rocketmq的TransientStorePool

序 本文主要研究一下rocketmq的TransientStorePool TransientStorePool rocketmq-all-4.6.0-source-release/store/src/main/java/org/apache/rocketmq/store/TransientStorePool.java publi......

go4it
昨天
6
0
笔记

场外借贷, 质押 ,托管, 永续合约. 场外借贷,n签合同. 新功能 证券交易组负责中信证券机构及个人投资交易相关系统,服务机构及个人投资客户, 涉及到两融、期权、 期货、做市等境内境外创新业...

MtrS
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部