原文地址:https://www.ibm.com/developerworks/cn/websphere/library/techarticles/1305_jiangpl_rad/1305_jiangpl_rad.html

本文选择 IBM WebSphere Application Server 作为 web services 的运行环境,并选择 IBM Rational Application Developer(以下简称 RAD)for WebSphere 作为本文的开发平台。

Web Services 与 JAX-WS

Web Services 发展至今已有两种形式:REST 和 SOAP。

REST Web Services 基于 HTTP 协议,SOAP Web Services 支持多种传输协议:HTTP、SMTP、MIME 等等。

本文主要介绍 SOAP web services。


对于 JAVA,目前有两种 SOAP Web Services 规范:JAX-WS 和 SAAJ。

SOAP Web Services 通常要求服务器端提供一個机器可读的描述(通常基于 WSDL),以便客户端辨识服务器端提供的 Web 服务。

JAX-WS (Java API for XML Web Services) 是一组专门用于实现 XML Web Services 的 Java API。

JDK 1.6 自带 JAX-WS 版本为 2.1。不过,JAX-WS 只提供 web services 的基础功能,所以如果你希望实现 web services 的复杂功能,比如 WS-Security,WS-Policy,WS-RM 等,那就需要切换到 Apache CXF 、Metro 或者 Axis。

JAX-WS web services 开发

首先,在 RAD 平台上,创建一个最简单的 web service,这个 service 只向客户端返回一个字符串 – “Hello World”。

服务器端的工作流程如下:完成 web services 编写,发布 web services 生成服务描述文件(WSDL),以供客户端获取。

接下来,等待客户端发来的 SOAP 请求消息,解析其中的方法调用和参数格式。

根据 WSDL 和 WSML 的描述,调用相应的对象来完成指定功能,并把返回值放入 SOAP 回应消息返回给用户。

首先在 RAD 中新建一个 Web Project – WebProjectDemo,

图 1. 创建 Web Project

选择相应的 Target Runtime(确认“Servers” view 中已创建 Server Runtime),并确保 “Add project to an EAR”是勾选上的,这样就不需要再手动创建 EAR 了。

图 2. 选择运行环境,完成 Project 创建

完成 Web Project 的创建。

接下来,开始编写 web service 类,开发方法很简单,只需用 @WebService 标注 Java 类为 web service 类,

@WebMethod 标注类方法为 web service 方法。这些被标记的类和方法,在 service 发布之后,就能被客户端调用了。

清单 1. 服务端代码
@WebService
public class HelloWorld {
@WebMethod
public String sayHello(){
return "Hello World!";
  }
}

简短的几行代码就是 HelloWorld web service 类啦! HelloWorld 只有一个 web service 方法 – sayHello()。

接着就是发布 HelloWorld service 了,

使用 Web Services 向导将现有的 应用程序作为一个 Web Services 来公开。这称为自底向上的方法,此方法基于 Java bean 或 EJB 中的现有业务逻辑创建 Web Services 。

在 Package Explorer 中,右键单击 Java 类 HelloWorld,然后选择 Web Services > Create Web service

图 3. 发布 HelloWorld Service

发布完成,在浏览器中敲入

http://WEBSERVER:9080/WebProjectDemo/HelloWorldService?wsdl,如果能看到以下界面,就表示发布成功了。接着,我们就开始 客户端 的开发。

图 4. WSDL 文件

客户端开发 :

本文选用 Eclipse 作用客户端的开发平台,因为 RAD 内置了 WAS JRE Runtime 库,易与 JAVA JRE Runtime 冲突,所以本文就换用 Eclipse 开发客户端。

客户端的工作流程如下:取得服务器端的服务描述文件 WSDL,解析文件内容,了解服务器端的服务信息以及调用方式(生成客户端 Stub)。编写客户端 SOAP 请求消息 ( 指定调用的方法以及调用的参数 ),发送给服务器端。等待服务器端返回的 SOAP 回应消息,解析得到的返回值。

有多种生成客户端 Stub 的方式可以选择,如:axis2、jax-ws、xfire 等,不过需要注意的是各开源软件对 soap 协议解析方式不同,所以生成的的客户端也不尽然相同。本文采用 jax-ws 生成客户端 Stub,步骤如下:

  1. 首先确认从客户端机器可以访问 HelloWorld Service:
  2. http://WEBSERVER:9080/WebProjectDemo/HelloWorldService?
  3. 在 Eclipse 中,新建 Java Project – WebServiceClient
  4. 打开命令控制台,运行命令: /jdk/bin/wsimport.exe -d C:\WebServiceClient\\bin -s C:\WebServiceClient\\src – keep http://WEBSERVER:9080/WebProjectDemo/HelloWorldService?wsdl
  5. 刷新 Project,会发现 src 文件夹下多了一些文件,见图 5。
    图 5. 客户端文件结构

  6. 修改 HelloWorldService.java 。找到

    wsdlLocation = "***.wsdl" 和 url = new URL(baseUrl, "***.wsdl") ,把 ***.wsdl 替换成

    http:// WEBSERVER:9080/WebProjectDemo/HelloWorldService?wsdl.

  7. 配置完成。现在我们就可以调用 Stub 与服务器端通信啦!新建 HelloWorldClient.java,
    清单 2. 客户端代码
    1
    2
    3
    4
    5
    6
    7
    public class HelloWorldClient {
        public static void main(String[] args) {
            HelloWorldService service = new HelloWorldService();
            HelloWorld proxy = service.getHelloWorldPort();       
            System.out.println(proxy.sayHello());
        }
    }

    运行 HelloWorldClient.java,如果控制台输出“Hello World”,就表明客户端和服务器端通信成功了。

