2012-11-05 95 views
0

我只是想将spring框架添加到我的项目中,但是当我尝试在jboss 6.1.0 Final中部署我的war文件时,它提供了一个错误。我得到以下错误,jboss错误中的弹簧部署

11:01:46,556 INFO [STDOUT] ERROR: org.springframework.web.context.ContextLoader - Context initializ 
ation failed 
11:01:46,557 INFO [STDOUT] org.springframework.beans.factory.BeanCreationException: Error creating 
bean with name 'com.tapgift.merchant.integration.spring.DaoFactoryPostProcessor#0' defined in class 
path resource [config/dao-defs.xml]: Cannot resolve reference to bean 'DAOFactory' while setting bea 
n property 'daoFactory'; nested exception is org.springframework.beans.factory.BeanCreationException 
: Error creating bean with name 'DAOFactory' defined in class path resource [config/dao-defs.xml]: I 
nvocation of init method failed; nested exception is java.lang.NullPointerException 

这道def.xml

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

    <!-- All DAO bean definitions goes here --> 
    <bean id="DAOFactory" 
     class="com.tapgift.merchant.integration.db.dao.jdbc.JdbcDaoFactoryImpl" /> 

    <bean class="com.tapgift.merchant.integration.spring.DaoFactoryPostProcessor"> 
     <property name="daoFactory" ref="DAOFactory" /> 
    </bean> 

    <bean id="merchantDao" 
     class="com.tapgift.merchant.integration.db.dao.jdbc.JdbcMerchantDao"> 
     <property name="dataSource" ref="dataSource" />  
     <property name="queryFactory" ref="QueryFactory" />   
    </bean> 

</beans> 

这是应用程序的context.xml

<?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" 
    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-3.1.xsd"> 

    <context:annotation-config /> 
    <context:component-scan base-package="com.tapgift.merchant" /> 

    <import resource="classpath:config/spring-integration.xml" /> 
    <import resource="classpath:config/dao-defs.xml" /> 
    <import resource="classpath:config/query-defs.xml" /> 
    <import resource="classpath:config/spring-support.xml" /> 


</beans> 

最后这是web.xml中

<!-- The definition of the Root Spring Container shared by all Servlets and Filters --> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:config/application-context.xml 
       /WEB-INF/spring/root-context.xml</param-value> 
</context-param> 

