gpt4 book ai didi

java - 在 EJB 中打开文件

转载 作者:搜寻专家 更新时间:2023-11-01 03:24:52 25 4
gpt4 key购买 nike

我知道通常不允许访问 EJB 中的本地文件(使用 java.io):尽管如此,我有一个 EJB 必须打开 Excel 文件并使用 apache.poi 库对其进行编辑。如果我这样做:

@Stateless
public class MyEJB {

public void editExcel(){
...
InputStream in = MyEJB.class.getClassLoader().getResourceAsStream("/xls/ExcelFile.xls");

final Workbook generatedExcel = new XLSTransformer().transformXLS(in, beans);
...

} }

文件系统结构:

MyEar.ear
--my-ejb.jar
---com
-----company
-------ejbs
----------MyEJB.class
---xls
-----ExcelFile.xls

在这种情况下,我将获得 ZipFile$ZipFileInputStream 的实例(ZipFileInputStream 的私有(private)内部类)并且 XLSTransformer 将抛出 IllegalArgumentException(“您的 InputStream 既不是 OLE2 流,也不是 OOXML 流”),因为它期望 InputStream表示 ExcelFile.xls 并取而代之的是表示整个 my-ejb.jar 的流。

我的问题:你知道如何解决这种情况吗?在 EJB 中访问文件的最佳实践是什么?

非常感谢!

最佳答案

我还必须从 EE 容器中返回修改后的 XLS 模板一次。尽管我始终不将此类资源视为 WAR/EAR 部署的一部分,而是将其视为由客户管理的可配置实体。

因此,一个简单的解决方案可能是将您的模板保存在配置目录中,并通过 JNDI 为您的应用程序提供它的路径和名称。

但是

您还可以使用 JNDI 来表示表示 excel 文件的更复杂的数据类型,这样您的 EJB 代码就不会直接进行文件操作。

您可以在这里找到一些指针(针对 JBoss JNDI AS):http://middlewaremagic.com/jboss/?p=1690

关于java - 在 EJB 中打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17110151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com