我正在编写一个字符过滤函数,使用
commons-text-1.6.jar
。java.lang.NoClassDefFoundError: Could not initialize class org.apache.commons.text.StringEscapeUtils
cc.openhome.web.EscapeWrapper.getParameter(EscapeWrapper.java:15)
cc.openhome.controller.Login.doPost(Login.java:30)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
cc.openhome.web.EscapeFilter.doFilter(EscapeFilter.java:16)
代码:
package cc.openhome.web;
import org.apache.commons.text.StringEscapeUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrappe
public class EscapeWrapper extends HttpServletRequestWrapper {
public EscapeWrapper(HttpServletRequest req){enter code here
super(req);
}
public String getParameter(String name){
String value = getRequest().getParameter(name);
return StringEscapeUtils.escapeHtml4(value);
}
}
我遇到了类似的问题
commons-text-1.11.0.java
。尽管 org.apache.commons.text.StringEscapeUtils
中存在 commons-text-1.11.0.jar
,但我收到了以下异常:
java.lang.NoClassDefFoundError: Could not initialize class org.apache.commons.text.StringEscapeUtils
问题并非源于
StringEscapeUtils
的缺失,而是源于它的初始化。事实上,StringEscapeUtils
有多个静态初始化块,它们在类加载器第一次加载它时运行。如果这些静态块在初始加载期间遇到问题,则会导致 java.lang.NoClassDefFoundError
异常。
commons-text
依赖于其他库,尤其是 commons-lang3
。他们的版本不一致可能会导致异常,就像我的情况一样:
commons-text-1.11.0
与 commons-lang3:3.12.0
-> 失败
但是,将
commons-lang3
升级为 3.13.0
解决了问题:
commons-text-1.11.0
与 commons-lang3:3.13.0
-> 成功
虽然您的情况可能涉及不同的版本或依赖项,但根本原因可能是相同的。