FineReport中以jws方式调用WebService数据源方案

简介:

在使用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,得到返回的数据,代码如下:

1
2
3
4
5
6
7
8
9
10
11
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();
}

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,将获得的数组数据转为程序数据集。完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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];
     }
 
     //获取行数为数据的长度-1
     public  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服务器,点击预览,效果如下:



本文转自 雄霸天下啦 51CTO博客,原文链接:http://blog.51cto.com/10549520/1891018,如需转载请自行联系原作者

相关文章
|
XML 监控 测试技术
WebService测试方案
1.WebService简介 WebService是一种革命性的分布式计算技术,本质上就是网络上可用的API,可以直接在网络环境调用的方法。 WebService常用的框架有axis、xfire、cxf等。
1022 0
|
Web App开发 监控 安全
Webservice测试方案(目录及下载链接)
1. WebService简介 WebService是一种革命性的分布式计算技术,本质上就是网络上可用的API,可以直接在网络环境调用的方法。 WebService常用的框架有axis、xfire、cxf等。
1083 0
|
7月前
|
缓存 应用服务中间件 数据库
Python Web Service开发及优化
随着互联网的快速发展,Web服务已成为现代技术的核心。Python作为一种功能强大且易于学习的编程语言,在Web服务开发领域占据着重要地位。Python Web服务开发的重要性在于它能够提供高效、可扩展且易于维护的解决方案。本篇博客将探讨如何使用Python的Flask框架、Gunicorn WSGI服务器和Nginx网页服务器来实现高性能的Web服务。
|
7月前
|
XML Java 应用服务中间件
WebService - Axis2基于JAX-WS开发WebService并发布多个WebService
WebService - Axis2基于JAX-WS开发WebService并发布多个WebService
92 0
|
7月前
|
Java 应用服务中间件 Spring
WebService - Axis2使用services.xml进行开发server与client(未与Spring整合)
WebService - Axis2使用services.xml进行开发server与client(未与Spring整合)
158 0
|
7月前
|
Java 应用服务中间件 Spring
WebService - CXF开发Server和Client(main方法测试)
WebService - CXF开发Server和Client(main方法测试)
97 0
|
存储 测试技术
Loadrunner 脚本开发-利用Loadrunner生成Web service测试脚本
Loadrunner 脚本开发-利用Loadrunner生成Web service测试脚本
134 0
Loadrunner 脚本开发-利用Loadrunner生成Web service测试脚本
|
Java Android开发
哇!eclipse+webservice开发实例居然这样写(有源码可用)
哇!eclipse+webservice开发实例居然这样写(有源码可用)
147 0
哇!eclipse+webservice开发实例居然这样写(有源码可用)
|
XML 存储 测试技术
Loadrunner 脚本开发-soap_request函数介绍及WebService接口测试
Loadrunner 脚本开发-soap_request函数介绍及WebService接口测试
158 0