反饋已提交

網絡繁忙

WebService程式資料集之jws方式

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 頁面,則部署成功。

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();
            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();
        }

存取 WebService 後,該服務會傳回資料給用戶端,該例中傳回一個字串陣列。定義 WebServiceTableData.java 類,擴展 AbstractTableData,將獲得的陣列資料轉為程式資料集。完整程式碼請參見:

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

2.2.3 編譯 Java 檔案

Java 程式編寫完成後,在編譯器中編譯 WebServiceTableData.java ,編譯透過後,將會在編譯器對應工程檔案儲存路徑下生成 WebServiceTableData.class 類檔案。如下圖所示:

將編譯好的 WebServiceTableData.class 檔案copy到%FR_HOME%/webapps/webroot/WEB-INF/classes/com/fr/data資料夾下。如下圖所示:

注:遠端設計時,本地設計器和遠端伺服器的工程下都需要放置程式資料集對應的 class 檔案。

2.3 建立程式資料集

 %AXIS_HOME%/web-inf/lib下面的 JAR 包(除了log4j-1.2.8.jar,會衝突),copy到報表工程%FR_HOME%/webapps/webroot/WEB-INF/lib 下,copy成功後重啟工程,即完成報表環境引用第三方 JAR 包。如將 axis 下的 JAR 包copy到設計器%FR_HOME%/webapps/webroot/WEB-INF/lib 下,copy成功後重啟設計器。

設計器開啟後,建立範本,點選範本資料集下面的加號,選擇「程式」資料集,在彈出的程式資料集對話框中,選擇對應的 class 檔案,如下圖所示:

選定 class 檔案後,點選儲存後即完成了程式資料源配置。

2.4 使用程式資料集

配置好程式資料源後便可以使用自訂的程式資料集,與其他類型的資料集使用方法相同,可以透過拖曳方法實現儲存格資料列綁定。如下圖所示:

注:使用程式資料集時,axis 伺服器為啟動狀態。

附件列表


主題: 二次開發
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