java.lang.NoClassDefFoundError:当我向控制器发送无效值时javax / el / PropertyNotFoundException

我使用MockMvc进行控制器测试

@Test public void updateEvent() throws Exception{ MockHttpServletRequestBuilder request = MockMvcRequestBuilders .post("/updateEvent"); request.param("selectedEventStatusId", "1"); request.param("selectedEventTypeId", "1"); Event eventFromDb = createAndSaveEvent(); request.param("idEvent", eventFromDb.getId().toString()); request.param("name", eventFromDb.getName()); request.param("description", eventFromDb.getDescription() +"____");//the reason of problem. if I will write request.param("description", eventFromDb.getDescription() ); its good work mapping if this field below request.param("date", new SimpleDateFormat("yyyy-MM-dd").format(eventFromDb.getDate())); request.param("eventDate", new SimpleDateFormat("yyyy-MM-dd").format(eventFromDb.getEventDate())); ResultActions result = mockMvc.perform(request).andDo(MockMvcResultHandlers.print()); result.andExpect(MockMvcResultMatchers.view().name("redirect:eventDetails")); result.andExpect(MockMvcResultMatchers.model().attributeExists("idEvent")); result.andExpect(MockMvcResultMatchers.model().attributeExists("message")); } 

描述字段标记为

  @Size(min=5) @Pattern(regexp="[a-zA-Z]*") private String description; 

我在执行后看到下一个stackTrace:

  org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundException at org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1259) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945) at .... 

在生产模式下它很好,但在测试中,如果我没有值,我会看到错误

