为了账号安全,请及时绑定邮箱和手机立即绑定

ClassCastException While Create an org.apache.poi

ClassCastException While Create an org.apache.poi

慕莱坞森 2022-05-12 17:28:29
我试图使用 Apache POI 将保护添加到 MS Excel 文件中,当我进行一些测试时它工作正常,但是当我在 Weblogic Server 12 运行时证明该功能时它失败了。这是我的代码:public static void parseFileToSecureFile(String fullFileName, String password) throws MyException{    POIFSFileSystem fs = new POIFSFileSystem();    EncryptionInfo info =        new EncryptionInfo(EncryptionMode.agile, CipherAlgorithm.aes256, HashAlgorithm.sha512, -1, -1, null);    Encryptor enc = info.getEncryptor();    enc.confirmPassword(password);    OPCPackage opc = null;    OutputStream os = null;    FileOutputStream fos = null;    try {        opc = OPCPackage.open(new File(fullFileName), PackageAccess.READ_WRITE);        os = enc.getDataStream(fs);        opc.save(os);        fos = new FileOutputStream(fullFileName);        fs.writeFilesystem(fos);    } catch (Exception e) {        logger.error("error: "+e.getMessage(), e);        throw new MyException("An Error");    }finally {         fs.close();         fos.close();    }}public static void main(String[] args){    System.out.println("Inicia");    try {        parseFileToSecureFile("/my_path/my_file.xlsx", "11");    } catch (MyException e) {        e.printStackTrace();    }    System.out.println("Finaliza");}正如我告诉你的,如果我从我的“主要方法”运行我的代码“原样”它可以工作,但如果我在运行时从 Web 应用程序调用该方法,我有下一个异常:org.apache.poi.EncryptedDocumentException: java.lang.ClassCastException: org.apache.poi.poifs.crypt.agile.AgileEncryptionInfoBuilder cannot be cast to org.apache.poi.poifs.crypt.EncryptionInfoBuilder    at org.apache.poi.poifs.crypt.EncryptionInfo.<init>(EncryptionInfo.java:186)    at org.apache.poi.poifs.crypt.EncryptionInfo.<init>(EncryptionInfo.java:153)    at com.tets.test.test.FileCipher.parserFileToSecureFile(FileCipher.java:39)    at com.test.test.test.backing.MyAdmin.doSomething(Something.java:387)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

如果其他人有同样的问题,这是我必须做的改变:

  • 将我的 POI 版本从 v3.15 更新到 v4.0.1

  • 添加commons-compress v1.18

此外,如果您必须阅读加密文件,您将需要:

  • xmlbeans-3.0.2

  • 公共集合4-4.1

Weblogic Server 有他自己的 xmlbeans 版本,你会遇到依赖冲突,所以,你需要在你的 weblogic.xml 文件中添加容器描述符标签中的下一个标签:

<prefer-web-inf-classes>false</prefer-web-inf-classes>

您还需要将下一个标签添加到 weblogic-application.xml 文件中:

<prefer-application-packages>
        <package-name>org.apache.xmlbeans.*</package-name>
        <package-name>repackage.*</package-name>
        <package-name>schemaorg_apache_xmlbeans.system.*</package-name>
 </prefer-application-packages>


查看完整回答
反对 回复 2022-05-12
  • 1 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信