java.lang.NoClassDefFoundError:无法初始化类org.apache.commons.text.StringEscapeUtils

问题描述 投票:0回答:1

我正在编写一个字符过滤函数,使用

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);
    }
}
java filter servlet-3.0
1个回答
0
投票

我遇到了类似的问题

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
-> 成功

虽然您的情况可能涉及不同的版本或依赖项,但根本原因可能是相同的。

© www.soinside.com 2019 - 2024. All rights reserved.