记录一次NoSuchMethodError问题的解决()

  本篇文章为你整理了记录一次NoSuchMethodError问题的解决()的详细内容,包含有 记录一次NoSuchMethodError问题的解决,希望能帮助你了解 记录一次NoSuchMethodError问题的解决。

  一、问题描述

  今天在执行单元测试时遇到了一个NoSuchMethodError错误,完整的报错信息如下:

  

...

 

  Caused by: javax.validation.ValidationException: HV000183: Unable to initialize javax.el.ExpressionFactory. Check that you have the EL dependencies on the classpath, or use ParameterMessageInterpolator instead

   at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.buildExpressionFactory(ResourceBundleMessageInterpolator.java:102)

   at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator. init (ResourceBundleMessageInterpolator.java:45)

   at org.hibernate.validator.internal.engine.ConfigurationImpl.getDefaultMessageInterpolator(ConfigurationImpl.java:423)

   at org.hibernate.validator.internal.engine.ConfigurationImpl.getDefaultMessageInterpolatorConfiguredWithClassLoader(ConfigurationImpl.java:575)

   at org.hibernate.validator.internal.engine.ConfigurationImpl.getMessageInterpolator(ConfigurationImpl.java:364)

   at org.hibernate.validator.internal.engine.ValidatorFactoryImpl. init (ValidatorFactoryImpl.java:144)

   at org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:38)

   at org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:331)

   at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:103)

   at com.focus.candy.rpc.IValidation. clinit (IValidation.java:23)

   ... 65 more

  Caused by: java.lang.NoSuchMethodError: javax.el.ExpressionFactory.newInstance()Ljavax/el/ExpressionFactory;

   at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.buildExpressionFactory(ResourceBundleMessageInterpolator.java:98)

   ... 74 more

  

 

  这意思是说,想要程序调用javax.el.ExpressionFactory.newInstance这个方法,但是到ExpressionFactory里面一看,哈,这个方法他不!存!在!。
 

  他这么大一个方法,怎么好好的就没了呢?
 

  好吧,这就是接下来要调查的事情。

  二、排查过程

  一般来说,应该是在类路径里面有两个类名相同,包路径也相同的类。
 

  程序调到了错误的同名类,所以找不到方法。
 

  让我们来看看到底是哪个jar包的小可爱在这捣乱。
 

  使用idea的同学请双击Shift键,全局搜索ExpressionFactory。(使用其他IDE的同学请自行查阅相关手册)
 

  查找的结果如下:
 

  
 

  在jsp-api-2.1.jar和javax.el-api-2.2.4.jar里面都存在javax.el.ExpressionFactory。
 

  然后把类打开看看,发现jsp-api-2.1.jar里面的ExpressionFactory没有newInstance方法。
 

  好吧,把jsp-api-2.1.jar排掉,问题解决。

  三、解决方法

  嗯,把jsp-api-2.1.jar排掉。
 

  不过这不是重点。重点是找到冲突的类,然后解决这个冲突。
 

  解决方法有可能是排除不需要的jar包,也可能是升级jar包或者换个jar包,这个要依据当时的情况来看了。

  本文由博客一文多发平台 OpenWrite 发布!

  以上就是记录一次NoSuchMethodError问题的解决()的详细内容,想要了解更多 记录一次NoSuchMethodError问题的解决的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: