<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java軟件報表軟件技術(shù)博客

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

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

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

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

    WebService應(yīng)用服務(wù)

    如在Tomcat下的Axis工程中以jwa方式發(fā)布了一個WebService應(yīng)用服務(wù)下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)建一個服務(wù)(service)調(diào)用(call)
        Call call = (Call) service.createCall(); // 通過service創(chuàng)建call對象
        call.setTargetEndpointAddress(new java.net.URL(endpoint)); // 設(shè)置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中g(shù)etTD返回的數(shù)據(jù)
        return ret;
    }
     catch (Exception e) {
        e.printStackTrace();
    }

    Soap即簡單對象訪問協(xié)議,客戶端發(fā)送一個請求,調(diào)用相應(yīng)的對象,然后服務(wù)器返回結(jié)果。這些消息是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ù)轉(zhuǎn)為程序數(shù)據(jù)集

    訪問WebService后,該服務(wù)會返回?cái)?shù)據(jù)給客戶端,該例中返回一個字符串?dāng)?shù)組。定義WebServiceTableData.java類,擴(kuò)展AbstractTableData,將獲得的數(shù)組數(shù)據(jù)轉(zhuǎn)為程序數(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文件夾下。

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

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




    主站蜘蛛池模板: 37pao成人国产永久免费视频| 亚洲五月六月丁香激情| AV无码免费永久在线观看| 日本一区二区在线免费观看| 亚洲成人午夜电影| 亚洲国产日韩在线视频| 国产大片91精品免费观看男同 | 欧美好看的免费电影在线观看| 好男人资源在线WWW免费| 亚洲精品成a人在线观看夫| 亚洲AV无码一区二区三区人| 亚洲一区影音先锋色资源| 久久久久亚洲av毛片大| 国产免费拔擦拔擦8x| 成人免费无码大片A毛片抽搐| 1000部免费啪啪十八未年禁止观看| 日本高清不卡aⅴ免费网站| 又粗又长又爽又长黄免费视频| 亚洲人成人伊人成综合网无码 | 免费精品国产自产拍在线观看图片| 黄网站色视频免费在线观看的a站最新 | 又硬又粗又长又爽免费看 | 13小箩利洗澡无码视频网站免费| 九一在线完整视频免费观看| www亚洲精品久久久乳| 中文字幕亚洲码在线| 2017亚洲男人天堂一| 亚洲成a人片在线网站| 亚洲成综合人影院在院播放| 亚洲精选在线观看| 亚洲国产精品久久久久婷婷软件 | 亚洲成人动漫在线观看| 亚洲精品91在线| 亚洲日韩国产精品无码av| 亚洲视频在线不卡| 亚洲高清视频在线播放| 亚洲永久中文字幕在线| 亚洲av片不卡无码久久| 亚洲精品无播放器在线播放| 亚洲AV无码成人网站在线观看| 亚洲国产AV一区二区三区四区|