一个java.lang.IncompatibleClassChangeError的问题解决

引入一个第三方库做一个功能,依往常一样,引入对应的pom,对方的包里是有mina的,所以调用的相应的功能的时候报如下错误。

Exception in thread "pool-18-thread-1" java.lang.IncompatibleClassChangeError
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.register(DefaultIoFilterChain.java:267)
	at org.apache.mina.core.filterchain.DefaultIoFilterChain.addLast(DefaultIoFilterChain.java:174)
	at org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder.buildFilterChain(DefaultIoFilterChainBuilder.java:436)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor.addNow(AbstractPollingIoProcessor.java:528)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor.handleNewSessions(AbstractPollingIoProcessor.java:501)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$400(AbstractPollingIoProcessor.java:67)
	at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1116)
	at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)

看起来是mina中一个filter链在注册什么功能时候发生incompatible的错误。

首先怀疑是这个第三方库中的mina和我本地服务的mina冲突了,于是我再pom中找到所有的mina依赖 然后依次注释掉了。但是其实有些pom内部也会依赖的mina的,于是使用mvn的dependency tree命令查看子依赖

mvn dependency:tree >1.txt

然后依次exclusion掉对应的mina依赖。

<exclusions>
    <exclusion>
       <groupId>org.apache.mina</groupId>
       <artifactId>mina-core</artifactId>
    </exclusion>
</exclusions>

然后启动,发现还是报这个问题。然后debug到DefaultIoFilterChain的register方法。发现mina会依次注入logger和protocol。然后对应的报错是在注入logger的时候报错的。然后尝试再依次注释掉对应的log4j的依赖。不过还是有这个问题。

==========================================================================================

其实理论上这个问题一般环境下已经解决ok了。

我这边是由于其它原因造成的,分析继续:是不是我本地环境的问题?于是联系了中间件的同学,发现我们tomcat下有一个基础服务的sar包,这个sar包由于版本过低,和mina的服务冲突。于是升级该sar包(该sar包确实有对mina做更改)。问题解决,服务正常调用。

总结一下,这个问题整整坑了我一天,其实只是一个类冲突的问题,最后升级到了环境问题。这里总结一下,给后来的同学排坑用。

参考文档:http://stackoverflow.com/questions/1980452/what-causes-java-lang-incompatibleclasschangeerror

时间: 2024-08-27 16:07:30

一个java.lang.IncompatibleClassChangeError的问题解决的相关文章

解决java.lang.IncompatibleClassChangeError

今天整理了Maven的pom.xml文件后,把多个项目用maven集成在了一起,结果在启动Tomcat的时候,遇到一个奇葩的错误: 严重: Servlet [spring] in web application [/AbcWeb] threw load() exception java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVi

hadoop2.6.0+hive1.2启动报错java.lang.IncompatibleClassChangeError

java.lang.IncompatibleClassChangeError 不兼容的类变化错误.当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常.一般在修改了应用中的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下,容易引发该错误. [报错信息] [ERROR] Terminal initialization failed; falling back to unsupported java.lang.IncompatibleClassChangeError: Found

【JUnit 报错】java.lang.IncompatibleClassChangeError

使用Junit 测试spring时候报错: 1 java.lang.IncompatibleClassChangeError: class org.springframework.core.LocalVariableTableParameterNameDiscoverer$ParameterNameDiscoveringVisitor has interface org.springframework.asm.ClassVisitor as super class 2 at java.lang.

Maven的包依赖冲突可引发java.lang.IncompatibleClassChangeError错误

新版API上线后,发现LOG文件没有正常输出.查看Tomcat的Log文件发现如下的错误信息 May 29, 2015 7:56:21 AM com.sun.xml.ws.server.sei.EndpointMethodHandler invoke SEVERE: Found class ch.qos.logback.core.spi.CyclicBufferTracker, but interface was expected java.lang.IncompatibleClassChang

Caused by: java.lang.IncompatibleClassChangeError: Implementing class

1.错误描述 严重: StandardWrapper.Throwable org.apache.cxf.bus.extension.ExtensionException at org.apache.cxf.bus.extension.Extension.tryClass(Extension.java:167) at org.apache.cxf.bus.extension.Extension.getClassObject(Extension.java:179) at org.apache.cxf

java.lang.IncompatibleClassChangeError:可以考虑是否是jar包冲突

一.背景:启动tomcat的时候,报错: java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class 二.原因: spring-test的版本号跟spring-core等相关的spring版本不

[ERROR] Terminal initialization failed; falling back to unsupported java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected

1:出现此种错误应该是jar版本包冲突了,启动hive的时候,由于hive依赖hadoop,启动hive,会将hadoop的配置以及jar包等等导入到hive中,导致jar包版本冲突,下面贴一下错误,然后贴一下解决方法: 1 [[email protected] bin]# ./hive 2 3 Logging initialized using configuration in jar:file:/home/hadoop/soft/apache-hive-1.2.1-bin/lib/hive-

自己写一个java.lang.reflect.Proxy代理的实现

前言 Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的.本文就自己写一个Proxy类出来,功能和java.lang.reflect.Proxy一样,传入接口.代理内容,生成代理. 抛砖引玉吧,个人觉得自己写一些JDK里面的那些类挺好的,写一遍和看一遍真的是两个不同的概念,写一遍既加深了对于这些类的理解.提升了自己的写代码水平,也可以在写完之后对比一下自己的实现有哪些写得不好

cocos2d-x3.2中在Eclipse中java.lang.NullPointerException的问题解决

错误1分析:java.lang.NullPointerException即空指针,没有赋值或者赋值错误导致了空指针引用. 看看有哪里没有初始化造成空指针. 总结:java.lang.NullPointerException引用空指针错误的解决办法是仔细检查代码,看是否有实例没有初始化就 进行了引用. Eclipse的安卓开发调试环境中,不能指出是哪个变量未初始化,以及在源码的那一行,从而增加了新手调试的难度. 一般寻找该问题可通过增加断点逐步运行查找,但是由于出错语句在某个函数的最后一句,因此断