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依赖 ...
随机推荐
- Summarize to the Power of Two(map+思维)
A sequence a1,a2,…,ana1,a2,…,an is called good if, for each element aiai, there exists an element aj ...
- Windows 10 系统下Python环境的搭建与配置
1. 在https://www.python.org/downloads/release/python-352/网站上下载python版本 2. 配置环境 右击计算机属性,然后选择高级系统设置 3. ...
- 软工实践-Alpha 冲刺 (4/10)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 很胖,刚学,照猫画虎做了登录与注册界面. 展示GitHub ...
- IDEA + SSH OA 第一天(IDEA 文件夹类型了解)
回顾一下 IDEA 的文件夹的类型 设置文件夹方法 或者点击右上角的 文件夹的类型选择:可通过,右键文件夹,选择你要的类型: Sources Root : 源码的目录 Resources Root:源 ...
- goroutine与channels
goroutine(协程) 大家都知道java中的线程Thread,golang没有提供Thread的功能,但是提供了更轻量级的goroutine(协程),协程比线程更轻,创办一个协程很简单,只需要g ...
- C++ Primer Plus学习:第二章
C++入门第二章:开始学习C++ 进入C++ 首先,以下是一个C++程序: //myfirst.cpp 显示一行文字 #include<iostream> //预处理器编译指令 int m ...
- Snapseed玩出新高度,分分钟让你成p图大神! 转
(,,・∀・)ノ゛嗨呀 小阔爱们! 不知道大家记不记得~ 上周我们的副条发了一篇: <看过他的照片,我才知道什么是创意摄影> 德国仅22岁超现实主义艺术家Justin Peters 创造了 ...
- SQL中的declare用法
平时写SQL查询.存储过程都是凭着感觉来,没有探究过SQL的具体语法,一直都是按c#那一套往SQL上模仿,前几天项目中碰到一个问题引起了我对declare定义变量的作用域的兴趣. 大家都知道c#中的局 ...
- HDU4788_Hard Disk Drive
水题. 但是我写挫了一个地方,Wa了三发.好吧,不能忍了. 还有,本屌不知道如何用printf输出%,哪位学过C++的大仙知道这是什么情况? 告诉我一声啊. #include <iostrea ...
- BZOJ 1565 植物大战僵尸(拓扑排序+最大权闭合子图)
图中的保护关系就类似于最大权闭合子图.即你想杀x,你就一定要杀掉保护x的点,那么把x向保护它的点连边.那么题目就转化成了最大权闭合子图的问题. 但是这个图有点特殊啊... 考虑有环的情况,显然这个环以 ...