博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FineReport中以jws方式调用WebService数据源方案
阅读量:5951 次
发布时间:2019-06-19

本文共 3270 字,大约阅读时间需要 10 分钟。

在使用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,如需转载请自行联系原作者

你可能感兴趣的文章
Android学习笔记之:android更新ui的几种经常用法
查看>>
VBA学习笔记(8)-Application Object Members
查看>>
25.怎样创建一个Swift项目?
查看>>
SQL语句合集
查看>>
【转】ubuntu右键在当前位置打开终端
查看>>
mysql 查询当天、本周,本月,上一个月的数据
查看>>
Scrum团队开发
查看>>
【C#公共帮助类】分页逻辑处理类
查看>>
关于最短路的随笔
查看>>
css 伪元素
查看>>
url-pattern配置
查看>>
springmvc管理资源开放
查看>>
成为Java顶尖程序员 ,看这11本书就够了
查看>>
新手入门学习(一)
查看>>
day10 nfs服务,nginx负载均衡,定时任务
查看>>
linux概念之/dev/shm
查看>>
shell之条件表达式
查看>>
实例!软件缺陷数据度量和分析
查看>>
sql performance Kill Lock
查看>>
php上传视频html代码,HTML_html5拍照功能实现代码(htm5上传文件),1、 视频流HTML5 The Media Capture - phpStudy...
查看>>