【问题标题】:ATG taglibs on OSGI problems关于 OSGI 问题的 ATG 标签库
【发布时间】:2009-02-05 21:02:48
【问题描述】:

我们目前正在创建一个需要在 SLING/OSGI 上使用 ATG 标签库的应用程序,我们已经创建了一个包含这些标签库的捆绑包并上传了它,当然这些标签库调用 ATG 类,所以我们使用 sling 将它们包含在 bootdelegation 中.properties 文件。

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 在 org.apache.sling.scripting.core.impl.DefaultSlingScript.call(DefaultSlingScript.java:163) 在 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 在 org.apache.sling.scripting.core.impl.DefaultSlingScript.call(DefaultSlingScript.java:163) 在 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 在 org.apache.sling.scripting.jsp.jasper.runtime.TagHandlerPool.get(TagHandlerPool.java:125) 在 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 上运行。

有没有办法避免导致强制转换异常的类冲突?

【问题讨论】:

  • 只是好奇:你解决了吗?

标签: jboss osgi jsp-tags jackrabbit atg


【解决方案1】:

类转换异常通常表明该类在两个不同的地方可用(在您的情况下,可能是通过引导委托,也可能是通过导出该类的包)。这是我首先要调查的。

另外,为了让事情更明确,我一般建议您不要使用引导委托,而是通过系统捆绑包明确导出这些包。这样至少您可以更好地调试类的来源以及 OSGi 解析器如何“连接”事物。

【讨论】:

    【解决方案2】:

    从 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多