【问题标题】:java.lang.NoSuchMethodError when trying to read .xlsm file尝试读取 .xlsm 文件时出现 java.lang.NoSuchMethodError
【发布时间】:2013-08-29 15:24:43
【问题描述】:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setSaveAggressiveNamespaces()Lorg/apache/xmlbeans/XmlOptions;
at org.apache.poi.POIXMLDocumentPart.<clinit>(POIXMLDocumentPart.java:56)
at rulebooksToExcel.GenerateExcel.generateExcel(GenerateExcel.java:34)
at rulebooksToExcel.ParseNortDocFiles.main(ParseNortDocFiles.java:165)

我在以下位置收到错误:

workbook = new XSSFWorkbook(in);

我读过其他类似的问题,但他们都建议使用 XMLBeans 版本 2.0+。但我使用的是 2.6,我找不到任何其他解释可能导致此问题的原因。

【问题讨论】:

  • 看起来您正在运行一个非常旧的 xmlbeans 副本...您可以尝试升级到受支持的版本 (2.3+) 并重试吗?
  • @Gagravarr,正如我在问题中提到的,我使用的是 XMLBeans 2.6。
  • @BeginnerJava 根据POI FAQ,您是否确认您实际上使用的是正确版本的 POI jar?
  • 您确定您使用的是您认为的 XMLBeans 版本吗?仅当您将 1.x 和 2.x 放在类路径中时,您才会认为您使用的是 2.x,但很可能您仍会使用 1.x!

标签: java apache-poi xmlbeans xlsm


【解决方案1】:

我在 Java8 中遇到了同样的错误。

This接受的答案帮助了我:

我在代码中添加了以下几行:

ClassLoader classloader = XmlOptions.class.getClassLoader();
        URL res = classloader.getResource(
                 "org/apache/xmlbeans/XmlOptions.class");
        String path = res.getPath();
        LOGGER.debug("XmlOptions.class loaded from " + path);

事实证明,如果您使用 Java8 JRE 来运行您的应用程序,您会在日志中得到以下信息: XmlOptions.class 从文件加载:/C:/Program%20Files/Java/jre1.8.0_131/lib/ext/xbean.jar!/org/apache/xmlbeans/XmlOptions.class

所以在 Java8 中,JRE/lib/ext 中有一个 apache xmlbeans jar,无论您的类路径设置如何,都会首先加载它!

当我将 JAVA_HOME/PATH 更改为指向我安装的 JDK8 时,问题解决了。

经过短暂检查后,JRE7 也是如此。 问题是 JRE 捆绑的 xbean.jar 在这两种情况下都包含 XmlOptions::setSaveAggresiveNamespaces(带有一个 's')。

(我使用的POI版本是3.17,因为这个版本兼容Java7。)

更新:事实证明这在我的公司环境(准备好的机器/组策略)中是正确的,在我的 PC 上的家里没有这样的 jar。

【讨论】:

    【解决方案2】:

    在应用服务器环境中,您的类路径中可能有旧版本的 xmlbeans(如 m4gic 所说)。

    我运行该代码 sn-p 并看到 XmlOptions 正在从 Weblogic 模块加载;

    XmlOptions.class loaded from file:/home/bea/bea12214/wlserver/modules/com.bea.core.xml.xmlbeans.jar!/org/apache/xmlbeans/XmlOptions.class
    

    我通过强制 Weblogic 为 xmlbeans 使用应用程序包解决了这个问题。 (对于战争类型的部署,它位于 WEB-INF 文件夹下的 weblogic.xml 中)

     <wls:prefer-application-packages>
         ...
         <wls:package-name>org.apache.xmlbeans.*</wls:package-name>
     </wls:prefer-application-packages>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多