我知道通常不允许在 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 的私有内部类),并且 XLSTransformer 将抛出一个 IllegalArgumentException(“您的 InputStream 既不是 OLE2 流,也不是 OOXML 流”),因为它需要一个表示 ExcelFile 的 InputStream。 xls 并获得一个代表整个 my-ejb.jar 的流。
我的问题:你知道如何解决这种情况吗?在 EJB 中访问文件的最佳实践是什么?
非常感谢!