HTTP状态500 - 处理程序处理失败;嵌套异常是java.lang.AbstractMethodError:

时间:2014-05-12 20:20:03

标签: spring-mvc bean-validation spring-3 jsr validationerror

请帮助我更好地学习Spring 3 MVC的基础知识,我试图了解Spring JSR 303:Bean Validation并且根本无法解决下面的问题,我已经花了一天多的时间了:(< / p>

我想在这里进行简单的验证。 hello.jsp中的名称,密码和电子邮件字段不能留空,这完全是目标。截至目前,每次尝试提交hello.jsp时,所有字段都为空白,遇到以下错误

HTTP状态500 - 处理程序处理失败;嵌套异常是java.lang.AbstractMethodError:org.hibernate.ejb.HibernatePersistence.getProviderUtil()Ljavax / persistence / spi / ProviderUtil;

错误堆栈:

HTTP Status 500 - Handler processing failed; nested exception is java.lang.AbstractMethodError: org.hibernate.ejb.HibernatePersistence.getProviderUtil()Ljavax/persistence/spi/ProviderUtil;


type Exception report

message Handler processing failed; nested exception is java.lang.AbstractMethodError: org.hibernate.ejb.HibernatePersistence.getProviderUtil()Ljavax/persistence/spi/ProviderUtil;

description The server encountered an internal error (Handler processing failed; nested exception is java.lang.AbstractMethodError: org.hibernate.ejb.HibernatePersistence.getProviderUtil()Ljavax/persistence/spi/ProviderUtil;) that prevented it from fulfilling this request.

exception 

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.AbstractMethodError: org.hibernate.ejb.HibernatePersistence.getProviderUtil()Ljavax/persistence/spi/ProviderUtil;
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:972)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


root cause 

java.lang.AbstractMethodError: org.hibernate.ejb.HibernatePersistence.getProviderUtil()Ljavax/persistence/spi/ProviderUtil;
    javax.persistence.Persistence$1.isLoaded(Persistence.java:78)
    org.hibernate.validator.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:61)
    org.hibernate.validator.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:131)
    org.hibernate.validator.engine.resolver.SingleThreadCachedTraversableResolver.isReachable(SingleThreadCachedTraversableResolver.java:46)
    org.hibernate.validator.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:1242)
    org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:448)
    org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:397)
    org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:361)
    org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:313)
    org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:139)
    org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:101)
    org.springframework.validation.DataBinder.validate(DataBinder.java:722)
    org.springframework.web.method.annotation.ModelAttributeMethodProcessor.validateIfApplicable(ModelAttributeMethodProcessor.java:155)
    org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:108)
    org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:75)
    org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:156)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:117)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

