历史版本1 :WebService程序数据集之jws方式 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 示例编辑

1.1 WebService应用服务
如在Tomcat下的Axis工程中以jws方式发布了一个WebService应用服务TestWS2TDClient.jws,返回一个数组数据。如下:
HTML/XML代码
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\axis2即可。
1.2 在java类中访问WebService数据源
java中发送一个soap请求,访问TestWS2TDClient.jws这个WebService,得到返回的数据,代码如下:
HTML/XML代码
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、wsdl4j-1.5.1.jar、log4j-1.2.8.jar、jaxrpc.jar六个包,可以在axis\WEB-INF\lib下找到。
1.3 将获得数据转为程序数据集
访问WebService后,该服务会返回数据给客户端,该例中返回一个字符串数组。定义WebServiceTableData.java类,扩展AbstractTableData,将获得的数组数据转为程序数据集。完整代码如下:
HTML/XML代码
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.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[][] {};  
    }  
}  
注:最新的代码链接fine-help
将编译好的class文件拷贝到%FR_HOME%/WebReport/WEB-INF/classes/com/fr/data文件夹下。
1.4 设计器中调用程序数据集
新建报表,定义数据集,选择程序数据集,选择定义好的程序数据集WebServiceTableData.class,自定义数据集的名称为ds1,启动tomcat服务器,点击预览,效果如下: