2012-06-26 3 views
2

я получил java.lang.NullPointerException помощью CrudRepositoryNullPointerException из DAO с помощью crudRepositoy

мой проект выглядит следующим образом:

strut2 действие

служба

хранилище

домен

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>{} 

вот конфиг:

<?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> 

Я новичок здесь, и каждый раз, когда я называю класс действий, услуга вводится, но MyRepository является нулевым во все дни.

может кто-нибудь помочь мне, пожалуйста, если вам нужно больше информации, PLS, дайте мне знать, 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) 

Я также пытался отладить ее сам. я нашел на классе ServiceImpl, что @Autowired MyRepository repo имеет значение null.

+0

Какой класс реализует MyRepository? Можете ли вы показать определение здесь? –

+0

@SunilChavan Мне не нужно реализовывать MyRepository, CrudRepository предлагает возможность управлять моим pojo – Jaiwo99

+0

Не могли бы вы добавить точную трассировку стека? В стороне, декларация 'PersistenceAnnotationBeanPostProcessor' фактически не нужна. –

ответ

0

Кажется, я нашел ответ, благодарю @MartenDeinum от Spring Forum.

вот приемы:

  1. Я использую Struts2 для графического интерфейса, так что мне нужен Struts2 пружинного плагин переписать объект struts2 завод, так что пружина может найти распорки действия.

  2. я добавил этот конфиг для @Service

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

    в основном я также нуждаются в

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

    найти CrudRepository.

надеюсь, что это может помочь другим.