2012-06-26 4 views
2

i se java.lang.NullPointerException en utilisant CrudRepositoryNullPointerException de DAO en utilisant crudRepositoy

mon projet ressemble à ceci:

action strut2

Service

dépôt

domaine

class Action { 
    @Autowired MyService service; 
    public String execute(){ 
    service.getList(); 
    return "ok"; 
    } 
} 

interface Service { 
    List getList(); 
} 

@org.springframework.stereotype.Service 
class ServiceImpl implements Service { 
    @Autowired MyRepository repo; 
    List getList(){ 
    return (List)repo.findAll(); 
    } 
} 
package com.mycompany.repositories; 
interface MyRepository extends CrudRepository<MyPojo, String>{} 

ici est la config:

<?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:tx="http://www.springframework.org/schema/tx" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
     xsi:schemaLocation=" http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
          http://www.springframework.org/schema/context 
          http://www.springframework.org/schema/context/spring-context-3.1.xsd 
          http://www.springframework.org/schema/tx 
          http://www.springframework.org/schema/tx/spring-tx-3.1.xsd 
          http://www.springframework.org/schema/data/jpa 
          http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"> 

    <jpa:repositories base-package="com.mycompany.repositories" /> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" > 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
     <property name="jpaDialect"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /> 
     </property> 
    </bean> 
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="persistenceUnitName" value="unit-name" /> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="showSql" value="true" /> 
       <property name="generateDdl" value="true" /> 
       <property name="database" value="POSTGRESQL"/> 
      </bean> 
     </property> 
    </bean> 
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="username" value="root" /> 
     <property name="password" value="root" /> 
     <property name="driverClassName" value="org.postgresql.Driver" /> 
     <property name="url" value="jdbc:postgresql://127.0.0.1:5432/mydb" /> 
    </bean> 

    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"></bean> 

    <tx:annotation-driven transaction-manager="transactionManager" /> 
</beans> 

Je suis nouveau ici, et chaque fois que j'appelle la classe d'action, le service est injecté, mais MyRepository est alway nulle.

pourrait quelqu'un m'aider s'il vous plaît, si vous avez besoin de plus d'infos, pls faites le moi savoir, thx!

EDIT 1

StackTrace:

2012-06-26 15:33:32,041 INFO - com.myproject.action.project.preparation.ApplicationAction - listing application... 
java.lang.NullPointerException 
    at com.myproject.service.impl.ApmProjectPreparationServiceImpl.getAllApplications(ProjectPreparationServiceImpl.java:41) 
    at com.myproject.action.project.preparation.ApplicationAction.listAction(ApplicationAction.java:67) 
    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:601) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:453) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:292) 

J'ai aussi essayé de déboguer par moi-même. J'ai trouvé sur la classe ServiceImpl que le @Autowired MyRepository repo est null.

+0

Quelle classe implémente MyRepository? Pouvez-vous montrer la définition ici? –

+0

@SunilChavan Je n'ai pas besoin d'implémenter MyRepository, CrudRepository offre la possibilité de faire fonctionner mon pojo. – Jaiwo99

+0

Pourriez-vous ajouter la trace exacte de la pile? En aparté, la déclaration de 'PersistenceAnnotationBeanPostProcessor' n'est pas vraiment nécessaire. –

Répondre

0

Semble que j'ai trouvé la réponse, merci @MartenDeinum de Spring Forum.

voici les astuces:

  1. J'utilise struts2 pour l'interface graphique, donc j'ai besoin plugin printemps struts2 pour réécrire l'usine d'objet struts2, de sorte que le ressort peut trouver action entretoises.

  2. i ajouté cette config pour @Service

    <context:component-scan base-package="com.myproject" /> 
    

    essentiellement j'ai besoin aussi

    <jpa:repositories base-package="com.myproject.repository" /> 
    

    pour trouver CrudRepository.

espérons que cela puisse aider les autres.

Questions connexes