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 Version 2.0+。但我使用2.6,我找不到任何其他可能导致此问题的解释。
答案 0 :(得分:0)
我遇到了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 来运行您的应用程序,则会在日志中得到以下信息: 从文件:/ C:/Program%20Files/Java/jre1.8.0_131/lib/ext/xbean.jar!/org/apache/xmlbeans/XmlOptions.class
加载的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。