2

私は何週間もの間、Jasper レポートを機能させようとしてきました。Eclipse で問題なく動作し、Jasper Web サイトのデモが動作します。JBoss の jsp ページからは機能しません。

私のjspページはかなり基本的です。クラス内のメソッドを呼び出します。診断を出力したので、間違いなくその時点に到達します。Jasper メソッドを呼び出すと、次のエラーが表示されます。

java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.engine.xml.JRXmlDigesterFactory

どこにでもjarファイルをダンプしました。この一連の jar を自分のjre/lib/extフォルダーにダンプするところまで行きました。

  • バティック-1.5
  • commons-beanutils-1.8.0
  • commons-collections-3.2.1
  • commons-digester-1.7
  • commons-javaflow-20060411
  • commons-logging-1.1.1
  • iText-2.1.7
  • jasperreports-4.6.0
  • jasperreports-applet-4.6.0
  • jasperreports-fonts-4.6.0
  • jasperreports-javaflow-4.6.0
  • log4j
  • org.eclipse.jdt.core_3.7.1.v_B76_R37x
  • poi-3.6

しかし、何も違いはありません。


返信と提案をありがとうございます。jre/lib/ext フォルダーに jar をダンプすることにしました。JBoss の default/lib で試してみたのですが、うまくいかなかったからです。ただし、Jboss default/lib 以外のすべての参照を削除しましたが、それでも機能しません。

JBoss を初めて起動して jsp ページを実行すると、次のスタックトレースが表示されます。

2012-06-19 08:03:49,349 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/Kanban].[jsp]] Servlet.service() for servlet jsp threw exception
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at net.sf.jasperreports.engine.xml.JRXmlDigesterFactory.<clinit>(JRXmlDigesterFactory.java:179)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:207)
at my.test.TestClass.compileReport(TestClass.java:73)
at my.test.TestClass.show(TestClass.java:35)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:85)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Thread.java:619)

エラーが org/apache/commons/logging/LogFactory にあることを示唆しているようですが、JBoss default/lib に commons-logging-1.1.1.jar があることは間違いありません。

次に jsp ページをもう一度実行すると、別のエラーが発生します。

2012-06-19 08:04:23,080 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/Kanban].[jsp]] Servlet.service() for servlet jsp threw exception
java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.engine.xml.JRXmlDigesterFactory
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:207)
at my.test.TestClass.compileReport(TestClass.java:73)
at my.test.TestClass.show(TestClass.java:35)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:85)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Thread.java:619)

誰かが私の問題を診断するのに役立つ可能性のある追加情報を提供できます。ここで私が間違っていることを誰かが知っていますか?

4

2 に答える 2

0

あなたはと混同ClassNotFoundExceptionしていNoClassDefFoundErrorます。クラスパスはすでに問題ありませんでした。JREライブラリを汚染しないでください。あなたは絶対にそれを元に戻すべきです。JARを配置するだけで/WEB-INF/lib十分でした。Eclipseプロジェクトの「ビルドパス」設定で行われた変更も元に戻すことを忘れないでください。

これNoClassDefFoundErrorは基本的staticに、前述のクラスの変数またはブロックの1つが初期化中に例外をスローしたため、クラスローダーがクラスをロードできなかったことを意味します。その例外の本当の根本原因は、スタックトレースのさらに下に表示されるはずです。スタックトレース全体を投稿しなかったため、初期化に失敗した理由とその解決方法を正確に説明することはできません。

したがって、スタックトレースの一番下の根本原因を読み取り、例外/メッセージを解釈して、それに応じて修正します。

于 2012-06-18T20:52:02.890 に答える
0

まず、jarファイルをあちこちに投げるのをやめることです。これを行うと、問題が複雑になり、将来発生する可能性のあるクラスパスの問題が発生します。私は見下すつもりはないことに注意してください。投稿する前に読んだときは、そのように聞こえました。これを行う人々に出くわし、数か月または数年後に別のトラブルシューティングを行い、すべてを複雑にするのは、私のペットの怒りです。

したがって、ステップ 1 は、どの jar ファイルnet.sf.jasperreports.engine.xml.JRXmlDigesterFactoryが含まれているかを把握することです。JasperReports 4.5 と同じ場合は、あなたの中にありますjasperreports-4.6.0

ステップ 2 は、jar ファイルを置く適切な場所を見つけることです。ここで見つけたJBossのドキュメントによると、JBossのインストールディレクトリにあるはずですserver/default/lib。そのフォルダの説明は次のとおりです。

lib ディレクトリは、ホット デプロイしない静的 Java ライブラリのデフォルトの場所です。このディレクトリ内のすべての JAR は、起動時に共有クラスパスにロードされます。

ステップ 3 では、JBoss を再起動して、動作することを確認します。

現在は機能しているはずですが、他の必要なライブラリが不足している場合は、別のエラーが発生する可能性があります。その場合は、手順をもう一度繰り返します。

最後に、ステップ 4 では、少し時間をかけて、どこに置いた瓶もすべて片付けます。必要かどうかわからないので、単にそのままにしておくか、適切な場所に余分な瓶を投げることさえ本能であることを私は知っています。いつかあなたを噛むと信じてください。最初からすべてをきれいに整理しておくのが最善です。

于 2012-06-18T17:32:46.210 に答える