NoSuchMethodError:Spring配置中的registerAutoProxyCreatorIfNecessary(ParserContext; Object;)exception

我的春季项目有点问题。 我有这个配置:applicationContext.xml

                         

弹簧security.xml文件

               

faces-config.xml中

     org.springframework.web.jsf.el.SpringBeanFacesELResolver    userTestManagedBeans cz.web.managedBeans.UserTestManagedBeans session  ejb #{userBean}    registrationManagedBean cz.web.managedBeans.pub.RegistrationManagedBean request  registrationBean #{registerUserBean}    

web.xml中

    facesServlet javax.faces.webapp.FacesServlet 1   facesServlet *.xhtml   org.springframework.web.context.ContextLoaderListener   org.springframework.web.context.request.RequestContextListener    index.xhtml   contextConfigLocation  /WEB-INF/spring/*.xml    encoding-filter  org.springframework.web.filter.CharacterEncodingFilter   encoding UTF-8   forceEncoding true    encoding-filter /*    springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy   springSecurityFilterChain /*   

的pom.xml

  4.0.0 cz.web TestWebApp 1.0-SNAPSHOT war TestWebApp  ${project.build.directory}/endorsed UTF-8 4.0.0.RELEASE 2.0.8 3.2.0.RELEASE 4.0 5.1.6     mysql mysql-connector-java ${mysql.version}    org.primefaces primefaces ${primefaces.version}    org.springframework spring-core ${spring.version}   org.springframework spring-web ${spring.version}   org.springframework spring-tx ${spring.version}   org.springframework spring-jpa ${spring.jpa.version}   org.springframework spring-aop ${spring.version}   org.springframework.security spring-security-core ${spring.security.version}   org.springframework.security spring-security-web ${spring.security.version}   org.springframework.security spring-security-config ${spring.security.version}   org.springframework.security spring-security-crypto ${spring.security.version}    javax.inject javax.inject 1    com.sun.faces jsf-api 2.1.13   com.sun.faces jsf-impl 2.1.13   javax.servlet jstl 1.2   javax.servlet servlet-api 2.5   javax.servlet.jsp jsp-api 2.1    org.glassfish.web el-impl 2.2   org.eclipse.persistence eclipselink 2.5.0-SNAPSHOT   javax javaee-web-api 6.0 provided      org.apache.maven.plugins maven-compiler-plugin 2.3.2  1.6 1.6  ${endorsed.dir}  true    org.apache.maven.plugins maven-war-plugin 2.1.1  false    org.apache.maven.plugins maven-dependency-plugin 2.1   validate  copy   ${endorsed.dir} true   javax javaee-endorsed-api 6.0 jar           http://download.eclipse.org/rt/eclipselink/maven.repo/ eclipselink default Repository for library EclipseLink (JPA 2.1)    

这是我的class级:

 package cz.web.ejb.pub; import cz.web.entity.Party; import java.io.Serializable; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContextType; import javax.persistence.Query; import javax.ws.rs.core.HttpHeaders; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; public class UserRegistrationBean implements Serializable { @PersistenceContext(type = PersistenceContextType.EXTENDED) private EntityManager em; private PasswordEncoder passwordEncoder; public void setPasswordEncoder(PasswordEncoder passwordEncoder) { this.passwordEncoder = passwordEncoder; } @Transactional public String registerUser( String firstName, String secondName, String userName, String password, String emailAddress) { Query q = em.createNamedQuery("Party.GetByUserName"); q.setParameter("userName", userName); List users = q.getResultList(); if(!users.isEmpty()){ return "register"; } final String encode_password = passwordEncoder.encode(password+userName+emailAddress); Party newUser = new Party(userName, firstName, secondName, emailAddress, encode_password); em.persist(newUser); return "index"; } } 

当我试图运行该应用程序时,我得到了这个例外:

 SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from ServletContext resource [/WEB-INF/spring/applicationContext.xml]; nested exception is java.lang.NoSuchMethodError: org.springframework.aop.config.AopNamespaceUtils.registerAutoProxyCreatorIfNecessary(Lorg/springframework/beans/factory/xml/ParserContext;Ljava/lang/Object;)V at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:413) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:335) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:216) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:187) at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125) at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94) at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129) at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:540) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:454) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:381) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:293) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:663) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:542) at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1468) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1447) at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:862) at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:358) at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:611) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2430) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2419) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) Caused by: java.lang.NoSuchMethodError: org.springframework.aop.config.AopNamespaceUtils.registerAutoProxyCreatorIfNecessary(Lorg/springframework/beans/factory/xml/ParserContext;Ljava/lang/Object;)V at org.springframework.transaction.config.AnnotationDrivenBeanDefinitionParser.parseInternal(AnnotationDrivenBeanDefinitionParser.java:54) at org.springframework.beans.factory.xml.AbstractBeanDefinitionParser.parse(AbstractBeanDefinitionParser.java:60) at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:74) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1424) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1414) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:187) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:141) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:110) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:508) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391) ... 57 more 

当我删除

  

从application.xml,一切正常。 但是当我调用registerUser方法时,用户不会存储在数据库中。 当我尝试em.flush()方法时,我得到了没有事务正在运行的exception。 当我尝试em.getTransaction()。begin()时,我得到了exception,我在注入时无法创建事务。 我发现这个Unexpectedexception从ServletContext资源[/WEB-INF/applicationContext.xml]解析XML文档; 建议修复spring-security-core中的版本,但我想我没问题。

非常感谢您的帮助

方法

 org.springframework.aop.config.AopNamespaceUtils#registerAutoProxyCreatorIfNecessary(ParserContext, Object) 

Spring 4.0.0.RELEASE中删除了,但似乎你的Spring Security或JPA库需要它。 你将不得不降级到Spring 3.2.X.RELEASE

通过从类路径中删除spring-dao – * .jar来为我工作,它起作用了。 谢谢,

小心! 可能你已经导入了org.springframework.security:spring-security-core:2.xx ,其中包含org.springframework:spring-aop:2.xx 。 同时,同时你也使用org.springframework:spring:2.5.x

spring-aop和spring模块都具有相同的AopNamespaceUtils类。 所以,请这样做以防止导入spring-aop:

 compile('org.springframework.security:spring-security-core:2.0.4') { exclude(group: 'org.springframework') }