在 IBM RAD 平台上基于 JAX-WS 开发 Web Services服务器端,客户端的更多相关文章

  1. opus在arm的嵌入式平台上的移植和开发

    最近产品中要用到opus,圣上一声令下,把opus移植到我们平台上,什么?opus?opus是什么?在一脸 茫然中,我这特种兵码农就赤手空拳上战场了. 废话少说,赶紧在网站:https://opus- ...

  2. 基于soap 的 python web services 服务开发指南

    文章大纲 序言 相关概念 SOA web services SOAP WSDL UDDI 环境搭建 我们使用 python 3.6 这个较新python 版本 服务端开发 客户端开发 suds-jur ...

  3. 在云平台上基于Go语言+Google图表API提供二维码生成应用

    二维码能够说已经深深的融入了我们的生活其中.到处可见它的身影:但通常我们都是去扫二维码, 曾经我们分享给朋友一个网址直接把Url发过去,如今我们能够把自己的信息生成二维码再分享给他人. 这里就分享一下 ...

  4. 配置linux平台下基于vim的开发环境

    一.vim的基本配置 1.配置文件的位置在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效.而在每个用户的主目录($HOME)下,都可以自己建立私有的 ...

  5. (转)在Windows平台上安装Node.js及NPM模块管理

    本文转载自:http://www.cnblogs.com/seanlv/archive/2011/11/22/2258716.html 之前9月份的时候我写了一篇关于如何在Windows平台上手工管理 ...

  6. 使用Vitamio开发iOS平台上的万能播放器

    迅速了解 Vitamio是干什么的?看官方怎么说: "Vitamio SDK for iOS是Yixia Ltd官方推出的 iOS 平台上使用的软件开发工具包(SDK),为iOS开发人员提供 ...

  7. Web Services 平台元素SOAP、WSDL 、UDDI

    Web Services 拥有三种基本的元素:SOAP.WSDL 以及 UDDI. 什么是 SOAP? SOAP 是一种使应用程序有能力通过 HTTP 交换信息的基于 XML 的简易协议.或者可以更简 ...

  8. Web Services 平台元素

    Web Services 拥有三种基本的元素:SOAP.WSDL 以及 UDDI. 什么是 SOAP? 基本的 Web services 平台是 XML + HTTP. SOAP 指简易对象访问协议 ...

  9. 面向服务体系架构(SOA)和数据仓库(DW)的思考基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台

    面向服务体系架构(SOA)和数据仓库(DW)的思考 基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台 当前业界对面向服务体系架构(SOA)和数据仓库(Data Warehouse, ...

随机推荐

  1. VC-基础:vs2010快捷键

    F12: 转到所调用过程或变量的定义 CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL + SHIFT + O打开项目 CTRL + S ...

  2. 【转】JavaScript 节点操作 以及DOMDocument属性和方法

    最近发现DOMDocument对象很重要,还有XMLHTTP也很重要 注意大小写一定不能弄错. 属性: 1Attributes 存储节点的属性列表(只读) 2childNodes 存储节点的子节点列表 ...

  3. MySQL-08 MySQL8.0新特性

    性能 MySQL 8.0 在一定的用户访问条件下,速度要比 MySQL 5.7 快 2 倍.MySQL 8.0 在以下方面带来了更好的性能:读/写工作负载.IO 密集型工作负载.以及高竞争(" ...

  4. 浅探webpack优化

    由于前端的快速发展,相关工具的发展速度也是相当迅猛,各大框架例如vue,react都有自己优秀的脚手架工具来帮助我们快速启动一个新项目,也正式因为这个原因,我们对于脚手架中最关键的一环webpack相 ...

  5. 如何解决js跨域问题

    Js跨域问题是web开发人员最常碰到的一个问题之一.所谓js跨域问题,是指在一个域下的页面中通过js访问另一个不同域下的数据对象,出于安全性考 虑,几乎所有浏览器都不允许这种跨域访问,这就导致在一些a ...

  6. 让Python带你看一场唯美的横飘雪!

    “北国风光,千里冰封,万里雪飘”,这句诗描写了一句美丽肃静的风光图,恰逢昨天笔者这边也下了一场比较大的雪,要不今天就用Python带大家也来领略一次美丽的雪景? 开发环境 版本:Python3.6 系 ...

  7. OpenCV中图像的读取,显示与保存

      图像的读取,显示与保存 相关函数:cv2.imread().cv2.imshow().cv2.imwrite() 1.读入图像: 用cv2.imread()函数来读取图像,cv2.imread(路 ...

  8. shell中变量字符串的截取 与 带颜色字体、背景输出

    字符串截取 假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt 可以用${ }分别替换得到不同的值:${file#*/}:删掉第一个 /及其左边的字符串:dir ...

  9. IOC容器和Bean的配置实例

    实验1: <!--实验1:通过IOC容器创建对象,并为属性赋值 --> <!-- 需要由IOC容器创建对象的全类名 --> <!-- 为了便于从IOC容器中获取book对 ...

  10. UVALive - 3942 (DP + Trie树)

    给出一个长度不超过300000的字符串 S,然后给出 n 个长度不超过100的字符串. 如果字符串可以多次使用,用这 n 个字符串组成 S 的方法数是多少? 比如样例中,abcd = a + b + ...