jdk1.8 和spring 2.5.5 兼容性问题

原创 2016年05月30日 17:27:17

先看异常:

nested exception is java.lang.ArrayIndexOutOfBoundsException: 9578
 at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
 at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
 at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76)
 at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:182)
 at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:147)
 at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:132)
 at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:507)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
 at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
 at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:92)
 at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
 at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:423)
 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:353)
 at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
 at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
 at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)

由于工程中配置了 扫描jar包,类比较多,不好定位,我在本地实现的测试,代码如下:

public class MyMetadataReader implements MetadataReader {

    private final ClassReader classReader;

    private final ClassLoader classLoader;


    public MyMetadataReader(ClassReader classReader, ClassLoader classLoader) {
        this.classReader = classReader;
        this.classLoader = classLoader;
    }


    public ClassMetadata getClassMetadata() {

        ClassMetadataReadingVisitor visitor = new ClassMetadataReadingVisitor();
        this.classReader.accept(visitor, true);
        return visitor;
    }

    public AnnotationMetadata getAnnotationMetadata() {
        AnnotationMetadataReadingVisitor visitor = new AnnotationMetadataReadingVisitor(this.classLoader);
        this.classReader.accept(visitor, true);
        return visitor;
    }

}

测试:

ClassReader reader = new ClassReader(in);
                       MetadataReader metadataReader = new MyMetadataReader( reader, classLoader);
                       metadataReader.getAnnotationMetadata();

最终获取了 这个读取错误的class文件,发现,里面使用了java8的 lambda表达式特性

firstElements.forEach(e -> root.add(e.addAttribute("class","1").detach()));
            secondElements.forEach(e -> root.add(e.addAttribute("class","2").detach()));
            thirdElements.forEach(e -> root.add(e.addAttribute("class","3").detach()));

ClassReader 这个类在spring4.X中重写了,不禁要问,如果spring不升级到4.x,难道真的无法使用java8 新特性?如果是这样的话,真是个好大的坑!

经过测试,在Spring 2.5.5 使用注解扫描时,会使用到 类ComponentScanBeanDefinitionParser中的方法,进而会调用 ClassReader中的方法,则Spring无法正常初始化。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

spring2.5+JDK1.8报错的解决办法

annotation-config are only available on JDK 1.5 and higher

spring2.5.6在jdk1.8环境下运行的问题

首先说下我的javaEE开发环境:spring2.5.6+hibernate3.6.0+struts2.3.1.1+myeclipse2014+tomcat8 myeclipse开发时候里面自带的j...

spring2.5+JDK1.8 版本报错的解决办法

转自:http://blog.csdn.net/frt007/article/details/50880648   今天遇到一个工程,启动时报这个错!可明明我的JDK是1.8呀。 原来这个工...

spring3.2与jdk1.8不兼容问题

JDK1.8 + spring 3.2 启动项目报错DispatcherServlet - Context initialization failed java.lang.IllegalArgume...

JDK8与Spring4以下的版本不兼容问题

昨天将一个myEclipse的web项目转换为Eclipse的Web项目时,出现了如下错误: Failed to read candidate component class: file     [...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

spring2.5各jar包的作用

除了spring.jar文件,Spring还包括有其它13个独立的jar包,各自包含着对应的Spring组件,用户可以根据自己的需要来选择组合自己的jar包,而不必引入整个spring.jar的所有类...
  • H12KJGJ
  • H12KJGJ
  • 2016年12月20日 17:48
  • 463

Spring MVC 学习笔记(二) 基于spring2.5注解实现的spring MVC项目

建立web项目 导入jar包(spring.jar, spring-webmvc.jar, commons-logging.jar。其他jar包为hibernate相关jar包) 3 . 修改web....

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

spring2.5+JDK1.8报错的解决办法

转自:http://blog.csdn.net/zhaohuihua/article/details/50572861 annotation-config are only available on...
  • frt007
  • frt007
  • 2016年03月13日 21:50
  • 2340
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jdk1.8 和spring 2.5.5 兼容性问题
举报原因:
原因补充:

(最多只允许输入30个字)