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

在程序中访问WebService应用服务,将WebService返回的数据转为程序数据集,然后在设计器中调用。

以axis1.4上的WebService为例,介绍其取数方式以及将数据转换为WebService的程序数据集的过程。

WebService应用服务

如在Tomcat下的Axis工程中以jwa方式发布了一个WebService应用服务下TestWS2TDClient.jws,返回一个数组数据,如下:

public class TestWS2TDClient {

public String[][] getTD() {

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

return a;

}

}

以jws方式发布WebService:将写好的TestWS2TDClient.java文件重命名TestWS2TDClient.jws,放在Tomcat\webapps\axis即可。

在java类中访问WebService数据源

Java中发布一个soap请求,访问TestWS2TDClient.java,得到返回的数据,代码如下:

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所在URLcall.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();
}  

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

在此期间需要引入axis.jar、commons-discovery-0.2.jar、commons-logging-1.0.4.jar、wadl4j-a.5.a.jar、log4j-1.2.8.jar、jaxrpc.jar六个包,可以在zxis\WEB-INF\lib下找到。

将获得数据转为程序数据集

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

package com.fr.data;import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import com.fr.data.AbstractTableData;
import com.fr.general.data.TableDataException;public class WebServiceTableData extends AbstractTableData{private String[][] data;public WebServiceTableData() {this.data = this.getData();}//获取列数public int getColumnCount() throws TableDataException {return data[0].length;}//获取列的名称为数组中第一行的值public String getColumnName(int columnIndex) throws TableDataException {return data[0][columnIndex];}//获取行数为数据的长度-1public int getRowCount() throws TableDataException {return data.length - 1;}//获取值public Object getValueAt(int rowIndex, int columnIndex) {return data[rowIndex + 1][columnIndex];}public String[][] getData() {try {String endpoint = "http://localhost:8080/axis/TestWS2TDClient.jws";Service service = new Service();Call call = (Call) service.createCall();call.setTargetEndpointAddress(new java.net.URL(endpoint));call.setOperationName(new QName("http://localhost:8080/axis/TestWS2TDClient.jws","getTD"));String[][] ret = (String[][])call.invoke(new Object[] {});return ret;} catch (Exception e) {e.printStackTrace();}return new String[][] {};}
}

将编译好的class文件拷贝到%FR_HOME%/WebReport/WEB-INF/classes/com/fr/data文件夹下。

设计器中调用程序数据集

新建报表,定义数据集,选择程序数据集,选择定义好的程序数据集WebServiceTableData.class,自定义数据集的名称为ds1,启动tomcat服务器,点击预览,效果如下:

转载于:https://www.cnblogs.com/laoA188/p/6272981.html

FineReport中以jws方式调用WebService数据源方案相关推荐

  1. Java,Axis方式调用WebService接口,支持多参数

    package com.demo.modules.si.util;import org.apache.axis.client.Call; import javax.xml.rpc.ParameterM ...

  2. 通过客户端编程的方式调用webservice

    通过客户端编程的方式调用webservice其实与通过jdk调用webservice的方式其实是一样的.在4种调用webservice的方式中推荐使用 通过jdk来调用webservice的那一种方式 ...

  3. java webservice调用方式_java语言使用post方式调用webService方式

    展开全部 WebService可以有Get. Post.Soap.Document四种方式调62616964757a686964616fe78988e69d8331333337396232用,以下Ja ...

  4. 在Android中使用Android Ksoap2调用WebService

    一.WebService介绍 WebService是基于SOAP协议可实现web服务器与web服务器之间的通信,因采用SOAP协议传送XML数据具有平台无关性,也是成为解决异构平台之间通信的重要解决方 ...

  5. java xfire指定参数名_Java编程中使用XFire框架调用WebService程序接口

    JAVA调用webservice,当你刚开始接触的时候你会觉得它是一个恶梦,特别是没有一个统一的标准实现,比起.net的那些几步就可以完成的webservice实现,我们看着JAVA的实现真是伤心啊. ...

  6. SSM中使用注解方式调用输入输出参数存储过程,输入参数为javabean方式,Boolean类型对应TINYINT类型

    最近在捣鼓SSM使用注解方式调用有输入输出参数的存储过程,趟了不少坑,网上一堆没用抄袭的,废话不多说,直接上代码. Controller层: /*** 注册用户** @param userName* ...

  7. java用axis方式调用webservice接口

    最近需要使用webservice接口,所以总结了一下全过程,希望能够对大家有所帮助. 开发使用的项目框架是ssm框架,tomcat服务器. 首先我们会拿到一个调用webservice接口的网址,类似这 ...

  8. Android Studio App开发之网络通信中使用POST方式调用HTTP接口实现应用更新功能(附源码 超详细必看)

    运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一.POST方式调用HTTP接口 POST方式把接口地址与请求报文分开,允许使用自定义的报文格式,由此扩大了该方式的应用场景.POST请求与GET ...

  9. js中以构造函数方式调用函数

    构造器函数(Constructor functions)的定义和任何其它函数一样,我们可以使用函数声明.函数表达式或者函数构造器(见以前的随笔)等方式来构造函数对象. 要以构造函数的方式调用函数,只需 ...

最新文章

  1. Tomcat 爆出高危漏洞!
  2. Python实例浅谈之五Python守护进程和脚本单例运行
  3. 中国风力发电设备市场需求容量与投资战略研究报告2022版
  4. Codeforces Round #732 (Div. 2) D. AquaMoon and Chess 组合数学 + 找规律
  5. 【渝粤教育】国家开放大学2018年秋季 0691-21T物理化学及实验 参考试题
  6. w ndows7文档加密取消,win7文件夹怎么加密?windows7文件加密方法
  7. Kubernetes插件部署
  8. linux内核启动过程5:启动用户空间
  9. 如何在maven repository手动下载jar包
  10. 记录一下所了解的一些第三开源框架
  11. vb.net 教程 目录
  12. javaEE之----------java代码发送邮件
  13. 人工智能系列 之常用英文词汇
  14. 吹气球-LintCode
  15. MPU6050原始数据分析——学习笔记
  16. python截图工具和模拟鼠标键盘_python PyAutoGUI 模拟鼠标键盘操作和截屏功能
  17. 该网站服务器出错了怎么回事,该网站服务器出错了是什么意思(图文)
  18. ASP中Err.number返回的错误代码解释大全
  19. 碎碎点点-积土成山,风雨兴焉;积水成渊,蛟龙生焉
  20. 笔记—学习【立创】如何使用示波器—测量一个波形

热门文章

  1. Excel 自动更正选项
  2. 银行祖传系统重构实例:创立12年,只支持Python 2,跑着500多个应用程序
  3. JVM史上最最最完整深入解析,不看后悔一百次!
  4. 一个简易上手的短信服务Spring Boot Starter,连傻瓜都会!
  5. 为何单线程的 Redis 却能支撑高并发?
  6. 今日头条 Go 建千亿级微服务的实践
  7. 身份验证——《跟我学Shiro》
  8. 逻辑差学计算机,数学差的人不配学计算机?布朗大学教授告诉你一毛钱关系都没有!...
  9. zabbix mysql主从延迟_zabbix监控mysql主从同步和延迟
  10. linux内核红宝书,Solaris 10红宝书 9.3