无法加载或实例化 TagLibraryValidator 类:org.apache.taglibs.standard.tlv.JstlCoreTLV

Posted

技术标签:

【中文标题】无法加载或实例化 TagLibraryValidator 类:org.apache.taglibs.standard.tlv.JstlCoreTLV【英文标题】:Failed to load or instantiate TagLibraryValidator class: org.apache.taglibs.standard.tlv.JstlCoreTLV 【发布时间】:2013-01-05 18:16:00 【问题描述】:

所以我在 Gemini 运行时下的 OSGi 中使用 JSTL。当我尝试访问我的servlet 的网址时,我遇到了以下异常:-

SEVERE: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: /WEB-INF/login.jsp (line: 3, column: 66) Unable to read TLD "META-INF/c.tld" from JAR file "file:/D:/OSGi%20Runtime/Gemini/gemini-web/dep/com.springsource.javax.servlet.jsp.jstl-1.2.0.v20110728.jar": org.apache.jasper.JasperException: Failed to load or instantiate TagLibraryValidator class: org.apache.taglibs.standard.tlv.JstlCoreTLV

但是,我已经检查过,我的运行时中已经拥有所有必要的捆绑包。我拥有的相关捆绑包是:-

71  ACTIVE      javax.servlet_3.0.0.v201103241009
73  ACTIVE      javax.el_2.2.0.v201105051105
74  ACTIVE      javax.servlet.jsp_2.2.0.v201103241009
75  ACTIVE      com.springsource.javax.servlet.jsp.jstl_1.2.0.v20110728
121 ACTIVE      com.springsource.org.apache.taglibs.standard_1.1.2.v20110517

还有更多捆绑包,但那些是相关的。所以,我不明白出了什么问题。

从我下载捆绑包的Spring Source Repository,很明显,org.apache.taglibs.standard 捆绑包 - 捆绑包 121 包含 JstlCoreTLV class。 所以,不确定,这里发生了什么。

这是我正在使用的 JSP 标头(以防万一,它是相关的):-

<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>

我正在使用:-

Servlet 3.0 JSP 2.2 Gemini Runtime 2.1 JSTL 1.2.0

更新:-

下面描述的问题似乎已经解决,现在我没有收到任何警告,如下所示。那是因为,我有 taglibs.standard_1.1.2 - (Bundle 121),它与其他人不兼容。所以,我删除了它,警告就消失了。

所以,从这里开始,您可以忽略任何内容。但是,上面的问题仍然存在。我仍然收到JasperException。这可能会进一步帮助,因为由于@BalusC 的宝贵意见,现在问题域有所减少。


解决后的部分。所以,你可以忽略它:-

另外,我不确定我拥有的 OSGi JSTL 包的版本 - Bundle 75 是否与其他包兼容 - javax.eltaglibsservlets 等。因为我使用的是JSTL 1.2.1,但我无法获得JSTL 1.2.1 的捆绑包。我得到的是我使用的捆绑包 (JSTL 1.2.0)。为什么这让我感到困扰是因为当我启动我的应用程序时会出现这些类型的消息:-

Jan 22, 2013 7:14:05 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core is already defined
Jan 22, 2013 7:14:05 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/core is already defined
Jan 22, 2013 7:14:05 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt_rt is already defined
Jan 22, 2013 7:14:05 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt is already defined
Jan 22, 2013 7:14:05 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/fmt is already defined
Jan 22, 2013 7:14:05 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/functions is already defined

如您所见,上面显示了两个不同的 URL:-

URI:http://java.sun.com/jstl/core URI:http://java.sun.com/jsp/jstl/core

现在,AFAIK 这两个 URL 不属于相同的 JSTL 版本。 那么,这会引发一些问题吗?他们来的原因是什么?我刚刚使用了一个JSTL bundle

【问题讨论】:

您检查过it's SO wiki 中的JSTL 吗?它可以帮助你解开这个谜题。 【参考方案1】:

首先,我认为我不能真正回答这个问题,不知道这是否与你有关。

我也一直在努力解决这个问题,直到我切换到Pax Web。它几乎是开箱即用的。我打算回过头来弄清楚为什么我以前的设置不起作用,但是,它从未发生过。

因此,如果在您的情况下可能,请使用 Pax Web 而不是手动挑选您自己的捆绑包。

【讨论】:

