[lambda]使用forEach导致项目启动报错java.lang.ArrayIndexOutOfBoundsException: 20993

web项目应用开发时,在一个bean中定义了一个实例方法,并使用forEach对实例方法中的一个局部List集合遍历,产生如下报错

完整报错信息
Failed startup of context org.mortbay.jetty.webapp.WebAppContext@1a6f5124{/vipSystem,D:\gaotime-vip-online\gaotime-admin\webapps\vipSystem\src\main\webapp}
java.lang.ArrayIndexOutOfBoundsException: 20993
	at org.springframework.asm.ClassReader.readClass(Unknown Source)
	at org.springframework.asm.ClassReader.accept(Unknown Source)
	at org.springframework.asm.ClassReader.accept(Unknown Source)
	at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:54)
	at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80)
	at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:101)
	at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:76)
	at org.springframework.context.annotation.ConfigurationClassUtils.checkConfigurationClassCandidate(ConfigurationClassUtils.java:69)
	at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:216)
	at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:178)
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:617)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:446)
	at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:384)
	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)
	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
	at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:549)
	at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
	at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1282)
	at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:518)
	at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:499)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
	at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
	at org.mortbay.jetty.Server.doStart(Server.java:224)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
	at runjettyrun.Bootstrap.main(Bootstrap.java:97)

定位到代码中的报错位置:

public class WeChatInfoTask {
	private final Logger logger = LoggerFactory.getLogger(WeChatInfoTask.class);
	
	public void taskExecution()  {
		try {
			logger.info("开始");
			Queue<String> wechatInfoQueue = WeChatInfoQueue.getInstance().getWeChatInfoQueue();  //获取单例对象中的队列
			if (!wechatInfoQueue.isEmpty()) {
				while (wechatInfoQueue.size() > 0) {
					String wechatmag = wechatInfoQueue.poll();
					InputStream in = new ByteArrayInputStream(wechatmag.getBytes());
					//1.创建Reader对象
					SAXReader reader = new SAXReader();
					//2.加载xml
					Document document = reader.read(in);
					//3.获取根节点
					Element rootElement = document.getRootElement();
					List<Element> elements = rootElement.elements();
					JSONObject msgJsonObject = new JSONObject();
					//报错位置:
					elements.forEach(element->{
						msgJsonObject.put(element.getName(), element.getStringValue());
					});
			logger.info("结束");
		} catch (Exception e) {
			logger.info(e.getMessage());
		}
	}
}

更换此处报错代码为:

for (Element element : elements) {
	msgJsonObject.put(element.getName(), element.getStringValue());
}

正常启动(lambda表达式会判空,正常使用foreach循环遍历list集合是需要先判空的,这里只是为了测试,就没有做此步骤了);

很显然是环境问题;由于jdk版本是1.8,排除jdk无法编译的问题,怀疑是jetty版本过低导致,更换tomcat8启动,仍然报错,怀疑是spring的版本问题,升级spring版本,正常启动,查阅相关资料,spring4才支持lambda表达式,低于此版本的spring都是不支持lambda表达式的。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值