我们有一个默认生成 pdf 输出的报告应用程序,但您可以编写自己的类来生成任何其他输出格式。这样我就使用 apache poi 10.0.0 生成了 xls 文件。但是,现在出现了生成 xlsx 文件的请求。当我尝试使用此代码创建工作簿时:
XSSFWorkbook wbTemplate=new XSSFWorkbook()
我收到错误:
java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setSaveAggressiveNamespaces()Lorg/apache/xmlbeans/XmlOptions;
我发现该应用程序已经使用了一个非常旧版本的 xmlbeans 文件,该文件当然不包含上述方法。首先,我尝试用更新的版本替换 xml bean 文件,以防万一,但应用程序冻结了。
我的下一个想法是使用 classLoader,当应用程序运行我的类来生成 xlsx 文件时,我会加载上述方法。为此,我实施了在互联网上找到的这个解决方案:
URL[] classLoaderUrls = new URL[]{new URL("file:/C:/HOME/Installs/Apache POI/poi-3.10/ooxml-lib/xmlbeans-2.6.0.jar")};
URLClassLoader urlClassLoader = new URLClassLoader(classLoaderUrls);
Class<?> beanClass = urlClassLoader.loadClass("org.apache.xmlbeans.XmlOptions");
Constructor<?> constructor = beanClass.getConstructor();
Object beanObj = constructor.newInstance();
Method[] m=beanClass.getMethods();
Method method = beanClass.getMethod("setSaveAggressiveNamespaces");
method.invoke(beanObj);
但是当它想要获得“setSaveAggressiveNamespaces”方法名称时,我再次收到此函数不存在的错误,这真是令人惊讶。然后我将这个类的所有函数名称写入文件,确实,该名称不存在。但是存在另一个名为“setSaveAggresiveNamespaces”的 S!如果我调用它,它就可以工作,但是当然,当我不想创建 XSSF 工作簿时,我仍然收到 setSaveAggressiveNamespaces(带有双 SS)不存在的消息。但是 setSaveAggressiveNamespaces 应该在类中,因为它随 apache poi 包一起提供。
在这种情况下我该怎么做才能使它工作?该应用程序在 java 1.6 下运行
预先感谢您的回答。
蝴蝶不菲
相关分类