使用的所有罐子都是:

  1. ANTLR-2.7.6.jar
  2. aopalliance-1.0.jar
  3. ASM-ATTRS-1.5.3.jar
  4. CGLIB的节点p-2.2.2.jar
  5. CGLIB的节点p-2.2-sources.jar
  6. 公地集合-2.1.jar
  7. 公地DBCP-1.4.jar
  8. 共享记录-1.1.3.jar
  9. DOM4J-1.6.1.jar
  10. 冬眠-3.2.6.ga.jar
  11. 冬眠的注解-3.3.1.GA.jar
  12. 冬眠-公地注解-3.0.0.ga.jar
  13. 冬眠-的EntityManager-3.3.2.GA.jar
  14. 冬眠-JPA-2.0-API-1.0.0.Final.jar
  15. 冬眠-搜索3.0.0.GA.jar
  16. 冬眠验证器-4.2.0.Final.jar
  17. 冬眠-验证-CDI-5.1.0.Final.jar
  18. 的hsqldb.jar
  19. java的邮件1.4.4.jar
  20. javax.servlet.jsp.jstl-1.2.1.jar
  21. jsch-0.1.49.jar
  22. JS​​TL-1.2.jar
  23. jta.jar
  24. lucene的核 - 2.3.2.jar
  25. 的lucene-荧光笔-2.0.0.jar
  26. MySQL的连接器的Java-5.1.21.jar
  27. org.springframework.asm-3.1.2.RELEASE.jar
  28. org.springframework.beans-3.1.2.RELEASE.jar
  29. org.springframework.context.support_3.0.5.RELEASE.jar
  30. org.springframework.context-3.1.2.RELEASE.jar
  31. org.springframework.core-3.1.2.RELEASE.jar
  32. org.springframework.expression-3.1.2.RELEASE.jar
  33. org.springframework.orm-3.1.2.RELEASE.jar
  34. org.springframework.transaction-3.1.2.RELEASE.jar
  35. org.springframework.web.servlet-3.1.2.RELEASE.jar
  36. org.springframework.web-3.1.2.RELEASE.jar
  37. 持久性的API-1.0.jar
  38. SLF4J-API-1.7.5.jar
  39. SLF4J-API-1.7.7.jar
  40. 弹簧AOP-3.1.2.RELEASE.jar
  41. 弹簧JDBC-3.1.2.RELEASE.jar
  42. 弹簧-TX-3.1.2.RELEASE.jar
  43. 验证-API-1.1.0.Final.jar
  44. *控制器:MainController.java *

    package com.poc.controller;
    
    import java.util.Map;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.validation.BindingResult;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    
    import com.poc.bean.UserBean;
    import com.poc.service.DaoService;
    import com.poc.service.MailService;
    import com.poc.service.MailServiceImpl;
    import javax.validation.Valid;
    
    @Controller
    public class MainController {
    @Autowired
    DaoService d;
    UserBean user;
    @Autowired
    MailService mailService;
         @RequestMapping("/")
          public String hello(Model model) {
            return "hello";
          }
    
    
         @ModelAttribute("user")
         public UserBean getUserForm() {
                     return new UserBean();
    
             }
    
          @RequestMapping(value = "/hi", method = RequestMethod.POST)
          public String hi(@ModelAttribute("user")@Valid UserBean user,BindingResult result ) {
    
    
              if (result.hasErrors()) {
                    return "hello";
                } else {
    
    
              d.insert(user);
             //Send a composed mail
              mailService.sendMail(user.getEmailid(), "Registration Acknowledgement", "You have successfully registered with us. Your password is "+user.getPasswd());
              String message = "Hi " + user.getName() + "!";
            //model.addAttribute("message", message);
            return "redirect:/index";}
          }
    
          @RequestMapping("/index")
            public String listContacts(Map<String, Object> map) {
    
                map.put("user", new UserBean());
                map.put("userList", d.listAll());
    
                return "hello";
            }
    
    
    
        }
    

    hello.jsp

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
    <html>
    <!-- <style>
    .error {
        color: #ff0000;
    }
    
    .errorblock {
        color: #000;
        background-color: #ffEEEE;
        border: 3px solid #ff0000;
        padding: 8px;
        margin: 16px;
    }
    </style> -->
    
    <style>
      .error {
          color: #EF1313;
          font-style: italic;
      }
    </style>
    
    
    
    <head>
    <title>Home</title>
    </head>
    <body>
      <h1>Hello World!</h1>
    
    <hr/>
      <form:form action="hi" commandName="user">
    <table>
    <tr>
        <td><font face="verdana" size="2px">Name</font></td>
        <td>:</td>
        <td>
        <font face="verdana" size="2">
        <form:input path="name" /> <form:errors path="name"></form:errors>
        </font>
        </td>
    </tr>
    <tr>
        <td><font face="verdana" size="2px">Password</font></td>
        <td>:</td>
        <td>
        <font face="verdana" size="2">
        <form:input path="passwd" /> <form:errors path="passwd"></form:errors>
        </font>
        </td>
    </tr>
    <tr>
        <td><font face="verdana" size="2px">Email</font></td>
        <td>:</td>
        <td>
        <font face="verdana" size="2">
        <form:input path="emailid" /> <form:errors path="emailid"></form:errors>
        </font>
        </td>
    </tr>
    <tr>
        <td>
        <input type="submit" value="Submit" />
        </td>
    </tr>
    </table>
    </form:form>
    
    
    
      <h3>Users</h3>
      <c:if  test="${!empty userList}">
      <table class = "data"><tr>
      <th>Name</th>
      <th>Email</th>
      </tr>
      <c:forEach items= "${userList}" var = "user">
      <tr>
      <td>
      ${user.name}
      </td>
      <td>${user.emailid}</td>
      </tr>
      </c:forEach>
      </table>
      </c:if>
    </body>
    </html>
    

    请让我知道我肯定错过的地方。如果是jar兼容性问题,请提及我需要更换的罐子的名称。

    提前致谢。

1 个答案:

答案 0 :(得分:2)

您的库的版本并不真正一起玩。例如。你使用Hibernate ORM 3.2(实现JPA 1.0),而Hibernate Validator 4.2默认使用JPA 2(由Hibernate ORM 3.5实现)。请注意,类路径上的其他一些库看起来不正确:

  • Hibernate ORM和JPA API版本之间的不匹配
  • Hibernate Validator引擎与CDI便携式扩展之间的不匹配
  • Bean Validation API与Hibernate Validator引擎不匹配
  • 两个不同版本的slf4j API

我建议使用依赖管理工具(Ivy,Maven,Gradle)来解决这些问题。