一、  服务端发布服务

  1.1  定义复杂类型:UserBean.java

package service;

public class UserBean {
private String userId;
private String userName;
private String passWord;
//隐藏getset方法
}

  1.2  定义服务接口 :UserService.java

package service;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService; /**
* 这是一个web服务
* @author Administrator
*
*/
@WebService
public interface UserService { /**
* 获取用户
* @return
*/
@WebResult(name = "getUserResult")
public UserBean getUser(); /**
* 设置用户
* @param user
*/
public void setUser(@WebParam(name = "userBean") UserBean user);
}

  1.3  定义服务实现类

package service;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService; @WebService(endpointInterface="service.UserService")
public class UserServiceimpl implements UserService { @Override
public UserBean getUser() {
UserBean user = new UserBean();
user.setPassWord("123");
user.setUserId("001");
user.setUserName("服务端返回的用户");
return user;
} @Override
public void setUser(UserBean user) {
if (user != null) {
System.out.println("客户端设置的用户=" + user);
} } }

  1.4  发布服务

package publish;

import javax.xml.ws.Endpoint;

import service.UserServiceimpl;

public class TestPublish {
public static void main(String[] args) {
Endpoint.publish("http://localhost:3030/userBean", new UserServiceimpl()); System.out.println("发布成功.....");
}
}

二、客户端接受、发送消息到服务端

  2.1  用工具生成客户端代码(具体步骤参照上一章)

  2.2  发送、接收消息

package test;

import java.rmi.RemoteException;

import service.UserBean;
import service.UserService;
import service.UserServiceProxy; public class TestMain {
public static void main(String[] args) throws RemoteException { /**
* 获取服务端返回的用户
*/
UserService userService=new UserServiceProxy().getUserService();
UserBean user=userService.getUser();
System.out.println(user.getUserId()+"\t"+user.getUserName()); /**
* 客户端设置用户
*/ UserBean userbean=new UserBean();
userbean.setUserId("2");
userbean.setUserName("客户端设置的用户");
userbean.setPassWord("123520");
new UserServiceProxy().setUser(userbean); }
}

结果:

  • 注意:于普通的 Java 数据类型、JavaBean、List 而言,SOAP 服务可以完全将其处理(序列化与反序列化),这些都没有任何问题,但对于 Map 对象而言,不能再放其他复杂类型。
  • 一般来说,参数只传字符串类型,因为web服务可以不同语言调用的,而java复杂类型其他语言可能没有,但是所有语言共有字符串类型。而传递的字符串可以将数据封装成json/xml格式的字符串,然后客户端接收到json/xml格式的字符串再进行解析即可。

(四)输入参数与输出类型为复杂类型的web服务的更多相关文章

  1. Mybatis框架四:输入参数、输出参数

    输入参数可以有三种:简单类型,POJO,包装类 关于前两种: http://www.cnblogs.com/xuyiqing/p/8600888.html 这里写一下传递包装类参数: 一个POJO:U ...

  2. mybatis入门基础(四)----输入映射和输出映射

    一:输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 1.1.传递pojo的包装对象 1.1.1.需求描述 完成用户信息的综合查询, ...

  3. (三)CXF之处理输入参数与输出类型为复杂类型的webService服务

    一.需求 调用webService服务,把用户名和密码封装为用户对象作为参数,返回该用户所用友的角色列表. 二.发布服务 2.1 编写服务接口 @WebService public interface ...

  4. 存储过程: 存储过程(stored procedure)有时也称为sproc。存储过程存储于数据库中而不是在单独的文件中,有输入参数、输出参数以及返回值等。

    存储过程示例一: 执行存储过程方法一: 执行存储过程方法二: 存储过程可以定义返回值: 修改存储过程: 利用存储过程查找三个表内的信息: 练习:  超市管理系统:表一:门店仓库表   MenDian ...

  5. Mybatis输入映射和输出映射

    本节内容: 输入参数映射 输出映射 resultMap Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. 一.环境准备 复制 ...

  6. js数据类型的检测总结,附面试题--封装一个函数,输入任意,输出他的类型

    一.javascript 中有几种类型的值 1.基本数据类型 : 包括 Undefined.Null.Boolean.Number.String.Symbol (ES6 新增,表示独一无二的值) 特点 ...

  7. Hibernate调用带有输入参数,输出参数为cursor的存储过程

    一.Oracle创建表及存储过程 1.创建表T_MONITOR_DEVICE 创建后的表结构 2.创建存储过程 create or replace procedure ProcTestNew(v_mo ...

  8. Spring+SpringMVC+MyBatis深入学习及搭建(四)——MyBatis输入映射与输出映射

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6878529.html 前面有讲到Spring+SpringMVC+MyBatis深入学习及搭建(三)——My ...

  9. Mybatis学习总结(四)——输入映射和输出映射

    在前面几篇文章的例子中也可以看到mybatis中输入映射和输出映射的身影,但是没有系统的总结一下,这篇博客主要对这两个东东做一个总结.我们知道mybatis中输入映射和输出映射可以是基本数据类型.ha ...

随机推荐

  1. 连接池大小调优 原创: ImportNew ImportNew 2017-06-07

    连接池大小调优 原创: ImportNew ImportNew 2017-06-07

  2. IOS APP开发入门案例

    1.创建新项目 2.设计布局,main.storyboard中,在控件库中 3.布局控件关联控制器 4.设置事件或者显示模式 5.编写代码: import UIKit class ViewContro ...

  3. Java多线程中thread.getname()和thread.currentThread().getName();的去别

    首先要明白 this.XXX 的使用场景 使用Thread.currentThread().getName()和使用this.getName()和对象实例.getName(),都可以得到线程的名称,但 ...

  4. Mybase解决保存文件后再打开不能修改编辑

    1.问题复现 2.解决方式 3.可以修改编辑

  5. 如何使用 AWS Auto Scaling 按需动态增加和减少实例

    目录 一.背景需求 二.配置步骤 2.1.创建 AMI 2.2.创建负载均衡目标组 2.3.创建 Classic Load Balancer 2.4.创建启动配置 2.5.创建 Auto Scalin ...

  6. 【Kail 学习笔记】自用KAIL更新源

    打开 /etc/apt/source.list 添加-保存即可 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contr ...

  7. 🔥Scratch少儿编程——飞机大战

    前两天用

  8. centos6.5搭建rabbitmq服务器(单机)

    安装编译工具 yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel 安装Erlang 1. 下载erl ...

  9. 权限管理ranger

    为超级管理员airflow赋权: 在ranger 中的hive中加入root policy, url policy 在hdfs中加入/ 的poclicy 你如果需要自动ldap同步,时间1小时,ran ...

  10. 安卓版 WPS 使用电脑字体、安卓版 WPS 添加字体、安卓 WPS 无法显示文档真实字体(24)

    1. 前言 安卓版WPS默认只有那么几种字体,查看电脑的Office文档无法显示文档的真实字体.想要用更多的字体需要开会员,这里提供免费方案. 2. 操作步骤 1.先在手机中打开一个要查看的文档: 2 ...