Java軟件報表軟件技術博客

          java報表軟件技術匯總 java報表軟件制作 報表軟件新聞
          posts - 355, comments - 100, trackbacks - 0, articles - 3
             :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

          日歷

          <2017年1月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          Java友情博客鏈接

          搜索

          •  

          最新評論

          在使用WebService作為項目的數(shù)據(jù)源時,希望報表中也是直接調(diào)用這個WebService數(shù)據(jù)源,而不是定義數(shù)據(jù)連接調(diào)用對應的數(shù)據(jù)庫表,這樣要怎么實現(xiàn)呢?

          在程序中訪問WebService應用服務,將WebService返回的數(shù)據(jù)轉為程序數(shù)據(jù)集,然后在設計器中調(diào)用。

          axis1.4上的WebService為例,介紹其取數(shù)方式以及將數(shù)據(jù)轉換為WebService的程序數(shù)據(jù)集的過程。

          WebService應用服務

          如在Tomcat下的Axis工程中以jwa方式發(fā)布了一個WebService應用服務下TestWS2TDClient.jws,返回一個數(shù)組數(shù)據(jù),如下:

          public class TestWS2TDClient {

          public String[][] getTD() {

          String[][] a = {{"城市", "銷售員", "銷售額"},{"江蘇", "Anna", "230"},{"江蘇", "Alex", "190"},{"江蘇","Jack","320"},{"江蘇","Apple","210"},{"浙江","Faye","150"},{"浙江","Sammi","280"}};

          return a;

          }

          }

          jws方式發(fā)布WebService:將寫好的TestWS2TDClient.java文件重命名TestWS2TDClient.jws,放在Tomcat\webapps\axis即可。

          java類中訪問WebService數(shù)據(jù)源

          Java中發(fā)布一個soap請求,訪問TestWS2TDClient.java,得到返回的數(shù)據(jù),代碼如下:

          try {
              String endpoint 
          = "http://localhost:8080/axis/TestWS2TDClient.jws";
              Service service 
          = new Service(); //創(chuàng)建一個服務(service)調(diào)用(call)
              Call call = (Call) service.createCall(); // 通過service創(chuàng)建call對象
              call.setTargetEndpointAddress(new java.net.URL(endpoint)); // 設置service所在URL
              call.setOperationName(new QName("http://localhost:8080/axis/TestWS2TDClient.jws","getTD"));  // 調(diào)用service中的getTD方法
              String[][] ret = (String[][])call.invoke(new Object[] {}); // getTD方法沒有參數(shù),因此傳一個空的對象,得到service中getTD返回的數(shù)據(jù)
              return ret;
          }
           catch (Exception e) {
              e.printStackTrace();
          }

          Soap即簡單對象訪問協(xié)議,客戶端發(fā)送一個請求,調(diào)用相應的對象,然后服務器返回結果。這些消息是XML格式的,并且封裝成符合HTTP協(xié)議的消息。

          在此期間需要引入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下找到。

          將獲得數(shù)據(jù)轉為程序數(shù)據(jù)集

          訪問WebService后,該服務會返回數(shù)據(jù)給客戶端,該例中返回一個字符串數(shù)組。定義WebServiceTableData.java類,擴展AbstractTableData,將獲得的數(shù)組數(shù)據(jù)轉為程序數(shù)據(jù)集。完整代碼如下:

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


              
          //獲取列數(shù)
              public int getColumnCount() throws TableDataException {
                  
          return data[0].length;
              }


              
          //獲取列的名稱為數(shù)組中第一行的值
              public String getColumnName(int columnIndex) throws TableDataException {
                  
          return data[0][columnIndex];
              }


              
          //獲取行數(shù)為數(shù)據(jù)的長度-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文件夾下。

          設計器中調(diào)用程序數(shù)據(jù)集

          新建報表,定義數(shù)據(jù)集,選擇程序數(shù)據(jù)集,選擇定義好的程序數(shù)據(jù)集WebServiceTableData.class,自定義數(shù)據(jù)集的名稱為ds1,啟動tomcat服務器,點擊預覽,效果如下:




          主站蜘蛛池模板: 五指山市| 定安县| 斗六市| 横山县| 夏津县| 兰考县| 海安县| 怀化市| 正安县| 横山县| 乌鲁木齐县| 沾化县| 平顶山市| 遂溪县| 双峰县| 昭平县| 衡东县| 阳东县| 闵行区| 丰县| 金平| 治多县| 乳山市| 河南省| 孟村| 新乐市| 丰顺县| 浦北县| 沽源县| 卢湾区| 昌都县| 安义县| 吉木萨尔县| 聂荣县| 江西省| 陆河县| 喜德县| 许昌县| 郧西县| 石狮市| 神农架林区|