0

我们目前正在创建一个需要在 SLING/OSGI 上使用 ATG 标签库的应用程序,我们已经创建了一个包含这些标签库的包并上传了它,当然这些标签库调用 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,\ ... ETC...

首先我们得到这个错误:

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) 在 org.apache.sling.scripting.core.impl.DefaultSlingScript.service(DefaultSlingScript.java:226) 在 org.apache.sling.engine.impl.request .RequestData.service(RequestData.java:465)

……

.... 引起:java.lang.NoClassDefFoundError: atg/taglib/dspjsp/ImportBeanTag 在 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) 在 javax.servlet。 http.HttpServlet.service(HttpServlet.java:810) 在

因此,我们将 atg.taglib.dspjsp 添加到要添加到 bootdelegation sling.properties 文件中的包中。

然后我们得到了这个错误:

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) 在 org.apache.sling.scripting.core.impl.DefaultSlingScript.service(DefaultSlingScript.java:226) 在 org.apache.sling.engine.impl.request .RequestData.service(RequestData.java:465) ...

引起:java.lang.ClassCastException: atg.taglib.dspjsp.ImportBeanTag atg.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 解析器如何“连接”事物。

于 2010-08-08T10:26:47.077 回答
1

从 OSGi 框架外部加载 ATG 标记库时,您还必须确保从框架外部提供 JSP API。默认情况下,Sling 嵌入 JSP API(在 JSP 脚本包中)。

有多种方法可以将 JSP API 公开到框架中。一种是将它们添加到 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 回答