Question

I have an issue in STS, where it is displaying an error in my context.xml file when referencing the jpa:repositories node. It does not prevent the app from running (actually seems to be working well), but I cannot get the error to go away.

Error:

Error occured processing XML 'Class
org/springframework/data/repository/config/RepositoryComponentProvider illegally 
accessing "package private" member of class org/springframework/context/
annotation/AnnotationConfigUtils'. See Error Log for more details

Segment of XML with problem:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <tx:annotation-driven transaction-manager="transactionManagerSpecial" />
    <jpa:repositories base-package="com.testcompany.**.repository" transaction-manager-ref="transactionManagerSpecial"></jpa:repositories>

Spring version (core/tx/beans/test/aop/context/expression): 4.0.2.RELEASE

Spring Data JPA version: 1.5.0.RELEASE

Hibernate version (not sure why this would matter): 4.2.1.Final

POM:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test.spring</groupId>
<artifactId>test-spring-transactional</artifactId>
<version>1.0.1</version>
<packaging>jar</packaging>
<name>Spring Transactional Test Project</name>
<url>http://www.imatestapp.com</url>
<description>This project is a minimal jar utility with Spring configuration for Hibernate set up.</description>
<properties>
    <maven.test.failure.ignore>true</maven.test.failure.ignore>
    <spring.framework.version>4.0.2.RELEASE</spring.framework.version>
    <hibernate.version>4.2.1.Final</hibernate.version>
    <spring.framework.data.version>1.5.0.RELEASE</spring.framework.data.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>${hibernate.version}</version>
    </dependency>
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.0.0.GA</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.framework.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.framework.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${spring.framework.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>${spring.framework.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.framework.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>${spring.framework.data.version}</version>
    </dependency>
    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.2.2</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.16</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>

Dependency Tree (updated to Spring Data 1.5.2, still same issue):

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ test-spring-transactional ---
[INFO] com.test.spring.template:test-spring-transactional:jar:1.0.1
[INFO] +- org.hibernate:hibernate-entitymanager:jar:4.3.5.Final:compile
[INFO] |  +- org.jboss.logging:jboss-logging:jar:3.1.3.GA:compile
[INFO] |  +- org.jboss.logging:jboss-logging-annotations:jar:1.2.0.Beta1:compile
[INFO] |  +- org.hibernate:hibernate-core:jar:4.3.5.Final:compile
[INFO] |  |  +- antlr:antlr:jar:2.7.7:compile
[INFO] |  |  \- org.jboss:jandex:jar:1.1.0.Final:compile
[INFO] |  +- dom4j:dom4j:jar:1.6.1:compile
[INFO] |  |  \- xml-apis:xml-apis:jar:1.0.b2:compile
[INFO] |  +- org.hibernate.common:hibernate-commons-annotations:jar:4.0.4.Final:compile
[INFO] |  +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile
[INFO] |  +- org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:jar:1.0.0.Final:compile
[INFO] |  \- org.javassist:javassist:jar:3.18.1-GA:compile
[INFO] +- javax.validation:validation-api:jar:1.0.0.GA:compile
[INFO] +- org.springframework:spring-test:jar:4.0.2.RELEASE:test
[INFO] |  \- org.springframework:spring-core:jar:4.0.2.RELEASE:compile
[INFO] |     \- commons-logging:commons-logging:jar:1.1.3:compile
[INFO] +- org.springframework:spring-context-support:jar:4.0.2.RELEASE:compile
[INFO] |  \- org.springframework:spring-beans:jar:4.0.2.RELEASE:compile
[INFO] +- org.springframework:spring-aop:jar:4.0.2.RELEASE:compile
[INFO] |  \- aopalliance:aopalliance:jar:1.0:compile
[INFO] +- org.springframework:spring-orm:jar:4.0.2.RELEASE:compile
[INFO] |  +- org.springframework:spring-jdbc:jar:4.0.2.RELEASE:compile
[INFO] |  \- org.springframework:spring-tx:jar:4.0.2.RELEASE:compile
[INFO] +- org.springframework:spring-context:jar:4.0.2.RELEASE:compile
[INFO] |  \- org.springframework:spring-expression:jar:4.0.2.RELEASE:compile
[INFO] +- org.springframework.data:spring-data-jpa:jar:1.5.2.RELEASE:compile
[INFO] |  +- org.springframework.data:spring-data-commons:jar:1.7.2.RELEASE:compile
[INFO] |  +- org.aspectj:aspectjrt:jar:1.7.4:compile
[INFO] |  +- org.slf4j:slf4j-api:jar:1.7.6:compile
[INFO] |  \- org.slf4j:jcl-over-slf4j:jar:1.7.6:runtime
[INFO] +- commons-dbcp:commons-dbcp:jar:1.2.2:compile
[INFO] |  \- commons-pool:commons-pool:jar:1.3:compile
[INFO] \- log4j:log4j:jar:1.2.16:compile

**Update based upon responses below to update to Spring Data JPA 1.5.2**

Updating to JPA 1.5.2 "may" have resolved the above issue (as the XML is no longer complaining about referencing a private method), but still has reference issues. Now my repository cannot find the "PagingAndSorting" repository that is referenced by JpaRepository (although it can find JpaRepository itself):

package com.fedins.template.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.fedins.template.model.Account;

public interface AccountRespository extends JpaRepository<Account, String> {

}

2 errors in this interface:

(base class error)
The type org.springframework.data.domain.Sort cannot be resolved. It is indirectly referenced from required .class files 

(error on JpaRepository declaration)
The type org.springframework.data.repository.PagingAndSortingRepository cannot be resolved. It is indirectly referenced from required .class files

**Final Update** The issue above was a problem with the local Maven repository. After resolving that, I ended up with a clean project... Except for a final error on the jpa:repositories element:

AnnotationConfigUtils.processCommonDefinitionAnnotations(…) is not public! Make sure you're using Spring 3.2.5 or better. The class was loaded from file:/C:/Program Files/STS/3.4/plugins/org.springframework.context_4.0.0.20130829-M3.jar.:org.springframework.context.annotation.AnnotationConfigUtils.processCommonDefinitionAnnotations(org.springframework.beans.factory.annotation.AnnotatedBeanDefinition)

After some searching, I found this may be an issue with STS 3.4: https://jira.spring.io/i#browse/DATAJPA-490 I will be upgrading to STS 3.5 to see if it solves the issue.

Was it helpful?

Solution

This is most certainly due to your classpath not set up correctly. The relevant method we're trying to use is AnnotationConfigUtils.processCommonDefinitionAnnotations(AnnotatedBeanDefinition abd) from Spring Context. This method has been made public in version 3.2.5 and 4.0.0. So if your classpath was set up as you described, the exception wouldn't occur.

I recommend to upgrade to a newer version of Spring Data JPA (1.5.2.RELEASE being the latest as of the time of this writing) as we introduced a dedicated check for the method being present and public to give a better exception than the one you currently get.

It might some other library that pull in a Spring JAR in an older version but by default, the Spring Data projects definitely pull in Spring versions that are compatible with the library.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top