哎呀,差点错过了pom,

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.tapgift</groupId> 
    <artifactId>merchant</artifactId> 
    <name>merchant-server</name> 
    <packaging>war</packaging> 
    <version>1.0.0-BUILD-SNAPSHOT</version> 
    <properties> 
     <java-version>1.7</java-version> 
     <org.springframework-version>3.1.0.RELEASE</org.springframework-version> 
     <org.aspectj-version>1.6.9</org.aspectj-version> 
     <org.slf4j-version>1.5.10</org.slf4j-version> 
    </properties> 
    <dependencies> 
     <!-- Spring --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${org.springframework-version}</version>    
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${org.springframework-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
      <version>${org.springframework-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
      <version>${org.springframework-version}</version> 
     </dependency> 

     <dependency> 
        <groupId>commons-collections</groupId> 
        <artifactId>commons-collections</artifactId> 
        <version>3.2.1</version> 
        <scope>compile</scope> 
      </dependency> 
      <dependency> 
        <groupId>commons-lang</groupId> 
        <artifactId>commons-lang</artifactId> 
        <version>2.6</version> 
        <scope>compile</scope> 
      </dependency> 
      <dependency> 
       <groupId>commons-io</groupId> 
       <artifactId>commons-io</artifactId> 
       <version>2.0.1</version> 
       <scope>compile</scope> 
      </dependency> 
      <dependency> 
       <groupId>commons-dbcp</groupId> 
       <artifactId>commons-dbcp</artifactId> 
       <version>1.4</version> 
       <scope>compile</scope> 
      </dependency> 

     <!-- AspectJ --> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>${org.aspectj-version}</version> 
     </dependency> 

     <!-- Logging --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>${org.slf4j-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jcl-over-slf4j</artifactId> 
      <version>${org.slf4j-version}</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>${org.slf4j-version}</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.15</version>   
      <exclusions> 
       <exclusion> 
        <groupId>javax.mail</groupId> 
        <artifactId>mail</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>javax.jms</groupId> 
        <artifactId>jms</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>com.sun.jdmk</groupId> 
        <artifactId>jmxtools</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>com.sun.jmx</groupId> 
        <artifactId>jmxri</artifactId> 
       </exclusion> 
      </exclusions> 
      <scope>compile</scope> 
     </dependency> 

     <!-- @Inject --> 
     <dependency> 
      <groupId>javax.inject</groupId> 
      <artifactId>javax.inject</artifactId> 
      <version>1</version> 
     </dependency> 

     <!-- Servlet --> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.5</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>jsp-api</artifactId> 
      <version>2.1</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 

     <!-- JSON view resolver --> 
     <dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-mapper-asl</artifactId> 
      <version>1.9.2</version> 
     </dependency> 

     <!-- Test --> 
     <!-- <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.7</version> 
      <scope>test</scope> 
     </dependency> -->  
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-eclipse-plugin</artifactId> 
       <version>2.9</version> 
       <configuration> 
        <additionalProjectnatures> 
         <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> 
        </additionalProjectnatures> 
        <additionalBuildcommands> 
         <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> 
        </additionalBuildcommands> 
        <downloadSources>true</downloadSources> 
        <downloadJavadocs>true</downloadJavadocs> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
        <compilerArgument>-Xlint:all</compilerArgument> 
        <showWarnings>true</showWarnings> 
        <showDeprecation>true</showDeprecation> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>exec-maven-plugin</artifactId> 
       <version>1.2.1</version> 
       <configuration> 
        <mainClass>org.test.int1.Main</mainClass> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

我可以看到编译和汇编到war文件的所有文件。感谢,如果春天的专家能指出我这个部署错误的原因。

编辑:新增DaoFactoryImpl

package com.tapgift.merchant.integration.db.dao.jdbc; 

import java.lang.reflect.ParameterizedType; 
import java.util.HashMap; 
import java.util.Map; 

import org.springframework.beans.BeansException; 
import org.springframework.beans.factory.InitializingBean; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.ApplicationContextAware; 

import com.tapgift.merchant.integration.db.dao.BaseDao; 
import com.tapgift.merchant.integration.db.dao.DaoFactory; 
import com.tapgift.merchant.integration.db.dao.EntityBaseDao; 

/** 
* Class <code>CaseServiceImpl</code> is an implementation of the <tt>DaoFactory</tt> interface. 
*/ 
public class JdbcDaoFactoryImpl implements DaoFactory, InitializingBean, ApplicationContextAware 
{ 
    private ApplicationContext m_appCtx; 
    private Map<String, EntityBaseDao<?>> m_daoMap = new HashMap<String, EntityBaseDao<?>>(); 

    /** 
    * {@inheritDoc}. 
    */ 
    @Override 
    @SuppressWarnings("rawtypes") 
    public void afterPropertiesSet() throws Exception 
    { 
     Map<String, BaseDao> beanMap = m_appCtx.getBeansOfType(BaseDao.class); 
     for (final BaseDao dao : beanMap.values()) 
     { 
      m_daoMap.put(((EntityBaseDao) dao).getEntityType().getName(), (EntityBaseDao) dao); 
     } 
    } 

    /** 
    * {@inheritDoc}. 
    */ 
    @Override 
    public BaseDao getDao(String name) 
    { 
     return this.m_daoMap.get(name); 
    } 

    /** 
    * {@inheritDoc}. 
    */ 
    @Override 
    public <T> T getEntityDao(Class<T> clazz) 
    { 
     String entityName = ((Class) ((ParameterizedType) clazz.getGenericInterfaces()[0]).getActualTypeArguments()[0]) 
      .getSimpleName().toUpperCase(); 
     return clazz.cast(this.m_daoMap.get(entityName)); 
    } 

    /** 
    * Set method for m_appCtx 
    */ 
    @Override 
    public void setApplicationContext(ApplicationContext appCtx) throws BeansException 
    { 
     this.m_appCtx = appCtx; 
    } 

} 

更新2 这个问题似乎被创建JdbbcDaoFactoryimpl例如,当我删除了 <bean id="DAOFactory" class="com.tapgift.merchant.integration.db.dao.jdbc.JdbcDaoFactoryImpl" />与它的依赖,我可以没有任何问题进行部署。我检查了战争文件,所有弹簧罐都属于同一版本。拼命地需要帮助。

回答

0

没关系,我能够解决它,与Ajinkya显示的有点相关。 对此代码的JdbcDaoFactoryImpl问题是m_daoMap.put(((EntityBaseDao) dao).getEntityType().getName()((EntityBaseDao) dao).getEntityType()没有返回任何值,但为空。我忘了重写/删除实际的dao实现类的特定方法。一旦我删除该方法,我就能够部署它,而不会面临任何问题。

无论如何感谢您的支持。

1

问题:

无法解析参考豆 'DAOFactory' 同时设定豆 财产 'daoFactory';

原因:

错误创建名为 'DAOFactory' 类路径限定 资源[配置/ DAO-defs.xml]豆:init方法的调用失败; 嵌套的例外是显示java.lang.NullPointerException

春天不能创建的DAOFactoryJdbcDaoFactoryImpl对象,因为它遇到了NullPointerException在初始化对象。
添加一些有助于找出确切原因的相关代码。


更新: 看起来像下面的行导致了问题

Map<String, BaseDao> beanMap = m_appCtx.getBeansOfType(BaseDao.class); 

春节没能找到BaseDao类型的豆。确保你已经定义了一个类型的豆BaseDao

+0

嗨Ajinkya,谢谢,用'JdbcDaoFactoryImpl'来源更新了这个问题。 – bluelabel

+0

@bluelabel:我已经更新了答案。 – xyz