0

現在、SLING/OSGI で ATG taglibs を必要とするアプリを作成しています。これらの taglibs を含むバンドルを作成してアップロードしました。もちろん、これらの taglibs は ATG クラスを呼び出すため、sling.properties ファイルを使用して bootdelegation に含めています。 .

sling.bootdelegation.simple=atg.nucleus sling.bootdelegation.class.atg.nucleus.Nucleus=atg.appassembly, \ atg.appassembly.ant, \ atg.appassembly.progress, \ atg.appassembly.util, \ ...等...

最初に、次のエラーが発生しました。

org.apache.sling.api.scripting.ScriptEvaluationException: atg/taglib/dspjsp/ImportBeanTag at org.apache.sling.scripting.core.impl.DefaultSlingScript.call(DefaultSlingScript.java:163) at org.apache.sling.scripting org.apache.sling.engine.impl.request の org.apache.sling.scripting.core.impl.DefaultSlingScript.service(DefaultSlingScript.java:226) の .core.impl.DefaultSlingScript.eval(DefaultSlingScript.java:107) .RequestData.service(RequestData.java:465)

....

.... 原因: java.lang.NoClassDefFoundError: atg/taglib/dspjsp/ImportBeanTag at org.apache.jsp.apps.mygeometrixx.components.contenpage.center_jsp._jspx_meth_dsp_005fimportbean_005f0(center_jsp.java:177) at org.apache. jsp.apps.mygeometrixx.components.contenpage.center_jsp._jspService(center_jsp.java:154) org.apache.sling.scripting.jsp.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet. http.HttpServlet.service(HttpServlet.java:810) で

そのため、bootdelegation sling.properties ファイルに追加するパッケージに atg.taglib.dspjsp を追加しました。

次に、次のエラーが発生しました。

org.apache.sling.api.scripting.ScriptEvaluationException: atg.taglib.dspjsp.ImportBeanTag at org.apache.sling.scripting.core.impl.DefaultSlingScript.call(DefaultSlingScript.java:163) at org.apache.sling.scripting .core.impl.DefaultSlingScript.eval(DefaultSlingScript.java:107) at org.apache.sling.scripting.core.impl.DefaultSlingScript.service(DefaultSlingScript.java:226) at org.apache.sling.engine.impl.request .RequestData.service(RequestData.java:465) ...

原因: java.lang.ClassCastException: atg.taglib.dspjsp.ImportBeanTag at org.apache.sling.scripting.jsp.jasper.runtime.TagHandlerPool.get(TagHandlerPool.java:125) at org.apache.jsp.apps. mygeometrixx.components.contenpage.center_jsp._jspx_meth_dsp_005fimportbean_005f0(center_jsp.java:177) org.apache.jsp.apps.mygeometrixx.components.contenpage.center_jsp._jspService(center_jsp.java:154) org.apache.sling.scripting. jsp.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)

これはすべてJBOSSで実行されています。

キャスト例外の原因となっているこのクラスの競合を回避する方法はありますか?

4

2 に答える 2

1

OSGi フレームワークの外部から ATG タグ ライブラリをロードするときは、フレームワークの外部から JSP API を提供することも確認する必要があります。デフォルトでは、Sling は JSP API を (JSP Scripting Bundle に) 埋め込みます。

JSP API をフレームワークに公開するには、さまざまな方法があります。1 つは、sling.properties ファイルのシステム パッケージにそれらを追加することです。

sling.system.packages.atg_jsp = javax.servlet.jsp;javax.servlet.jsp.el; \
 javax.servlet.jsp.resources;javax.servlet.jsp.tagext;version=2.1.0
于 2012-05-09T14:19:50.130 に答える
1

クラスキャスト例外は通常、そのクラスが2つの異なる場所で利用可能になっていることを示しています(あなたの場合は、おそらくブート委任を介して、おそらくこのクラスをエクスポートするバンドルを介して)。それは私が最初に調査するものです。

また、物事をより明確にするために、一般的に、ブート委任を使用せず、代わりにシステム バンドルを介してこれらのパッケージを明示的にエクスポートすることをお勧めします。そうすれば、少なくとも、クラスがどこから来て、OSGi リゾルバーによってどのように「配線」されているかをより適切にデバッグできます。

于 2010-08-08T10:26:47.077 に答える