【问题标题】:NoClassDefFoundError: org/w3c/dom/ElementTraversalNoClassDefFoundError: org/w3c/dom/ElementTraversal
【发布时间】:2013-07-05 02:50:06
【问题描述】:

我按照本指南安装了 Jetty 7 并为 IdP Shibboleth 正确配置了它:https://wiki.shibboleth.net/confluence/display/SHIB2/IdPJetty7Prepare

但是当我尝试启动 Jetty 时,我得到了这个错误:

NoClassDefFoundError: org/w3c/dom/ElementTraversal

要解决这个问题,我需要安装 ElementTraversal 依赖项并将其包含在我的 classpath 中。
但我怎么能做到这一点?我需要下载这个 Class [ElementTraversal.class].jar 文件吗?我可以把它放在哪里?在JETTY_HOME?我需要导出CLASSPATH吗?

有人可以帮助我吗?
非常感谢!

【问题讨论】:

    标签: java jetty shibboleth


    【解决方案1】:

    就我而言,它是gradle-spoon-plugin。这些解决方案都没有帮助。我们能做的就是将它完全从项目中删除。

    见:https://github.com/jaredsburrows/gradle-spoon-plugin/issues/96

    【讨论】:

      【解决方案2】:

      将此添加到您的文件中,以解决依赖关系:

       <dependency>
            <groupId>xml-apis</groupId>
            <artifactId>xml-apis</artifactId>
            <version>1.4.01</version>
       </dependency>
      

      【讨论】:

      • 这对我和代码都有效:` private static void generateHTMLFromPDF(String filename) throws IOException, ParserConfigurationException { PDDocument pdf = PDDocument.load(new File(filename));编写器输出 = new PrintWriter("pdf.html", "utf-8");新 PDFDomTree().writeText(pdf, 输出);输出.close(); }` 开始工作了!
      【解决方案3】:

      在我的情况下,问题是通过将 xml-apis 版本从 1.3.04 更改为 1.4.01 来解决的。

      顺便说一句,Maven Central 中不存在版本 2.10.0(我很好奇 Jon Skeet 在哪里找到它)。

      【讨论】:

      • 2016年12月这个有用答案的补充,在maven中还有一个2.0.0和2.0.2版本的xml-apis,但它们不是新jar,它们只是一个pom,说搬迁到1.0.b2。我不知道这背后是哪个团队,但是如果他们不想打开他们的代码他们不必将它放在 maven 中,这是可以理解的。但是他们把它放在那里,然后重新定位到较低的版本,这浪费了很多开发人员的时间(我看到 2.0 版本的使用超过 100 次),这是不可接受的。
      • @Tiina 这完全是我的情况……遗憾的是我无法先找到此评论。但是,您能完成这个并告诉我们如何使用 maven 获得正确的版本吗?
      • @ConquerorsHaki 我通常使用 stackoverflow 找到正确的版本。并尝试使用具有更高版本和可接受使用次数的版本。虽然我使用 xml-apis 2.0 但没有解决问题,但我查看了它的 pom,发现“重新定位到更低”糟糕。通常人们在更新 pom 后看不到任何差异时会首先考虑他们的 Internet 问题。这也是我最关心的问题。
      【解决方案4】:

      看起来 ElementTraversal 是 xml-apis-2.10.0.jar 的一部分,应该在您的 Shibboleth 安装中提供。

      因此,如果您关注these instructions,您也应该遵循此步骤:

      通过创建目录 JETTY_HOME/lib/endorsed/ 支持 Xerces 和 Xalan,并将 IdP 源 endorsed/ 目录中包含的 .jar 文件复制到新创建的目录中。

      只要你正确地复制了所有的 jar 文件,应该没问题。我的猜测是您错过了这一步 - 或者可能复制了名称为 Xalan 或 Xerces 的 jar 文件,而错过了其他两个。

      【讨论】:

      • 非常感谢,但我也已经按照这一步。我将 xalan-2.7.1.jarxercesImpl-2.10.0.jar 正确复制到 JETTY_HOME/lib/endorsed/ 中,并在 start.ini 中添加了以下行:-Djava.endorsed.dirs=lib/endorsed 我遵循了所有步骤。
      • 我在opt/shibboleth-idp/lib/endorsed/xml-apis-2.10.0.jar 中有xml-apis-2.10.0.jar。我认为问题可能出在start.ini 中定义的路径中。我可以尝试使用绝对路径-Djava.endorsed.dirs=/home/user/webapps/jetty/lib/endorsed
      • 不适用于绝对路径。谢谢 Jon Skeet,很高兴收到您对我的问题的回复。
      • @Fuiba:不清楚您是否将所有四个 jar 文件都复制到 JETTY_HOME/lib/endorsed 中。您说您在 opt/shibboleth-idp/lib/endorsed 中有 xml-apis-2.10.0.jar,但应该将它与 xalan 和 xerces jar 文件一起复制。你有吗?
      • @Fuiba:但在更改之前它已经说过“复制 IdP 源认可/目录中包含的 .jar 文件” - 我认为这不是一个错误因此,虽然我同意现在更清楚了。
      猜你喜欢
      • 1970-01-01
      • 2016-04-18
      • 2012-05-01
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 2017-05-25
      • 2014-12-15
      相关资源
      最近更新 更多