WebService程序数据集之jws方式

编辑
文档创建者:印然 (67260 )     浏览次数:6965次     编辑次数:16次     最近更新:susie 于 2019-04-04     

目录:

1. 准备工作编辑

1.1 Eclipse工程下引用FineReport jar包

1)当我们在FineReport设计器基础上进行二次开发,我们可以在Eclipse中通过调用FineReport启动类来启动设计器,以便于开发过程中的调试和二次开发的准备。

首先需要引入FineReport设计器下的jar包,详细点击Eclipse中启动设计器

1.2 Eclipse工程下引用第三方jar包
Eclipse中也需要引入%AXIS_HOME%/web-inf/lib下面的jar包,详细点击引用第三方jar包
1.3 报表环境引用第三方jar包
本地FineReport设计器访问程序数据集时,将%AXIS_HOME%/web-inf/lib下面的jar包(不要log4j-1.2.8.jar,会冲突),拷贝到设计器%FR_HOME%/webapps/webroot/WEB-INF/lib下。
1.4 axis服务器搭建
这里示例使用axis1.4:下载axis-bin-1_4.zip, 解压后将 webapps/axis 这个目录复制到 %TOMCAT_HOMT%/webapps/ 下,然后启动tomcat, 打开URL: http://localhost:8080/axis/,axis部署成功,如下图:
222

2. 示例编辑

2.1 WebService应用服务
Tomcat下的Axis工程中以jws方式发布了一个WebService应用服务TestWS2TDClient.jws,返回一个数组数据。如下:
新建TestWS2TDClient.java文件,内容如下:
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,编码格式为gbk,放在%Tomcat_HOME%\webapps\axis\即可。
222

访问http://localhost:8080/axis/TestWS2TDClient.jws,如下图:

222
点击Click to see the WSDL,如下图:
222

注:若出现报错,提示需要tools.jar,那么就将jdk下面的tools.jar放到axis的lib文件夹中。
2.2 在java类中访问WebService数据源
java中发送一个soap请求,访问TestWS2TDClient.jws这个WebService,得到返回的数据,代码如下:
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 协议的消息。

2.3 将获得数据转为程序数据集
访问WebService后,该服务会返回数据给客户端,该例中返回一个字符串数组。定义WebServiceTableData.java类,扩展AbstractTableData,将获得的数组数据转为程序数据集。完整代码如下:
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[][] {}; } }
将编译好的WebServiceTableData.class文件拷贝到%FR_HOME%/webapps/webroot/WEB-INF/classes/com/fr/data文件夹下。
2.4 设计器中调用程序数据集
新建报表,定义数据集,选择程序数据集,选择定义好的程序数据集WebServiceTableData.class,启动tomcat服务器,点击预览,效果如下:
222


附件列表


主题: 二次开发
标签: 暂无标签 编辑/添加标签
如果您认为本文档还有待完善,请编辑

文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

此页面有帮助吗?只是浏览 [ 去社区提问 ]