第1章 概述

在大家使用UniEAP Report做报表开发时,经常会遇到设计器无法连接引擎,无法预览报表,无法发布报表等情况,本文档详细描述了报表设计器与引擎协同工作的原理以及常见故障的排除方法。

第2章 名词解释

报表设计器:是指报表客户端工具,分为eclipse插件版和RCP版,这两个版本没有本质的区别;

报表引擎:是指跟随web应用启动的报表核心程序,一般泛指带有报表核心程序的web应用;

UniEAP集成版:是指和UniEAPPlateform企业应用平台集成在一起的报表引擎,核心程序没有区别,区别在于权限验证方面;

独立版:是区别于UniEAP集成版的说法,是指单独部署,与UniEAPplateform无关的应用。

第3章 工作原理

1

报表设计器通过webservice和报表服务器之间交互(一些场景也会有非webservice的http请求,这个在下文中会提到)。

以发布报表操作为例,报表设计器会调用由报表服务器提供的webservice方法,报表服务器上的该方法会将报表模板保存到数据库当中。

第4章 故障排除过程

4.1 确认设计器服务库正确配置

在报表设计器的窗口->首选项中需要配置正确的服务库连接,如下图所示:

2

链接URL写到应用名称为止,应用名称后不得包含’/’

3

如果没有配置服务库,则会报出如下错误:

4

【注意】在UniEAP Workshop中工程属性以及首选项中都会有服务库配置,这时会以工程属性中的配置优先。在某些早期版本中,必须使用UniEAP透视图下才能正确获取到服务库配置。

4.2 报表引擎正常启动

需要确认上一步配置中,所配置的URL是可用并且已经启动的报表引擎服务,验证该项,可以将该URL复制粘贴到浏览器中打开,确认是否可用。

5

【注意】这里的登录页可能与具体业务应用登录页不同。

4.3 确认webservice是否正常发布

如果这时仍然无法连接,那么这时需要检查web service是否正常启动。

6

设计器发布报表时,必须使用webservice,在这步出现故障,一般情况下是webservice集成没有成功,请确定报表引擎所在的web应用的web.xml配置文件中是否包含如下内容:

<servlet>
        <servlet-name>AxisServlet</servlet-name>
        <display-name>Apache-Axis Servlet</display-name>
        <servlet-class>
            org.apache.axis.transport.http.AxisServlet
        </servlet-class>
</servlet>

    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>

另外,在WEB-INF目录下是否包含server-config.wsdd配置文件,配置文件中是否包含以下四个服务:

<service name="Designer" provider="java:RPC">…
<service name="DataSet" provider="java:RPC">…
<service name="MetaReader" provider="java:RPC">…
<service name="ManageService" provider="java:RPC">…

可通过以下方式验证webservice接口是否发布成功:
在浏览器中访问如下地址:
http://IP地址:端口号/应用名称/services/Designer?wsdl
如:http://10.4.53.105:8080/report/services/Designer?wsdl
如果能打开如下图的页面,说明webservice已经没有问题

7

如果确认以上配置正确,可还是无法打开该页面,这时web应用的控制台很有可能已经报出异常,这种情况一般是由于axis的jar缺失或者冲突导致,可检查在WEB-INF/lib目录下是否存在axis.jar,或者存在多个axis相关的jar,而不是同一版本,尝试调整jar包以解决该问题。

4.4 确认设计器引擎的版本是否对应

4.4.1 设计器、引擎版本号对应

在使用UniEAP Report开发报表时,要保证设计器、引擎版本号是对应的。

比如:设计器版本为UniEAP Report3.5版,而引擎版本为UniEAP Report3.3版,那么他们之间无法协同工作,需要保证版本号完全相同,如:都是3.3或者3.5.

4.4.2 设计器、引擎在一个释放包中

需要保证获取到的设计器、引擎在相同的释放包中。最好不使用来路不明的组合,这样容易出问题。因为报表区分为UniEAP集成版和独立版两个版本,这两个版本的权限验证方式是不同的,不能混用。

8

如果出现了以上情况,已无法追溯到版本来源,那么可以通过以下步骤进行排查:

下面分别就以下几个不同的版本列出了配置表格,具体情况可分析一下自己属于以下3种情况的哪种,再按照下表中对应的方式进行配置。

【注意】

UniEAP Report V4.3之后,报表设计器不再区分集成版还是独立版,不需要再关心plugin.xml配置。

9

【注】:

① 设计器版本:通指报表设计器,不区别eclipse插件还是RCP。这里需要说明的是V4集成版本的设计器与V3集成版的设计器之间不可置换(即使修改配置也不行)。

② plugin.xml相关配置:是指设计器

