<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ù)覽,效果如下:




    主站蜘蛛池模板: 色噜噜噜噜亚洲第一| 亚洲一区二区三区免费视频| 亚洲人片在线观看天堂无码| 亚洲AV无码成人精品区天堂| 亚洲成a人在线看天堂无码| 91视频国产免费| 18成禁人视频免费网站| 天黑黑影院在线观看视频高清免费| 久久精品亚洲日本波多野结衣| 亚洲成人福利在线| 亚洲国产成人精品不卡青青草原| 国产成人A亚洲精V品无码| 国产三级电影免费观看| 永久免费看mv网站入口| 成年人视频在线观看免费| 91麻豆最新在线人成免费观看| 免费不卡在线观看AV| 日韩视频在线观看免费| 国产一级婬片A视频免费观看| 四虎一区二区成人免费影院网址 | 无码人妻一区二区三区免费看 | 中文字幕亚洲激情| 亚洲成AⅤ人影院在线观看| 国产精品va无码免费麻豆| 蜜桃精品免费久久久久影院| AV片在线观看免费| 青青草免费在线视频| 欧美男同gv免费网站观看| 成人AV免费网址在线观看| 中字幕视频在线永久在线观看免费| 亚洲精品视频免费在线观看| 0588影视手机免费看片| 日本在线高清免费爱做网站| 久久精品免费全国观看国产| 久久久久久国产精品免费免费 | 亚洲一级特黄特黄的大片 | 免费看又爽又黄禁片视频1000| 中文字幕影片免费在线观看| 97无码免费人妻超级碰碰夜夜| 成人免费毛片观看| 国产中文字幕免费|