感谢@Frank 的回复。 PaxWeb 似乎很有趣。但同样,如果我考虑切换到使用它,那么将我的整个项目从 Equinox 切换到 Pax Web 对我来说有点困难。此外,由于它是与项目相关的任务,所以我怀疑我可以切换到它。我还是会考虑的。但当然,那将是我最后的赌注。甚至不确定,因为我宁愿从JSP 切换到Adobe Flex 用于UI 目的,而不是为我当前的项目切换到PaxWeb,这是我们迄今为止所做的。这对我来说很容易。 但是你给了我一个新的东西来研究。也许我可以在下一个项目中尝试一下。感谢那。但是现在,我希望有人能真正帮助我破解这个Equinox Stuff。 对不起,我的意思是 Gemini,无论我在前两个 cmets 中所说的 Equinox 是的,我预料到了。坚持住,有人会帮你的!【参考方案2】:
com.springsource.javax.servlet.jsp.jstl_1.2.0.v20110728
com.springsource.org.apache.taglibs.standard_1.1.2.v20110517

您正在将 JSTL 1.2.0 API+impl 与 JSTL 1.1.2 impl 混合使用。

这两个 impl 相互冲突,这解释了您所看到的所有问题。

摆脱 1.1.2 impl。

另见:

Our JSTL wiki page

【讨论】:

感谢@BalusC 的回复。我删除了 taglibs.standard 包,因为它导出的包与第一个包导出的包冲突。令人惊讶的是,例外是相同的。没有成功:( :( 没有脏部署?你能探索出烘焙 WAR/deploy 的 /WEB-INF/lib 吗? @BalusC.. 抱歉,我没听懂你的最后一行。您的意思是在WAR 文件中探索/WEB-INF/lib 是的,很抱歉问的有点笼统,我以前从未使用过 OSGi。 绝对没问题。实际上,我现在看到自己正在朝着解决方案迈进。 :) 我将我的 WebApp 重新导出为 WAR,并使用新的 WAR 文件更新了我的环境。现在,我没有收到我在 OP 中发布的那些警告。而且,context 现在正在由侦听器正确初始化。早些时候,它不是。但是,再次,当我继续触发 URL 时,只有那个令人毛骨悚然的例外。【参考方案3】:

这只是在黑暗中拍摄。不确定您是否遇到以下链接。

您发布的错误消息“无法加载或实例化 TagLibraryValidator 类:org.apache.taglibs.standard.tlv.JstlCoreTLV”似乎很常见。

从此链接: http://christerblog.wordpress.com/2010/05/04/tag-library-woes-deploying-war-on-tomcat-6/

您的 WAR 文件中是否有任何冲突/不兼容的 jar 库?

这里的另一个也指向构建路径中不兼容的 jar: Unable to read TLD "META-INF/c.tld"

【讨论】:

谢谢@Zenil.. 但我已经访问了那个 SO 链接。它没有帮助。就冲突/不兼容的 Jar 而言,我已经检查了 10 次。没有不兼容。 :( :( @Rohit 。您可以发布完整的堆栈跟踪吗?我看到了另一个链接,该链接最终将此问题追溯到 ClassCastExeption 。那是因为他的 tomcat 通用库的 jsp-api.jar 与他的应用程序 jar 不兼容。 archives.ryandaigle.com/articles/2005/1/27/… 对不起兄弟。我只能在明天到达我的办公室时发布堆栈跟踪。 此错误消息的共性继续让我相信它是一个 jar 问题..坚持下去..:)- 好吧,无论我在哪里尝试寻找解决方案,我都只得到这个作为解决方案。但是,不幸的是,我找不到任何不兼容的 JAR 文件。明天我还是会再看看。【参考方案4】:

我从Tomcat 8 升级到Tomcat 9,它的125: jstl.jar,taglibs-standard-spec-*.jar, 中有catalina.properties。这是否意味着预装了 jstl,不像 tomcat 8 在 build.gradle 中需要 jstl 1.2

因为我必须删除以下几行才能使其正常工作

//compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0'
//compile group: 'javax.servlet.jsp.jstl', name: 'jstl', version: '1.2'

如果我的答案不正确,请告诉我,我很乐意将其删除。因为@BalusC 的回答给了我线索。

【讨论】:

【参考方案5】:

我的 JSP 文件遇到了完全相同的问题。

服务器 - Tomcat 10

我从我的 JSP 中删除了标签库(如下),它对我有用

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

【讨论】:

以上是关于无法加载或实例化 TagLibraryValidator 类:org.apache.taglibs.standard.tlv.JstlCoreTLV的主要内容,如果未能解决你的问题,请参考以下文章

错误:无法加载语言字符串:实例化

无法从 nib 实例化 UIView。 “警告:无法加载任何 Objective-C 类信息”

无法实例化 p5.js 代码(实例模式)

错误:“无法实例化 firebase-storage - 请务必先加载 firebase-app.js”

Amazon Aurora 1.8 从 S3 加载数据 - 无法实例化 S3 客户端

无参数实例化Configuration对象以及addResource无法加载core-site.xml中的内容