plugins\com.neusoft.unieap.workshop.report.editor_3.5.0目录下plugin.xml文件的如下配置:

<extension
         point="com.neusoft.unieap.workshop.common.UniEAPProductAuthenticate">
<product
            class="com.neusoft.unieap.workshop.report.deploy.UniEAPReportAuthenticate"
            default="false"
            id="report"
            name="Report"/>
</extension>

修改后需要清除设计器缓存

③ report-engine-config相关配置是指在报表引擎端

WEB-INF/conf/unieap/report目录下的report-engine-config.properties文件,表格中提到的配置为:

#安全性
com.neusoft.report.engine.security.factory=com.neusoft.report.sample.security.ExampleSecurityFactory
com.neusoft.report.engine.security.cacheSize=1000

修改后需要重启web应用服务器。

4.5 清除设计器缓存

按照上文步骤仍然不能排除故障,那么需要确认设计器缓存是否被清除,如果没有清除彻底,可能新的配置并没有生效,需要清除设计器缓存,清除方法如下:

  • 关闭设计器
  • 打开设计器所在的硬盘目录,找到configuration目录,删除掉除了config.ini之外的所有文件

10

  • 重新启动设计器(这时需要重新设置默认workspace)

第5章 高级诊断

如果经过几番周折后,问题仍然没有解决,那么可尝试使用以下的更深一步诊断。

5.1 httplook工具介绍

HTTPLook是一个 HTTP 的嗅探器,它能捕捉本机与其它任何主机的 HTTP 通讯(不是 HTTPS 哦),然后显示详细的 HTTP 操作(如 GET/POST)、访问资源的 URL 、字节数大小等,这个软件简单易用,不用对 Internet Explorer 做任何其它设置(有的软件通过在 IE 中设置代理来监控数据),也不需要其它任何软件的支持,是一款较为绿色的、轻量级的软件。

我们可以借助该软件来查看报表设计器与引擎之间的交互过程,通过分析这个过程,来排查在哪个环节上出现了问题。首先需要将该软件安装在报表设计器所在的客户机上。

5.2 独立版交互过程

下面分析一下UniEAP Report独立版的http交互过程,查看一下报表设计器执行刷新服务库操作的交互。

操作过程:

1.打开httplook软件,点击start按钮,开始嗅探

11

2.点击报表设计器的‘刷新服务库’按钮,并等待弹出成功或者失败的错误提示框

12

3.点击httplook软件的stop按钮,嗅探结束。

见下图即为截取到的交互过程

13

由上图中可以看到,报表设计器首先会发给引擎一个webservice请求,该请求中带有设计器配置的用户名和密码,在引擎端会验证用户名和密码,验证通过后,会返回一个200,表示验证通过。

这块如果出现问题,一般会有两种情况:

1.传入的用户名和密码没有验证通过,那么需要在设计器端配置一个可用的用户

2.返回的实际是一个登录页面,这种情况下,说明webservice请求被服务器的安全过滤器拦截掉了,这个需要确保过滤器不会过滤这些webservice请求。(设计器中配置的用户名称密码是如何验证的呢,这个需要实现一个安全接口,也就是在4.4中提到的com.neusoft.report.engine.security.factory配置)

如果出现其他未知情况,需要视服务器返回内容具体分析。

5.3 UniEAP V3集成版交互过程

操作过程同前面讲到的相同,这里不在赘述

截取到的交互过程如下:

14

在集成版本中发现和独立版中会有一点不同,这其中发送了一个http请求如下:

/report/login.do;jsessionid=?method=authenticate&eap_username=admin&eap_password=1&eap_authentication=true

这个请求是一个后台登录请求,报表设计器通过该请求可获取一个登录后的session,在UniEAP v3中支持通过该方式登录,登录后报表设计器就为认证状态,设计器发出的其它webservice请求就不需要再次登录验证了。验证这个步骤是否有问题,可以将上面这个URL补全后复制到浏览器中打开,如果访问到一个空白页面,则验证成功,否则需要检查该项特性为何不好用了。

【注意】在UniEAP V4集成版中,上面的URL有所区别,为:

/report/login.acion!authenticate;jsessionid=? &eap_username=admin&eap_password=1&eap_authentication=true

在下图中可以看到一种验证不通过的例子:

15

查看login.do请求的返回值,右侧窗口中内容仔细查看后,发现返回的并不是登录成功,而是返回了一个登录页,这个错误是由于使用集成版的设计器连接了一个独立版引擎,因为在独立版引擎中并没有提供login.do这样一个接口,所以报错。

希望这个文档能够解决您的问题!

results matching ""

    No results matching ""

    results matching ""

      No results matching ""