![](/img/trans.png)
[英]java.lang.NoClassDefFoundError: javax/servlet/ServletContext
[英]Byte Buddy - java.lang.NoClassDefFoundError: javax/servlet/ServletRequest
我正在尝试检测javax.servlet.Servlet
接口实现的service
方法,如下所示:
.transform(
new AgentBuilder.Transformer.ForAdvice()
.include(MyAgent.class.getClassLoader())
.advice(
named("service")
.and(takesArgument(0, ServletRequest.class))
.and(takesArgument(1, ServletResponse.class))
, "com.MyAdvice"
)
)
现在,如果我通过agentmain
将此代理附加到已经运行的 Spring 引导应用程序 - 我在尝试访问任何 web 页面时看到以下异常
java.lang.LinkageError: loader constraint violation: when resolving method 'void javax.servlet.http.HttpServletRequestWrapper.<init>(javax.servlet.http.HttpServletRequest)'
the class loader org.springframework.boot.loader.LaunchedURLClassLoader @18be83e4 of the current class,
org/springframework/web/servlet/resource/ResourceUrlEncodingFilter$ResourceUrlEncodingRequestWrapper, and the class loader 'app' for the method's defining class, javax/servlet/http/HttpServletRequestWrapper,
have different Class objects for the type javax/servlet/http/HttpServletRequest used in the signature (org.springframework.web.servlet.resource.ResourceUrlEncodingFilter$ResourceUrlEncodingRequestWrapper is in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader @18be83e4, parent loader 'app'; javax.servlet.http.HttpServletRequestWrapper is in unnamed module of loader 'app')
我理解它是因为javax/servlet/http/HttpServletRequest
实例是从 2 个不同的 jars 加载的 - 一个通过代理加载,另一个通过 spring 引导嵌入 tomcat。如果我尝试设置 scope,如代理的pom.xml
do not388 中provided
的那样 [ 因为我想要在代理捆绑 jar 中包含 servlet-api 并尝试使用已经提供的 servlet-api 实现从 Spring 启动],我得到Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletRequest
- 可能是因为加载代理的类加载器不能'看不到 spring 启动提供的 servlet api。
是否有任何可能的解决方法或修复方法来解决这种情况? 感谢您的宝贵时间和反馈。
理想情况下,您的代理不包含此类。 相反,通过名称匹配类: takesArgument(0, named("javax.servlet.ServletRequest"))
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.