• 在 IBM RAD 平台上基于 JAX-WS 开发 Web Services服务器端,客户端


    原文地址: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 发展至今已有两种形式:RESTSOAP

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

    本文主要介绍 SOAP web services。


    对于 JAVA,目前有两种 SOAP Web Services 规范JAX-WSSAAJ

    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

    发布 HelloWorld Service

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

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

    图 4. WSDL 文件

    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”,就表明客户端和服务器端通信成功了。

  • 相关阅读:
    oracle 12c迁移数据及遇到的问题
    用最有效率的方法计算 2 乘以 8?
    Java 中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
    是否可以在 static 环境中访问非 static 变量?
    什么是值传递和引用传递?
    Java 支持的数据类型有哪些?
    JDK、JRE、JVM 分别是什么关系?
    idea设置方法注释
    Java中&和&&的区别
    int和Integer有什么区别?
  • 原文地址:https://www.cnblogs.com/dlsunf/p/8582994.html
Copyright © 2020-2023  润新知