开发环境: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服务器+客户端(各种类型的参数传递返回)的更多相关文章

  1. 【WebService】使用CXF开发WebService(四)

    CXF简介 Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix ...

  2. struts1+spring+myeclipse +cxf 开发webservice以及普通java应用调用webservice的实例

    Cxf + Spring+ myeclipse+ cxf 进行  Webservice服务端开发 使用Cxf开发webservice的服务端项目结构 Spring配置文件applicationCont ...

  3. 使用cxf开发webservice应用时抛出异常

    在使用cxf开发webservice应用时,报出了类似下面的错误 JAXB: [javax.xml.bind.UnmarshalException: unexpected element (uri:& ...

  4. 使用cxf开发webservice接口

    项目中经常用到开发webservice接口,及调用webService接口.这里讲解如何使用cxf开发webService接口. 一.webservice介绍及理解 webservice是一种跨平台, ...

  5. (三)使用CXF开发WebService客户端

    前面一讲开发了webservice服务器端接口,今天的话,我们来开发webservice客户端,让大家来体验下过程: 首先建一个Maven项目,项目名字,WS_Client: 然后我们要用CXF给我们 ...

  6. 3.使用CXF开发webService

    CXF 简介 关于 Apache CXF Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache ...

  7. Spring boot+CXF开发WebService

    最近工作中需要用到webservice,而且结合spring boot进行开发,参照了一些网上的资料,配置过程中出现的了一些问题,于是写了这篇博客,记录一下我这次spring boot+cxf开发的w ...

  8. Spring boot+CXF开发WebService Demo

    最近工作中需要用到webservice,而且结合spring boot进行开发,参照了一些网上的资料,配置过程中出现的了一些问题,于是写了这篇博客,记录一下我这次spring boot+cxf开发的w ...

  9. 使用CXF开发WebService程序的总结(七):Spring+CXF+Mybatis+Mysql共同打造的服务端示例

    通过该demo,可以 熟悉下 spring+cxf+maven+mybatis+mysql等常见后端技术整合 1. 在前面的 父工程 ws_parent 中 添加依赖 由于原来的项目是使用的cxf依赖 ...

随机推荐

  1. ES6的新特性(16)——Generator 函数的语法

    Generator 函数的语法 简介 基本概念 Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同.本章详细介绍 Generator 函数的语法和 API,它的 ...

  2. 大前端全栈CSS3移动端开发

    作者声明:本博客中所写的文章,都是博主自学过程的笔记,参考了很多的学习资料,学习资料和笔记会注明出处,所有的内容都以交流学习为主.有不正确的地方,欢迎批评指正 本节课学习视频来源:https://ww ...

  3. 20181120-10 Beta阶段第2周/共2周 Scrum立会报告+燃尽图 7

    此作业要求参见:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2415] 版本控制地址    [https://git.coding.n ...

  4. Thunder团队第七周 - Scrum会议1

    Scrum会议1 小组名称:Thunder 项目名称:i阅app Scrum Master:杨梓瑞 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传 ...

  5. Python:装饰器的简单理解

    1.装饰器的本质是函数,主要用来装饰其他函数,也就是为其他函数添加附加功能 2.装饰器的原则: (1) 装饰器不能修改被装饰的函数的源代码 (2) 装饰器不能修改被装饰的函数的调用方式 3.实现装饰器 ...

  6. BETA阶段第一天

    1.提供当天站立式会议照片一张 2.每个人的工作 今天完成工作 林一心 服务器调试 张杭镖 数据库调整 赵意 前端设计 江鹭涛 前端设计 3.发布项目燃尽图 4.每日每人总结 林一心:服务器端的配置不 ...

  7. 0527 SCRUM团队项目7.0

    Sprint回顾 让我们一次比一次做得更好.   1.回顾组织 主题:“我们怎样才能在下个sprint中做的更好?” 时间:设定为1至2个小时. 参与者:整个团队. 场所:能够在不受干扰的情况下讨论. ...

  8. 搜索引擎Elasticsearch,了解一下?

    ElasticSearch介绍 ElasticSearch是一个全文搜索服务器,也可以作为NoSql数据库,存储任意格式的文档和数据,同时可以做大数据的分析.ElasticSearch具有以下特点: ...

  9. gridview 第一行编辑

    <%@ Page Language="C#" AutoEventWireup="true" Codebehind="Default.aspx.c ...

  10. XHTML5 与 HTML 4.01的差异

    在 HTML 4.01 中,td 元素的 "bgcolor"."height"."width" 以及 "nowrap" ...