cxf开发webservice服务器+客户端(各种类型的参数传递返回)
开发环境:eclipse3.7+jdk1.6.0_29+tomcat6.0.37
XFire搭建webservice: http://www.cnblogs.com/gavinYang/p/3525339.html
JAX-WS搭建webservice:http://www.cnblogs.com/gavinYang/p/3525287.html
源码下载地址: http://pan.baidu.com/s/1qWEtePm
Server
1.新建一个接口类:UserService
package com.gavin.service; import java.util.List;
import javax.jws.WebParam;
import javax.jws.WebService; @WebService
public interface UserService { String getUserName(@WebParam(name="username")String username); User getUser(@WebParam(name="user")User user); List<User> getUserList(@WebParam(name="userList")List<User> userList); User getUserMap(@WebParam(name="userMap")User userMap); User[] getUserArray(@WebParam(name="userArray")User userArray);
}
2.接口实现类:UserServiceImpl
package com.gavin.service;
import java.util.List;
public class UserServiceImpl implements UserService{
@Override
public String getUserName(String username) {
// TODO 自动生成的方法存根
return username;
}
@Override
public User getUser(User user) {
// TODO 自动生成的方法存根
return user;
}
@Override
public List<User> getUserList(List<User> userList) {
// TODO 自动生成的方法存根
return userList;
}
@Override
public User getUserMap(User userMap) {
// TODO 自动生成的方法存根
return userMap;
}
@Override
public User[] getUserArray(User userArray) {
// TODO 自动生成的方法存根
return userArray.getUserArray();
}
}
User对象
package com.gavin.service;
import java.util.HashMap;
public class User {
private String username;
private String userpass;
private HashMap userMap;
private User[] userArray;
public User() {
}
public User(HashMap userMap) {
this.userMap = userMap;
}
public User(User[] userArray) {
this.userArray = userArray;
}
public User(String name,String pass) {
this.username = name;
this.userpass = pass;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpass() {
return userpass;
}
public void setUserpass(String userpass) {
this.userpass = userpass;
}
public HashMap getUserMap() {
return userMap;
}
public void setUserMap(HashMap userMap) {
this.userMap = userMap;
}
public User[] getUserArray() {
return userArray;
}
public void setUserArray(User[] userArray) {
this.userArray = userArray;
}
}
3.spring配置文件中配置cxf
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <bean id="userServiceImpl" class="com.gavin.service.UserServiceImpl"></bean> <jaxws:endpoint id="userService" address="/getUserService" implementor="#userServiceImpl"></jaxws:endpoint> </beans>
4.在web.xml配置cxf
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>server</display-name> <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring.xml</param-value>
</context-param> <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
做完上面的部分,server端就已经完成了,访问:http://localhost:8080/server/services/getUserService?wsdl
Client
1.必须将服务器端的User对象复制过来,才能进行对象传递返回,否则会出现类型转换异常
2.测试server
package com.gavin.cxf.test; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import com.gavin.service.User; public class TestCXF { public static void main(String[] args) {
System.out.println("=======================plain========================");
Object[] plainResult = callService("http://localhost:8080/server/services/getUserService?wsdl", "getUserName", "gavin");
System.out.println("plain result:"+plainResult[0]);
System.out.println("=======================object========================");
Object[] objectResult = callService("http://localhost:8080/server/services/getUserService?wsdl", "getUser", new User("gavin", "123456"));
User user = (User)objectResult[0];
System.out.println("object result:"+user.getUsername()+"/"+user.getUserpass());
System.out.println("========================list=========================");
List<User> list = new ArrayList<User>();
list.add(new User("zhangsan", "666666"));
list.add(new User("lisi", "888888"));
Object[] listResult = callService("http://localhost:8080/server/services/getUserService?wsdl", "getUserList", list);
List<User> userList = (List) listResult[0];
for(User userInfo : userList){
System.out.println("list result:"+userInfo.getUsername()+"/"+userInfo.getUserpass());
}
//map,array对象必须包在一个对象下面
System.out.println("========================map==========================");
HashMap map = new HashMap();
map.put("name", "zs");
//如果想在map中传递对象则需写成HashMap<String,User> map = new HashMap<String,User>();
//map.put("user", new User("wangwu", "123456"));
Object[] mapResult = callService("http://localhost:8080/server/services/getUserService?wsdl", "getUserMap", new User(map));
User userMap = (User) mapResult[0];
System.out.println("map resilt:"+userMap.getUserMap().get("name"));
System.out.println("========================array=========================");
Object[] arrayResult = callService("http://localhost:8080/server/services/getUserService?wsdl", "getUserMap", new User(new User[]{new User("kangkang","123456"),new User("jane","123456")}));
User userArray = (User) arrayResult[0];
for(User userInfo : userArray.getUserArray()){
System.out.println("array result:"+userInfo.getUsername()+"/"+userInfo.getUserpass());
}
} public static Object[] callService(String wsUrl, String method, Object...arg) {
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(wsUrl);
Object[] res = null;
try {
res = client.invoke(method, arg);
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
}
打印结果显示:
=======================plain========================
plain result:gavin
=======================object========================
object result:gavin/123456
========================list=========================
list result:zhangsan/666666
list result:lisi/888888
========================map==========================
map resilt:zs
========================array=========================
array result:kangkang/123456
array result:jane/123456
cxf开发webservice服务器+客户端(各种类型的参数传递返回)的更多相关文章
- 【WebService】使用CXF开发WebService(四)
CXF简介 Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix ...
- struts1+spring+myeclipse +cxf 开发webservice以及普通java应用调用webservice的实例
Cxf + Spring+ myeclipse+ cxf 进行 Webservice服务端开发 使用Cxf开发webservice的服务端项目结构 Spring配置文件applicationCont ...
- 使用cxf开发webservice应用时抛出异常
在使用cxf开发webservice应用时,报出了类似下面的错误 JAXB: [javax.xml.bind.UnmarshalException: unexpected element (uri:& ...
- 使用cxf开发webservice接口
项目中经常用到开发webservice接口,及调用webService接口.这里讲解如何使用cxf开发webService接口. 一.webservice介绍及理解 webservice是一种跨平台, ...
- (三)使用CXF开发WebService客户端
前面一讲开发了webservice服务器端接口,今天的话,我们来开发webservice客户端,让大家来体验下过程: 首先建一个Maven项目,项目名字,WS_Client: 然后我们要用CXF给我们 ...
- 3.使用CXF开发webService
CXF 简介 关于 Apache CXF Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache ...
- Spring boot+CXF开发WebService
最近工作中需要用到webservice,而且结合spring boot进行开发,参照了一些网上的资料,配置过程中出现的了一些问题,于是写了这篇博客,记录一下我这次spring boot+cxf开发的w ...
- Spring boot+CXF开发WebService Demo
最近工作中需要用到webservice,而且结合spring boot进行开发,参照了一些网上的资料,配置过程中出现的了一些问题,于是写了这篇博客,记录一下我这次spring boot+cxf开发的w ...
- 使用CXF开发WebService程序的总结(七):Spring+CXF+Mybatis+Mysql共同打造的服务端示例
通过该demo,可以 熟悉下 spring+cxf+maven+mybatis+mysql等常见后端技术整合 1. 在前面的 父工程 ws_parent 中 添加依赖 由于原来的项目是使用的cxf依赖 ...
随机推荐
- selenium--判断元素是否存在
# coding:utf-8from selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitf ...
- react native中state和ref的使用
react native中state和ref的使用 因props是只读的,页面中需要交互的情况我们就需要用到state. 一.如何使用state 1:初始化state 第一种方式: construct ...
- gulp配置文件(gulpfile.js)
需要安装的插件 "gulp": "^3.9.1","gulp-clean": "^0.3.2","gulp-c ...
- java 不同数据类型的相互转化
在工作中经常会遇到需要将数据类型转化的情况,今天抽出时间总结一下. date——string Date date = new Date(); DateFormat dateformat = new S ...
- 附加题程序找bug
private: void Resize(int sz){ ){ return; } if(maxSize != sz){ T *arr = new T[sz]; if(arr == NULL){ r ...
- sql主表分页查询关联子表取任意一条高效方案
有个业务场景,主表中一条数据,在子表中有多条详情数据.对数据进行展示的时候,产品希望随意拿一条子表的数据关联展示出来,用了很多方案,但是都不够好. sql查询取子表任意一条,多个字段的方案 最终找到一 ...
- ACM 第二十天
积性函数.杜教筛 练习题 莫比乌斯函数之和 51Nod - 1244 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号. ...
- Microsoft Orleans 之 开发人员指南
开发一个Grain 在开发Grain之前请先阅读Grains 这篇文章 Grain 接口 Grains通过调用各自定义在接口中的方法相互作用,一个grain实现了事先定义好的一个或多个接口,grain ...
- 6/3 sprint2 看板和燃尽图的更新
- 树莓派两用优盘制作(FAT32存储+EXT树莓派系统)
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:树莓派两用优盘制作(FAT32存储+EXT树莓派系统) 本文地址:http://tec ...