Crystal Runtime本地运行失败,服务器端正常的问题排查求助
问题背景
我们多数BO报表通过服务器运行,偶尔在Java Web应用中通过BO Runtime执行,流程为:打开文档 → 调用verifyDatabase() → 设置参数 → 导出PDF。近期开发内部Web服务开放报表访问,本地RAD集成的WebSphere副本运行时报错,相同代码部署到正式WebSphere服务器则正常。本地与服务器使用相同数据库名和驱动,无共享库,Crystal JAR均放入web-inf/lib并打包进EAR,应用视图无差异。
报错信息
- 报错1:
One or more variables are null.---- Error code:-2147467259 [CRSDK00001228] Error code name:failed - 报错2:
JRCCommunicationAdapter detected an exception: Failed to bind columns. - 报错3:
Exception in formula '{@fAssetAprDt}' at '{CS62_SP.ASSETAPRDT}': - 报错4:
Caused by: java.lang.NullPointerException at com.businessobjects.reports.sdk.builder.EROMSubreportObjectBuilder.a(SourceFile:75) ~[CrystalReportsRuntime.jar:12.2.229.4422] at com.businessobjects.reports.sdk.builder.a.a(SourceFile:135) ~[CrystalReportsRuntime.jar:12.2.229.4422]
环境版本
- Rational Application Developer 9.7.0.5
- Eclipse 4.7.3.v20180301-0715
- WebSphere 9.0.5.20
排查方向
1. 数据库连接细节差异
- 核对本地与服务器的JDBC URL参数,确认是否存在
useSSL、serverTimezone等影响数据读取的参数差异,或本地DNS解析导致连接实例不符。 - 检查本地数据库用户权限,确认是否能访问
CS62_SP存储过程/表及ASSETAPRDT字段,权限不足可能导致数据读取失败。 - 对比本地与服务器的测试数据,排查是否本地数据存在空值,导致公式
{@fAssetAprDt}处理异常。
2. Crystal Runtime加载差异
- 检查本地WebSphere类加载顺序,排查RAD自带的Crystal类是否与项目打包的
CrystalReportsRuntime.jar版本冲突,服务器纯WebSphere环境无此类干扰。 - 查看本地WebSphere日志目录(如
profiles/[profileName]/logs/[serverName])的类加载日志,确认项目打包的Crystal JAR是否被优先加载。 - 验证本地WebSphere进程对临时目录的写入权限,Crystal Runtime运行时需生成临时文件,权限不足会引发初始化异常。
3. 报表文档与子报表处理差异
- 确认本地加载的报表文件是否完整,是否存在子报表路径引用错误或文件损坏,服务器端报表文档通常存储在稳定的共享目录。
- 检查
verifyDatabase()调用时机,是否在报表文档未完全初始化时执行,导致数据库验证失败,进而引发变量空、列绑定异常。
4. WebSphere配置细节差异
- 核对本地与服务器的数据源配置,包括连接池参数(最大连接数、超时时间)、连接池验证规则,连接池未正确初始化会导致数据库连接获取失败。
- 同步本地与服务器的JVM参数,如内存参数(
-Xmx、-Xms)、编码参数(-Dfile.encoding),内存不足或编码不一致会引发对象初始化、字段解析异常。
5. 部署方式差异
- 检查本地RAD部署时是否自动修改了
web.xml或ibm-web-bnd.xml配置,这类隐式修改可能导致报表运行上下文与服务器不同。 - 对比本地与服务器EAR包的解压内容,确认
web-inf/lib下的Crystal JAR版本完全一致,排查RAD打包时是否遗漏或替换了JAR文件。
内容的提问来源于stack exchange,提问作者Entropy
相关产品推荐
相关产品推荐

