【问题标题】:Lucee not finding XSSFWorkbook after cfspreadsheet extension installed安装 cfspreadsheet 扩展后,Lucee 找不到 XSSFWorkbook
【发布时间】:2020-09-11 11:34:05
【问题描述】:

我在尝试创建 XSSFWorkbook 时收到错误消息

代码

currentCharterTemplate = 'UnusedTicketsWorkbook.xlsx';
currentFilePath = getDirectoryFromPath(getCurrentTemplatePath());
javaFile = createObject('java', 'java.io.File').init(currentFilePath & currentCharterTemplate);
excelFile = createObject('java', 'java.io.FileInputStream').init(javaFile);
xssfWorkbook = createObject('java', 'org.apache.poi.xssf.usermodel.XSSFWorkbook');
xssfWorkbook = createObject('java', 'org.apache.poi.xssf.usermodel.XSSFWorkbook').init(excelFile);

我也尝试了下面的行,我收到了同样的错误。

xssfWorkbook = createObject('java', 'org.apache.poi.xssf.usermodel.XSSFWorkbook');

错误

cannot load class through its string name, because no definition for the class with the specified name 
[org.apache.poi.xssf.usermodel.XSSFWorkbook] could be found caused by (java.lang.ClassNotFoundException:org.apache.poi.xssf.usermodel.XSSFWorkbook;
java.lang.ClassNotFoundException:org.apache.poi.xssf.usermodel.XSSFWorkbook not found by lucee.core [46];)

我已经为 Lucee 安装了 cfspreadsheet 扩展,并重新启动了 Lucee 和我的电脑,我已经验证了 cfspreadsheet-3.0.1.jar 以及 lucee 包含的所有其他 jar 文件在 C:\lucee\tomcat\lucee-server\bundles 中可用。

如果我用 7-zip 打开 jar,我可以看到包含 poi-ooxml-3.15.jar。在那个罐子里,我可以浏览到C:\lucee\tomcat\lucee-server\bundles\cfspreadsheet-3.0.1.jar\poi-ooxml-3.15.jar\org\apache\poi\xssf\usermodel\XSSFWorkbook.class

错误消息中的lucee.core 让我认为它无法识别我的扩展程序中的 jar,但我找不到启用此功能的设置。

【问题讨论】:

  • 什么版本的 Lucee?
  • 我在 5.3.6.61,但降级到 5.3.3.62 并且遇到了同样的问题。
  • 我刚刚测试了您的代码,并且似乎在您实际点击 cfspreadsheet 标记至少一次之前,扩展中的 OSGI 包实际上并没有被加载。运行 cfspreadsheet 标记后,服务器管理员中的 cfspreadsheet 包显示为“活动”,然后 createObject() 可以找到该类。
  • 我也刚刚发现,如果您将“cfspreadsheet”作为第三个参数传递来创建强制 Lucee 加载它的对象(包名称)。
  • 哇,你是对的。那行得通。谢谢布拉德!

标签: java lucee


【解决方案1】:

我刚刚测试了您的代码,似乎在您至少真正点击了 cfspreadsheet 标记一次之前,扩展中的 OSGI 包实际上并没有被加载。运行 cfspreadsheet 标记后,服务器管理员中的 cfspreadsheet 包显示为 active,然后createObject() 可以找到该类。

// Force Lucee to activate the bundle
spreadsheet action="read" src="#expandPath( 'UnusedTicketsWorkbook.xlsx' )#" name="test";

xssfWorkbook = createObject('java', 'org.apache.poi.xssf.usermodel.XSSFWorkbook');

我也刚刚发现,如果您将“cfspreadsheet”作为第三个参数传递来创建强制 Lucee 加载它的对象(包名称)。

// Explicitly reference the bundle name
xssfWorkbook = createObject('java', 'org.apache.poi.xssf.usermodel.XSSFWorkbook','cfspreadsheet');

值得注意的是,该扩展将 POI jar 重新打包到它自己设计的新捆绑包中,这就是捆绑包名称为 cfspreadsheet 的原因。

【讨论】:

    猜你喜欢
    • 2019-09-10
    • 1970-01-01
    • 2017-04-19
    • 2015-12-28
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多