控制器方法:

 @RequestMapping(value = "/updateEvent", method = RequestMethod.POST) public String updateEvent(Model model, @Valid @ModelAttribute("existedEvent") Event event, BindingResult result, @ModelAttribute("linkedCandidates") Set candidates, @ModelAttribute("linkedvacancies") Set vacancies, @RequestParam(required = true, value = "selectedEventStatusId")Integer EventStatusId, @RequestParam(required = true, value = "selectedEventTypeId")Integer EventTypeId , RedirectAttributes attributes) { if (result.hasErrors()) { //model.addAttribute("idEvent", event.getId()); event.setCandidates(candidates); event.setVacancies(vacancies); return "eventDetails"; } eventService.updateEventAndLinkedEntities(event, candidates, vacancies,EventTypeId,EventStatusId); attributes.addAttribute("idEvent",event.getId() ); attributes.addAttribute("message", "submitted correctly at "+new Date()); return "redirect:eventDetails"; } 

如果我更换

  request.param("description", eventFromDb.getDescription() +"____"); 

 request.param("description", eventFromDb.getDescription();//valid value here 

这是好作品

你能帮忙解决一下吗?

UPDATE

pom.xml(子模块 – 在这里运行的测试)

  4.0.0 com.epam.hhs ui hhsystem ui war 1.0.0-SNAPSHOT  1.6 3.2.3.RELEASE 3.1.3.RELEASE 1.6.10 1.6.6  3.2.3.RELEASE     org.springframework spring-context ${org.springframework-version}    commons-logging commons-logging     org.springframework spring-webmvc ${org.springframework-version}   org.springframework spring-beans ${org.springframework-version}    org.springframework.security spring-security-web ${org.springsecurity-version}   org.springframework.security spring-security-config ${org.springsecurity-version}   org.springframework.security spring-security-core ${org.springsecurity-version}   org.springframework.security spring-security-taglibs ${org.springsecurity-version}   spring-aop org.springframework      javax.validation validation-api 1.1.0.Final   org.hibernate hibernate-validator 5.0.1.Final    com.epam.hhs core 1.0.9-SNAPSHOT   com.epam.hhs core 1.0.9-SNAPSHOT tests    org.aspectj aspectjrt ${org.aspectj-version}    org.slf4j slf4j-api ${org.slf4j-version}   org.slf4j jcl-over-slf4j ${org.slf4j-version} runtime   org.slf4j slf4j-log4j12 ${org.slf4j-version} runtime   log4j log4j 1.2.15   javax.mail mail   javax.jms jms   com.sun.jdmk jmxtools   com.sun.jmx jmxri   runtime    javax.inject javax.inject 1    javax.servlet servlet-api 2.5 provided   javax.servlet.jsp jsp-api 2.1 provided   javax.servlet jstl 1.2 provided   javax.el el-api 2.2 provided    junit junit 4.7 test   org.mockito mockito-all 1.9.5   <!--  org.springframework spring-test-mvc 1.0.0.M2 test  -->  org.springframework spring-test ${spring-framework.version} test   org.hamcrest hamcrest-all 1.3 test  <!--  junit junit 4.10 test   hamcrest-core org.hamcrest    --> <!--  com.github.springtestdbunit spring-test-dbunit 1.0.0 test   org.dbunit dbunit 2.4.8 test  -->    spring-milestone Spring Portfolio Milestone Repository http://repo.springsource.org/milestone/      maven-eclipse-plugin 2.9   org.springframework.ide.eclipse.core.springnature   org.springframework.ide.eclipse.core.springbuilder  true true    org.apache.maven.plugins maven-compiler-plugin 2.5.1  1.6 1.6 -Xlint:all true true    org.codehaus.mojo exec-maven-plugin 1.2.1  org.test.int1.Main   <!--  org.apache.maven.plugins maven-surefire-plugin 2.12  always   -->    

pom.xml(父模块)

   4.0.0 com.epam.hhs core 1.0.9-SNAPSHOT hhsystem core <!--war -->   1.6 UTF-8 UTF-8  3.2.3.RELEASE 1.3.2.RELEASE 3.1.3.RELEASE  2.2 1.2 2.5 2.2.7  4.2.1.Final  4.3.1.Final  7.0.37 2.6.6 2.2.9  1.7.2  1.0.13 1.7.5  1.0  4.11 1.3  1.3 1.1.1 2.2 3.1.0.CR6  2.3.0 1.9.2 1.9.0 0.8.14 5.1.22    log4j log4j 1.2.17   org.mule.transports mule-transport-http 3.4.0   log4j log4j 1.2.17   org.springframework spring-beans 3.2.1.RELEASE  <!--  javax.servlet jstl ${jstl.version}   javax.servlet servlet-api ${servlet.version} provided   javax.servlet.jsp jsp-api ${jsp.version} provided  -->  com.sun.xml.bind jaxb-impl ${jaxb-impl.version} provided    org.springframework.data spring-data-jpa ${spring-data-jpa.version}   org.springframework *     org.springframework spring-jdbc ${spring-framework.version}   org.springframework spring-aop ${spring-framework.version}   org.springframework spring-webmvc ${spring-framework.version}   org.springframework spring-tx ${spring-framework.version}    org.springframework spring-context-support ${spring-framework.version}   org.springframework spring-orm ${spring-framework.version}   org.springframework spring-oxm ${spring-framework.version}   commons-lang commons-lang     org.springframework spring-jms ${spring-framework.version}    org.apache.tomcat tomcat-jdbc ${tomcat-jdbc.version} runtime   <!--  mysql mysql-connector-java ${mysql.version}  -->  com.microsoft.sqlserver sqljdbc4 3.0  <!--  mysql mysql-connector-java ${mysql.version}  -->   org.hibernate hibernate-core ${hibernate.version}   org.hibernate hibernate-entitymanager ${hibernate.version}   org.hibernate hibernate-validator ${hibernate-validator.version}   org.hibernate hibernate-ehcache ${hibernate.version}   mysql mysql-connector-java 5.1.25    org.webjars bootstrap ${webjars-bootstrap.version}   org.webjars jquery-ui ${webjars-jquery-ui.version}   org.webjars jquery ${webjars-jquery.version}    org.springframework spring-test ${spring-framework.version} test   junit junit ${junit.version} test    org.hamcrest hamcrest-library ${hamcrest.version} test   org.aspectj aspectjrt ${aspectj.version}   org.aspectj aspectjweaver ${aspectj.version} runtime    org.springframework.security spring-security-web ${org.springsecurity-version}   org.springframework.security spring-security-config ${org.springsecurity-version}   org.springframework.security spring-security-core ${org.springsecurity-version}   org.ow2.easybeans easybeans-uberjar-eclipselink 1.2.0-M1     install    ${project.basedir}/src/test/java   ${project.basedir}/src/test/resources     org.apache.maven.plugins maven-compiler-plugin 3.0     true ${java.version} ${java.version} true    org.apache.maven.plugins maven-surefire-plugin     org.apache.maven.plugins maven-eclipse-plugin 2.9  true true 2.0  **/*.*    org.springframework.ide.eclipse.core.springbuilder   org.eclipse.m2e.core.maven2Builder    org.eclipse.jdt.core.javanature org.springframework.ide.eclipse.core.springnature org.eclipse.m2e.core.maven2Nature     org.apache.maven.plugins maven-assembly-plugin 2.4   jar-with-dependencies     org.apache.tomcat.maven tomcat7-maven-plugin 2.0  tomcat-development-server 9966 /petclinic    org.apache.maven.plugins maven-jar-plugin 2.4    test-jar        

我重启我的电脑,现在我看到其他错误(也许我改变了一些东西但我发布了pom.xml的实际dtate)

 org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoSuchMethodError: javax.el.ExpressionFactory.newInstance()Ljavax/el/ExpressionFactory; at org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1259) at ... 

如果我在2.2上更改jsp-api版本

我看到下一个痕迹:

  updateEvent(com.epam.hhsystem.web.controllers.EventMenuControllerTest) Time elapsed: 0.398 sec <<< ERROR! org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.ExceptionInInitializerError at org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1259) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) .... Caused by: java.lang.ExceptionInInitializerError at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.interpolateExpression(ResourceBundleMessageInterpolator.java:227) .... Caused by: javax.el.ELException: Provider com.sun.el.ExpressionFactoryImpl not found at javax.el.FactoryFinder.newInstance(FactoryFinder.java:97) ... Caused by: java.lang.ClassNotFoundException: com.sun.el.ExpressionFactoryImpl at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 

我遇到了同样的问题,添加以下依赖项解决了这个问题。

当你遇到javax / el / PropertyNotFoundException时,那意味着你错过了el-api依赖,你可以添加以下jar

   javax.el el-api 2.2 provided  

要么

  javax.el javax.el-api 3.0.0 test  

然后你遇到了ClassNotFoundException:com.sun.el.E​​xpressionFactoryImpl,你错过了el-impl jar:

  org.glassfish.web el-impl 2.2 test  

将以下内容添加到您的pom中。

  org.glassfish.web el-impl 2.2.6 test  

它将解决对javax.el的需求。 当前版本是2.2.6

我没有在我的pom.xml中使用el-impl

   javax.servlet servlet-api 2.5 provided   javax.servlet.jsp jsp-api 2.2 provided   javax.servlet jstl 1.2 provided   javax.el el-api 2.2 provided   org.glassfish.web el-impl 2.2  

它是pom.xml的工作状态

我删除的更多

 servlet-api jsp-api jstl el-api 

来自tomcat/lib jar文件

并从m2./repository复制。

您可能只需要在测试中添加依赖项。 你在用maven吗? 如果是这样,你能尝试将它添加到你的pom吗? 你可能需要一个不同的jar /版本,但是这样的东西:

  javax.el javax.el-api 3.0.0 test