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.ExpressionFactoryImpl,你错过了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