5

Jboss 5.0 EAP では次の例外が発生しますが、JBoss 5.1 GA では問題なく動作します。

私たちはPOI 3.7を使用しており、含まれているjarは

  • poi-3.7.jar
  • poi-ooxml-schemas.jar
  • poi-ooxml.jar

スタックトレースは

ERROR [org.apache.catalina.core.ContainerBase.[jboss.ueb].[localhost].[fesbcon-Fig].[Faces Servlet]]
    3;13;44.4g3pM (http-0.0.0.0-8280-1) Servlet.service() -For servlet Faces Servlet threu exception
    java.lang.NoClassDe-FFoundError: Could not initialize class org.apache.poi.POIXMLDocument
    at org.apache.poi.ss.usermodel.HorkbookFactory.create(HorkbookFactory.java:62)
    at com.-Ferguson.esb.con-Fig.controller.AssociationsExcelUploadController.submit(Unknoun Source)
    at sun.re-Flect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.re-Flect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.re-Flect.DelegatingMethodAccessorImpl.invoke(Delegating?ethodAccessorImpl.java:25)
    at java.lang.re-Flect.Method.invoke(Method.java:597)
    at org.apache.my-Faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:132)
    at org.apache.my-Faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)

JBoss 5.0 EAP でこの問題を解決する方法を教えてください。

4

4 に答える 4

11

JBoss 5.0 で実行しているときに Apache XMLBeans JAR またはクラスが存在しないため、アプリケーションが表示されている例外をスローしているようです。Apache POI がクラスをロードしようとしているようですが、org.apache.xmlbeans.XMLOptionsこのクラスが見つかりません。

このメッセージCould not initialize class SomeClassは、JVM がクラスのロードと静的初期化を 2 回試みて失敗したことを示していますSomeClass。この場合、問題のクラスは ですorg.apache.poi.POIXMLDocument

クラスの静的初期化は、そのスーパークラスを静的に初期化し、すべてのstaticフィールドに値を割り当て、すべてのstatic初期化ブロックを実行することで構成されます。POIXMLDocumentクラスにはいくつかの定数static Stringがありますが、これによって問題が発生することはありませんが、静的初期化子はありません。ただし、これはPOIXMLDocumentPartのサブクラスであり、のサブクラスでObjectあり、次の静的初期化コードがあります。

    private static POILogger logger = POILogFactory.getLogger(POIXMLDocumentPart.class);

    public static final XmlOptions DEFAULT_XML_OPTIONS;
    static {
        DEFAULT_XML_OPTIONS = new XmlOptions();
        DEFAULT_XML_OPTIONS.setSaveOuter();
        DEFAULT_XML_OPTIONS.setUseDefaultNamespace();
        DEFAULT_XML_OPTIONS.setSaveAggressiveNamespaces();
    }

POILoggerJVM がすべての、POILogFactoryおよびXmlOptionsクラスをロードできない場合、この静的初期化は失敗します。

POILoggerPOILogFactoryクラスはどちらも package からインポートされ、両方のorg.apache.poi.util.POILogFactoryクラスが poi-3.7.jar に含まれているため、ここでは問題になりません。したがって、消去すると、XmlOptionsクラスimported fromorg.apache.xmlbeans.XmlOptionsが欠落しているように見えます。

このXMLOptionsクラスは、ここのミラーの 1 つからダウンロード可能なフォルダー内xbean.jarに含まれていることがわかりました。libxmlbeans-2.6.0.zip

この JAR を追加すると、JBoss 5.0 EAP の問題が解決する可能性が高いと思われます。ただし、あなたのアプリケーションは JBoss 5.1 GA で問題なく動作するとおっしゃっていましたが、これは、JBoss 5.1 GA にはこの JAR のコピーが含まれているのに対し、5.0 EAP には含まれていないことを暗示しています。その結果、この問題を解決する最善の方法が何であるかわかりません。JBoss 5.1 で実行すると問題が発生する可能性があるため、この XMLBeans JAR をアプリケーションに追加するのはためらわれます。JBoss 5.0 に追加の「ライブラリ」JAR を追加する方法があるかどうかはわかりませんが、一見の価値があるのではないでしょうか?

于 2012-11-08T12:13:48.477 に答える
5

Apache POI 3.14 を使用して JBoss 8.2 (WildFly 8.2.0.Final) で同じエラーが発生しました。

エラー:

原因: java.lang.NoClassDefFoundError: クラス org.apache.poi.POIXMLTypeLoader を初期化できませんでした

ooxml-lib フォルダーの Apache POI 3.14 ディストリビューションに含まれている最新の xmlbeans-2.6.0 jar (以前は 2.4.0 を持っていた) を展開に含めることで、これを修正しました。

于 2016-07-08T15:29:48.680 に答える
3

クラスパスに次のjarを配置すると、うまくいきます。

  • dom4j-1.6.1.jar

  • poi-3.9-20121203.jar

  • poi-ooxml-3.9-20121203.jar

  • poi-ooxml-schemas-3.9-20121203.jar

  • xmlbeans-2.3.0.jar

于 2016-12-03T13:14:10.077 に答える
1

xbean.jar だけ追加しても問題は解決しません。クラスが見つからないと不平を言い続けます。私がしたことは、xbean.jarだけでなく、xmlbeans-2.5.0のlibフォルダーにリストされている他のjarファイルもインポートすることです

于 2013-02-08T10:30:51.273 に答える