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,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285219.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285219.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285219.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言試題148之海灘上有一堆桃子,五只猴子來分。第一只猴子把這堆桃子憑據分為五份,多了一個,這只 猴子把多的一個扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一個,它同樣把多的

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:海灘上有一堆桃子,五只猴子…

一文讀懂什么是CTO、技術VP、技術總監、首席架構師

究竟什么是CTO,一個公司真的需要CTO么?哪些公司的職位對于技術管理者來講真的是CTO的職位?同樣是技術最高負責人,為什么有人叫CTO、有人叫技術總監、技術VP,有人叫首席架構師?他們之間的差別是什么&#xf…

與MySQL傳統復制相比,GTID有哪些獨特的復制姿勢?

與MySQL傳統復制相比,GTID有哪些獨特的復制姿勢? http://mp.weixin.qq.com/s/IF1Pld-wGW0q2NiBjMXwfg 陳華軍,蘇寧云商IT總部資深技術經理,從事數據庫服務相關的開發和維護工作,之前曾長期從事富士通關系數據庫的開發&#xff0c…

【ArcGIS Pro微課1000例】0007:ArcGIS Pro 2.5質量檢查:拓撲創建與編輯案例教程

文章目錄 1. 加載矢量數據2. 創建數據庫、要素數據集3. 拓撲創建4. 拓撲錯誤編輯與修改1. 加載矢量數據 矢量數據可以是單獨shp格式的文件數據,也可是存在于數據庫中的要素類。 2. 創建數據庫、要素數據集 創建數據庫 無論是在ArcMap,還是ArcGIS Pro中,創建拓撲都需要在…

C語言試題149之809乘以??=800乘以??+9乘以??+1 其中??代表的兩位數,8乘以??的結果為兩位數,9乘以??的結果為 3 位數。求??代表 的兩位數,及 809乘以??后的結果

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:809*??=800*??+9*??+1…

[轉]想要成為一名優秀的Java程序員,這份文檔必讀

A、規則(1–2 級) 1、在switch 中每個 case 語句都應該包含 break 或者 return 。 2、不要使用空的for 、if 、while 語句。 3、在運算中不要減小數據的精度。 4、switch 語句中的 case 關鍵字要和后面的常量保持一個空格,switch 語句中不要定…

QC 環境安裝條件

1、HP-QC設置 HP Quality Center環境設置是一個復雜的過程,它不是一般的安裝,我們一個windows操作系統上開展。 Enterprise安裝將會分發,但是,對于學習/評估目的之一,可以在獨立的服務器上安裝HP-ALM11.5的試用版。還應…

.Net之時間輪算法(終極版)定時任務

TimeWheelDemo一個基于時間輪原理的定時任務對時間輪的理解其實我是有一篇文章(.Net 之時間輪算法(終極版)[1])針對時間輪的理論理解的,但是,我想,為啥我看完時間輪原理后,會采用這樣的方式去實現。可能只是一些小技巧不上大雅之堂…

phpstorm config include paths for swoole

配置phpstorm 當你寫swoole 類或者函數時會自動補全 https://github.com/swoole/ide-helper.git 克隆下這個工具包 點加,然后指定你下載好的工具包路徑,點ok 本文轉自 skinglzw 51CTO博客,原文鏈接:http://blog.51cto.com/sking…

C語言試題150之八進制轉換為十進制

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:八進制轉換為十進制 2 、溫馨…

JavaScript全面學習(中階)

1.typeof操作符總是返回一個字符串: typeof 123; // number typeof NaN; // number typeof str; // string typeof true; // boolean typeof undefined; // undefined typeof Math.abs; // function typeof null; // object typeof []; // object typeof {}; // obj…

【ArcGIS風暴】ArcGIS創建柵格數據集色彩映射表案例--以GlobeLand30土地覆蓋數據為例

矢量數據快速符號化,可以將常用的樣式保存到樣式符號庫,柵格數據快速符號化,需要創建色彩映射表。本文以GlobeLand30土地覆蓋數據為例,詳解ArcGIS中創建與使用色彩映射表。 文章目錄一、 ArcGIS色彩映射表介紹二、土地覆蓋數據色彩…

Visual Studio 2019 16.3.10 初體驗

Visual Studio 2019 版本 16.3.10 發布時間:2019 年 11 月 20 日 官網地址:https://visualstudio.microsoft.com/zh-hans/vs/ 介紹: https://devblogs.microsoft.com/visualstudio/dot-net-core-support-in-visual-studio-2019-version-16…

【ArcGIS風暴】GlobeLand30全球數據處理教程(批量投影轉換、無效值處理、拼接)

本文講述GlobeLand30全球數據批處理流程,主要步驟包括:批量分幅投影轉換、批量分幅無效值處理、批量圖幅拼接和成品展示。由于圖幅數目和數據量較大,本文是采用Python代碼批量實現的,有關Python的基本操作及處理案例,可…

Docker 私有倉庫的搭建

Docker在2015年推出了distribution項目,即Docker Registry 2。相比于old registry,Registry 2使用Go實現,在安全性、性能方面均有大幅改進。Registry設計了全新的Rest API,并且在image存儲格式等方面不再兼容于old Registry。去年…

請查收.NET MAUI 的最新學習資源

點擊上方藍字關注我們(本文閱讀時間:3分鐘)2022 年 5 月 23 日,.NET MAUI 正式發布。.NET MAUI 為您提供了一流的跨平臺 UI 堆棧,面向 Android、iOS、macOS 和 Windows。我們很高興地宣布,有幾種不同的學習 .NET MAUI …

C語言試題151之求 0到7 所能組成的奇數個數。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:求 0—7 所能組成的奇數個數…

騰訊2016春招之算法編程解析

第一道題:求有刪除情況的最長回文子串 題目: 解題思路: 這個題嚴格意義上來說,刪除了字符就談不上回文串了,既然有刪除,那估計考察的不是回文串,而是其他的,但是這個東西又有回文串的…

Windows下Visual studio 2013 編譯 Audacity

編譯的Audacity版本為2.1.2,由于實在windows下編譯,其源代碼可以從Github上取得 git clone https://github.com/audacity/audacity。 1. 編譯WxWidgets Audacity使用wxWidgets作為GUI的框架,Audacity2.1.2需要wxWidgets 3.0.2,所以…

[轉]解決Android studio升級到3.5的一些問題

最近Android studio升級到最新的3.5以后,出現了很多問題,記錄一下: 1.NDK Resolution Outcome: Project settings: Gradle model version5.4.1, NDK version is UNKNOWN 這個是因為升級到3.5以后,原來的ndk被刪除了,在…