反馈已提交

网络繁忙

WebService程序数据集之jws方式

  • 文档创建者:lu123
  • 编辑次数:28次
  • 最近更新:RosieY 于 2022-01-20
  • 1. 概述

    1.1 应用场景

    在使用 WebService 作为项目的数据源时,希望报表中可以直接调用 WebService 数据源,而不是定义数据连接调用对应的数据库表,这样要怎么实现呢?

    1.2 实现原理

    在程序中访问 WebService 应用服务,将 WebService 返回的数据转为程序数据集,然后在设计器中调用。本文示例通过jws 方式直接访问 WebService 数据源。

    2. 示例

    在 Axis1.4 工程中以 jws 方式发布一个 WebService,然后在 Java 中发送一个 soap 请求,访问*.jws 这个 WebService,得到返回的数据。

    2.1 准备 WebService 数据源

    2.1.1 准备 axis 服务器

    若您已有搭建好的 axis 服务器,请忽略此步骤。

    1)用户自行下载并安装 JDK 和 Web 应用服务器来配置部署的环境,本文示例使用 Tomcat 服务器部署,所以部署前提前准备好了一个 Tomcat 服务器。

    2)在 axis 官网下载部署包,本文示例使用 axis1.4: axis-bin-1_4.zip, 解压后将 webapps/axis 目录复制到 %TOMCAT_HOME%/webapps/下,然后启动 Tomcat,浏览器输入服务器访问网址可以访问即成功。如下使用本地服务器,浏览器输入URL: http://localhost:8080/axis/,出现  axis 页面,则部署成功。

    15543628923IVKIAEg.png

    2.1.2 发布 WebService 应用服务

    Tomcat 下的 axis 工程中以 jws 方式发布一个 WebService 应用服务 TestWS2TDClient.jws,返回一个数组数据。

    1)新建 TestWS2TDClient.java 文件,内容如下:

    public class TestWS2TDClient {
    public String[][] getTD() {
    String[][] a = { { "城市", "销售员", "销售额" }, { "江苏", "Anna", "230" }, { "江苏", "Alex", "190" },
    { "江苏", "Jack", "320" }, { "江苏", "Apple", "210" }, { "浙江", "Faye", "150" }, { "浙江", "Sammi", "280" } };
    return a;
    }
    }

    2)将写好的 TestWS2TDClient.java 文件重命名为TestWS2TDClient.jws,编码格式为 GBK,放在%Tomcat_HOME%\webapps\axis\目录下。即将以上数据发布为 WebService 应用服务。如下图所示:


    3)访问http://localhost:8080/axis/TestWS2TDClient.jws,如下图所示:


    点击 Click to see the WSDL,显示出内容,则发布成功。如下图所示:

    注:若出现报错,提示需要 tools.jar,那么就将 JDK 下面的 tools.jar 放到 axis 的 lib 文件夹中。


    2.2 定义程序数据源

    2.1 节准备好了 WebService 数据源,接下来可以直接在 JAVA 中发送一个 SOAP 请求,访问 TestWS2TDClient.jws 这个 WebService,得到返回的数据。定义 WebServiceTableData.java 类,扩展 AbstractTableData,将获得的数组数据转为程序数据集。

    2.2.1 准备编译环境

    编译程序前,需先创建一个 Java 工程环境,并且需要一个 Java 编辑器,如 Eclipse 或 idea 。

    在编辑器工程中导入 FineReport 工程 JAR 包。包括安装的报表工程

    %FR_HOME%/lib下的所有的包,

    %FR_HOME%/server/lib 下的所有包,

    %FR_HOME%/webapps/webroot/WEB-INF/lib下的所有包,

    还要引入 JDK 下的的 tools.jar,

    还需要引入%AXIS_HOME%/web-inf/lib下面的 JAR 包,

    详细操作可参考:编译Java程序 

    2.2.2 编写 Java 程序

    在 JAVA 中发送一个 SOAP 请求,访问 TestWS2TDClient.jws 这个 WebService,得到返回的数据。代码如下:

    注:SOAP 即简单对象访问协议,客户端发送一个请求,调用相应的对象, 然后服务器返回结果。这些消息是 XML 格式的,并且封装成符合 HTTP 协议的消息。

    try {
    String endpoint = "http://localhost:8080/axis/TestWS2TDClient.jws";
    Service service = new Service(); //创建一个服务(service)调用(call)
    Call call = (Call) service.createCall(); // 通过service创建call对象
    call.setTargetEndpointAddress(new java.net.URL(endpoint)); // 设置service所在URL
    call.setOperationName(new QName("http://localhost:8080/axis/TestWS2TDClient.jws","getTD"));
    // 调用service中的getTD方法
    String[][] ret = (String[][])call.invoke(new Object[] {});
    // getTD方法没有参数,因此传一个空的对象,得到service中getTD返回的数据
    return ret;
    } catch (Exception e) {
    e.printStackTrace();
    }

    访问 WebService 后,该服务会返回数据给客户端,该例中返回一个字符串数组。定义 WebServiceTableData.java 类,扩展 AbstractTableData,将获得的数组数据转为程序数据集。完整代码请参见:

    https://code.fanruan.com/demo/example/src/release/10.0/src/main/java/com/fr/data/WebServiceTableData.java

    2.2.3 编译 Java 文件

    Java 程序编写完成后,在编译器中编译 WebServiceTableData.java ,编译通过后,将会在编译器对应工程文件存储路径下生成 WebServiceTableData.class 类文件。如下图所示:

    将编译好的 WebServiceTableData.class 文件拷贝到%FR_HOME%/webapps/webroot/WEB-INF/classes/com/fr/data文件夹下。如下图所示:

    注:远程设计时,本地设计器和远程服务器的工程下都需要放置程序数据集对应的 class 文件。

    2.3 创建程序数据集

     %AXIS_HOME%/web-inf/lib下面的 JAR 包(除了log4j-1.2.8.jar,会冲突),拷贝到报表工程%FR_HOME%/webapps/webroot/WEB-INF/lib 下,拷贝成功后重启工程,即完成报表环境引用第三方 JAR 包。如将 axis 下的 JAR 包拷贝到设计器%FR_HOME%/webapps/webroot/WEB-INF/lib 下,拷贝成功后重启设计器。

    设计器打开后,新建模板,点击模板数据集下面的加号,选择「程序」数据集,在弹出的程序数据集对话框中,选择对应的 class 文件,如下图所示:

    选定 class 文件后,点击保存后即完成了程序数据源配置。

    2.4 使用程序数据集

    配置好程序数据源后便可以使用自定义的程序数据集,与其他类型的数据集使用方法相同,可以通过拖拽方法实现单元格数据列绑定。如下图所示:

    注:使用程序数据集时,axis 服务器为启动状态。


    附件列表


    主题: 二次开发
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    在线QQ:800049425

    热线电话:400-811-8890转2

    总裁办24H投诉

    热线电话:173-1278-1526

    文 档反 馈

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