在application-context.xml
中定义mongo存储库时遇到问题以下是我在xml中得到的错误
Error occured processing XML tried to access method org.springframework.context.annotation.AnnotationConfigUtils.processCommonDefinitionAnnotations (Lorg/springframework/beans/factory/annotation/AnnotatedBeanDefinition;)V from class org.springframework.data.repository.config.RepositoryComponentProvider'. See Error Log for more details servlet-context.xml /master/WebContent/WEB-INF/config line 24 Spring Beans Problem
我附上了env的截图供参考。 我正在使用eclipse Kepler版本和pom属性文件就像这样
<java-version>1.7</java-version>
<org.springframework-version>4.0.1.RELEASE</org.springframework-version>
<org.jackson-version>2.3.0</org.jackson-version>
<spring-data-mongodb>1.4.0.RELEASE</spring-data-mongodb>
Spring数据公共版本是1.7 spring data mongo db 1.4版。 当我打开上下文xml时,我在eclipse项目中看到了错误。
有趣的是,我有另一个项目运作良好。唯一的区别是它没有spring MVC和jackson二进制文件,否则它的类似项目。
异常堆栈跟踪:
!ENTRY org.springframework.ide.eclipse.beans.core 1 0 2014-03-01 00:04:11.839!MESSAGE错误发生处理 '/master/WebContent/WEB-INF/config/servlet-context.xml'!STACK 0 java.lang.IllegalAccessError:试图访问方法 org.springframework.context.annotation.AnnotationConfigUtils.processCommonDefinitionAnnotations(Lorg / springframework的/豆类/工厂/注解/ AnnotatedBeanDefinition;)V 来自课堂 org.springframework.data.repository.config.RepositoryComponentProvider 在 org.springframework.data.repository.config.RepositoryComponentProvider.findCandidateComponents(RepositoryComponentProvider.java:121) 在 org.springframework.data.repository.config.RepositoryConfigurationSourceSupport.getCandidates(RepositoryConfigurationSourceSupport.java:69) 在 org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport.getRepositoryConfigurations(RepositoryConfigurationExtensionSupport.java:54) 在 org.springframework.data.repository.config.RepositoryConfigurationDelegate.registerRepositoriesIn(RepositoryConfigurationDelegate.java:88) 在 org.springframework.data.repository.config.RepositoryBeanDefinitionParser.parse(RepositoryBeanDefinitionParser.java:67) 在 org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:74) 在 org.springframework.ide.eclipse.beans.core.internal.model.namespaces.DelegatingNamespaceHandlerResolver $ ElementTrackingNamespaceHandler.parse(DelegatingNamespaceHandlerResolver.java:177) 在 org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1427) 在 org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig $ ErrorSuppressingBeanDefinitionParserDelegate.parseCustomElement(BeansConfig.java:1400) 在 org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1417) 在 org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:187) 在 org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig $ ToolingFriendlyBeanDefinitionDocumentReader.doRegisterBeanDefinitions(BeansConfig.java:1330) 在 org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:110) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:494) 在 org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig $ 2.registerBeanDefinitions(BeansConfig.java:402) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:335) 在 org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig $ 2.loadBeanDefinitions(BeansConfig.java:388) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303) 在
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Enables the Spring MVC @Controller programming model -->
<mvc:annotation-driven />
<context:component-scan base-package="com.xxxx.yyyyy" />
<!-- Mongo DB Configuration -->
<mongo:mongo id="mongo" host="monopolyvm3" port="27017" />
<mongo:db-factory dbname="test" mongo-ref="mongo" />
<mongo:db-factory id="mongoDbFactory" dbname="cloud" mongo-ref="mongo" />
<mongo:repositories base-package="com.xxxx.yyyyy" />
<bean id="mappingContext" class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" />
<bean id="defaultMongoTypeMapper"
class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
<constructor-arg name="typeKey"><null/></constructor-arg>
</bean>
<bean id="mappingMongoConverter" class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
<constructor-arg name="mappingContext" ref="mappingContext" />
<property name="typeMapper" ref="defaultMongoTypeMapper" />
</bean>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg ref="mongoDbFactory" />
<constructor-arg name="mongoConverter" ref="mappingMongoConverter" />
<property name="writeConcern" value="SAFE" />
</bean>
</beans>
错误见于以下行..
答案 0 :(得分:13)
在我的情况下,它是导致问题的spring数据jpa版本。我没有使用spring数据mongodb而是使用spring数据jpa。我今天开始使用最新版本( spring-framework 4.0.2.RELEASE,spring-data-jpa 1.5.0.RELEASE )。我确保maven的所有传递依赖(来自spring端和spring数据端)是最新版本但没有锁定。
遵循此主题,尝试将spring版本降级到4.0.0.RELEASE但没有运气。我甚至在我的工作区内从spring-context-4.0.2.RELEASE.jar(以及spring-context-4.0.0.RELEASE.jar)中探索了org.springframework.context.annotation.AnnotationConfigUtils类,并确认了processCommonDefinitionAnnotations是一个公共方法,因此IllegalAccessError不能成为这些jar产生的问题。
最后,我将我的spring-data-jpa从1.5.0.RELEASE降级到1.4.4.RELEASE,并且所有问题都在maven更新中得到解决。如果它可以帮助任何人,我正在使用STS 3.4。
由于这是我在谷歌搜索此错误时发现的第一篇文章,想到将其发布在此处,以便其他遇到相同问题的人可以通过此提示解决问题。我在https://jira.springsource.org/browse/DATAJPA-490
打开了错误报告@Oliver,尝试过依赖管理建议,但没有运气。我还根据请求将依赖项列表输出添加到错误报告中。
答案 1 :(得分:2)
最后我将spring jar版本更改为4.0.0,然后从maven存储库中删除所有spring jar并尝试(再次更新maven)再次构建..它工作正常。我很确定它也适用于4.0.1弹簧罐。(我正在使用相同配置的另一个项目,它与4.0.1罐子工作正常:))我将这个问题贡献给maven和eclipse。有些问题我根本没有任何线索。
答案 2 :(得分:1)
确保您不会意外地将较旧的Spring版本(3.2.5之前的版本)引入类路径。旧方法没有公共异常中列出的方法。然后这会导致异常。我建议使用以下Maven配置代码段来强制所有Spring库都在4.0.2中:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>4.0.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
答案 3 :(得分:0)
我遇到了同样的问题。花了几个小时与这个问题作斗争@ Avnish的回答指出了我正确的方向。更具体地说,他在https://jira.springsource.org/browse/DATAJPA-490开设的问题确实让事情变得清晰。
Spring-Data-JPA 1.5.1.BUILD-SNAPSHOT或1.6.0.BUILD-SNAPSHOT有一个防护装置,可以准确指出导致问题的罐子。
在我的情况下,我使用Eclipse Juno(4.2)和Spring IDE 3.4.0导致了这个问题。我不得不升级到Spring IDE 3.5.0以使问题消失。我不得不使用http://dist.springsource.com/snapshot/TOOLS/nightly/e4.2更新站点将Juno更新到Spring IDE 3.5.0。
似乎STS 3.5.0RC1及更高版本也能正常运行。
答案 4 :(得分:0)
真正的解决方案是将您的eclipse / STS spring插件升级到最新版本。
https://jira.springsource.org/browse/DATAJPA-490中提到了这一点,但不是很清楚。