0

my application just tests if the environment is basically working. therefore i set up a testclass corresponding to the "Hello Worlds" example which can be found in the gitHub repository of SpringSource. Neo4j is included as static web app and runs embedded. The Webinterface is not nescessarily needed. The Problem is, when i'm starting to run the testcases via Junit i get an error like this:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'GalaxyServiceTests': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private GalaxyService GalaxyServiceTests.galaxyService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [GalaxyService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

my application config is like this

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:neo4j="http://www.springframework.org/schema/data/neo4j"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/data/neo4j
            http://www.springframework.org/schema/data/neo4j/spring-neo4j.xsd">
<context:annotation-config/>
<bean id="graphDatabaseService" class="org.neo4j.kernel.EmbeddedGraphDatabase"
    destroy-method="shutdown">
    <constructor-arg index="0" value="target/graph.db" />
    <constructor-arg index="1">
        <map><entry key="enable_remote_shell" value="true"/></map>
    </constructor-arg>
</bean>
<!-- <bean id="serverWrapper" class="org.neo4j.server.WrappingNeoServerBootstrapper"  -->
<!--    init-method="start" destroy-method="stop"> -->
<!--    <constructor-arg ref="graphDatabaseService"/> -->
<!-- </bean> -->
</beans>

The testclass is quity simple

@ContextConfiguration( "file:c:/Users/ben/Dropbox/Semester 6/VM Graphentheorie/devEnv/bodega/application-context.xml")

@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
public class GalaxyServiceTests {

//  @Autowired
//  private GalaxyService galaxyService;

    @Autowired
    private Neo4jTemplate template;

    @Rollback(false)
    @BeforeTransaction
    public void cleanUpGraph() {
        Neo4jHelper.cleanDb(template);
    }

    @Test
    public void allowWorldCreation(){
//      GraphDatabaseService     graphDatabaseService =  new GraphDatabaseFactory().newEmbeddedDatabase( "target/graph.db" );
//      Node abc = graphDatabaseService.createNode();
//      abc.setProperty("name","ben");

        World abc = new World("Erde",1);
        template.save(abc);

and my pom looks like this:

<dependencies>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>3.0.4.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>3.0.7.RELEASE</version>
    <scope>test</scope>
    <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
</dependency>
        <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.1</version>
        <scope>test</scope>
    </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-neo4j</artifactId>
            <version>2.2.0.BUILD-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>3.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.neo4j.app</groupId>
            <artifactId>neo4j-server</artifactId>
            <version>2.0.0-M02</version>
            <classifier>static-web</classifier>
        </dependency>

Since im new to spring in connection with neo4j i cant resolve this error. if someone got a hint or some advice - thanks in advance

EDIT i changed the dependency of spring-data from 2.2.0.BUILD-SNAPSHOT to 2.2.0.RELEASE.. now neo4j is running till the point when an error is passed to console:

21:11:48.196 [main] ERROR o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@7e26f5a7] to prepare test instance [GalaxyServiceTests@64d74895]
java.lang.IllegalStateException: Failed to load ApplicationContext

EDIT2 I've published the repository on http://github.com/BenMatheja/bodega

EDIT3 Something with the path of application-context.xml was messed up. I fixed that issue with @ContextConfiguration( locations = {"classpath:/META-INF/application-context.xml"})

I'm at the point that an Exception

No qualifying bean of type [start.GalaxyService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency

is thrown each time i run the JUnit4 test now.

EDIT4 I managed to get it working yesterday. Some parts of the Application-context were pretty messed up.

<context:spring-configured/>
<context:annotation-config/>
<context:component-scan base-package="components"/>
<neo4j:config graphDatabaseService="graphDatabaseService"/>
<neo4j:config storeDirectory="target/graph.db"/>
<neo4j:repositories base-package="Repositories"/>

This is a snippet of my working app-context. Furthermore i missed to attach an @Service to the GalaxyService class.

Now everything is working as intended. This will maybe help someone facing the same problem.

Ben Matheja
  • 115
  • 2
  • 2
  • 12

0 Answers0