Quantcast
Channel: Spring Community Forums - Data
Viewing all articles
Browse latest Browse all 297

@Autowired Not Working For Repository, Works For Other Classes

$
0
0
I am attempting to autowire a repository into one of my classes but I cannot get it to work and it has been driving me crazy for the past couple days. NOTE: The program will run and the autowiring of person import will work if I comment out the @Autowire on personRepository inside the personImport class so I know the problem lies with the autowiring of PersonRepository. Here are my classes...

Code:

package com.mycompany.springwork;

import com.mycompany.springwork.service.PersonImport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 *
 * @author Anthony
 */
@Controller
public class HomeController {
  @Autowired
  PersonImport personImport;

  @RequestMapping(value = "/", method = RequestMethod.GET)
    public String Home()
    {
      personImport.doImportPerson("anthony");
      return "index";
    }
}

Code:

package com.mycompany.springwork.domain;
import java.util.Date;
import org.springframework.data.neo4j.annotation.GraphId;
import org.springframework.data.neo4j.annotation.Indexed;
import org.springframework.data.neo4j.annotation.NodeEntity;
import org.springframework.data.neo4j.support.index.IndexType;

/**
 *
 * @author Anthony
 */
@NodeEntity
public class Person {
    @GraphId Long nodeId;
    @Indexed(unique=true)
    String id;
    @Indexed(indexType=IndexType.FULLTEXT, indexName = "people")
    String name;
    Date birthday;
   
  public Person(String id, String name)
    {
    this.id = id;
    this.name = name;
    }
    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}

Code:

package com.mycompany.smsdatabase.service;
import com.mycompany.smsdatabase.domain.Person;
import com.mycompany.smsdatabase.repositories.PersonRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;


/**
 *
 * @author Anthony
 */
@Service
@Transactional
public class PersonImport  {

 @Autowired
PersonRepository PersonRepository;

 public Person doImportPerson( String id)
 { 
  Person person = PersonRepository.findById(id);
  if (person == null) {
    person = new Person(id,"anthony");
    }
  PersonRepository.save(person);
    System.out.println("inside doImportPerson");
    return null;
 }
}

Code:

import com.mycompany.springwork.domain.Person;
import org.springframework.data.neo4j.repository.GraphRepository;


/**
 *
 * @author Anthony
 */
public interface PersonRepository extends GraphRepository<Person>{
    Person findById(String id);
}

APPLICATION CONTEXT.XML

Code:

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

    <mvc:annotation-driven />
   
    <context:component-scan base-package="com.mycompany.smsdatabase">
    </context:component-scan>
   
    <context:spring-configured/>
   
    <neo4j:config storeDirectory="target/data/graph.db"/>
    <neo4j:repositories base-package="com.mycompany.smsdatabase.repositories"/>
   
    <bean id="graphDatabaseService" class="org.neo4j.test.ImpermanentGraphDatabase" destroy-method="shutdown"/>
    <tx:annotation-driven mode="proxy"/>
   
</beans>

When i attempt to run the program, it gives me this error (a lot of it had to be omitted to allow it to be posted)

Code:

HTTP Status 500 - Servlet.init() for servlet appServlet threw exception

type Exception report

message Servlet.init() for servlet appServlet threw exception

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet.init() for servlet appServlet threw exception
        org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
        org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
        org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1852)
        java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        java.lang.Thread.run(Thread.java:722)

root cause

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'homeController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.mycompany.smsdatabase.service.PersonImport com.mycompany.smsdatabase.controller.HomeController.personImport; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personImport': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.mycompany.smsdatabase.repositories.PersonRepository com.mycompany.smsdatabase.service.PersonImport.PersonRepository; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.mycompany.smsdatabase.repositories.PersonRepository] 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)}


Viewing all articles
Browse latest Browse all 297

Trending Articles