河南建设监理协会新网站,毕业设计做网站怎么样,免费网站如何被百度收录,建网站可行性分析在使用WebService作为项目的数据源时#xff0c;希望报表中也是直接调用这个WebService数据源#xff0c;而不是定义数据连接调用对应的数据库表#xff0c;这样要怎么实现呢#xff1f; 在程序中访问WebService应用服务#xff0c;将WebService返回的数据转为程序数据集希望报表中也是直接调用这个WebService数据源而不是定义数据连接调用对应的数据库表这样要怎么实现呢 在程序中访问WebService应用服务将WebService返回的数据转为程序数据集然后在设计器中调用。 以axis1.4上的WebService为例介绍其取数方式以及将数据转换为WebService的程序数据集的过程。 WebService应用服务 如在Tomcat下的Axis工程中以jwa方式发布了一个WebService应用服务下TestWS2TDClient.jws返回一个数组数据如下 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\axis即可。 在java类中访问WebService数据源 Java中发布一个soap请求访问TestWS2TDClient.java得到返回的数据代码如下 1 2 3 4 5 6 7 8 9 10 11 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、wadl4j-a.5.a.jar、log4j-1.2.8.jar、jaxrpc.jar六个包可以在zxis\WEB-INF\lib下找到。 将获得数据转为程序数据集 访问WebService后该服务会返回数据给客户端该例中返回一个字符串数组。定义WebServiceTableData.java类扩展AbstractTableData将获得的数组数据转为程序数据集。完整代码如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 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(); } //获取列数 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[][] {}; } } 将编译好的class文件拷贝到%FR_HOME%/WebReport/WEB-INF/classes/com/fr/data文件夹下。 设计器中调用程序数据集 新建报表定义数据集选择程序数据集选择定义好的程序数据集WebServiceTableData.class自定义数据集的名称为ds1启动tomcat服务器点击预览效果如下 本文转自 雄霸天下啦 51CTO博客原文链接http://blog.51cto.com/10549520/1891018如需转载请自行联系原作者