一、  服务端发布服务

  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. OpenGL ES: (2) OpenGL ES 与 EGL、GLSL的关系

    OpenGL ES 是负责 GPU 工作的,目的是通过 GPU 计算,得到一张图片,这张图片在内存中其实就是一块 buffer,存储有每个点的颜色信息等.而这张图片最终是要显示到屏幕上,所以还需要具体 ...

  2. redis配置文件讲解

    #redis.conf # Redis configuration file example. # ./redis-server /path/to/redis.conf ############### ...

  3. Ionic4.x 中的 UI 组件(UI Components)表单相关组件

    1.ion-input 单行文本框 2.ion-toggle 开关 3.ion-radio-group.ion-radio 单选按钮组 4.ion-checkbox 多选按钮组 5.ion-selec ...

  4. [Java复习] 设计模式 Design Pattern

    设计模式的六大原则 1.开闭原则(Open Close Principle) 对扩展开放,对修改关闭. 2.里氏代换原则(Liskov Substitution Principle) 任何基类可以出现 ...

  5. Qt编写自定义控件58-直方对称图

    一.前言 本控件也非原创控件,是参考网上的代码而来的,对称顾名思义就是将画布平均成上下两部分,将设置的值自动按照画布高度的一半作为参照高度进行绘制,然后增加动态过渡效果,有点类似于声音播放时候的频谱效 ...

  6. WebDriver介绍

    Fetching a Page driver.get("http://www.google.com") Locating UI Elements (WebElements) By ...

  7. 123457123457#0#-----com.yimeng.TouNaoWangZhe--前拼后广--brain游戏one

    com.yimeng.TouNaoWangZhe--前拼后广--brain游戏one

  8. laravel门面DB返回数组配置

    在数据库配置文件中添加 'fetch' => PDO::FETCH_ASSOC, //但是这个配置好像是全局的,不能针对单个数据库连接进行配置 也可以在方法内使用php内置函数get_objec ...

  9. SLAM十四讲中Sophus库安装

    Sophus截止目前有很多版本,其中大体分为两类,一种是用模板实现的方法,一种是用非模板类实现的,SLAM十四讲中使用的是非模板类库,clone Sophus: git clone http://gi ...

  10. 01.轮播图之二 :tableView 轮播

    在做这个tablevew轮播的时候,重要的就是修改frame 和view 的翻转了:::: 也是不难的,概要的设计和scroll 轮播是一致的: 首先是 .h 的文件 @interface Table ...