弹簧3.2.9;瓷砖2.0.7;调用init方法失败;嵌套异常为java.lang.IllegalArgumentException:未指定数据源

弹簧3.2.9;瓷砖2.0.7;调用init方法失败;嵌套异常为java.lang.IllegalArgumentException:未指定数据源,java,spring,spring-mvc,spring-webflow-2,Java,Spring,Spring Mvc,Spring Webflow 2,我正在尝试将我们的Spring项目从2.5.6更新到3.2.9。我们使用的是Tiles 2.0.7和SpringWebFlow 2.3。我遇到了一个错误,在堆栈溢出或其他论坛中没有相关的解决方案: (部分堆栈跟踪): #### 最后是LkTimezonesDAO.java中的一节: package com.fruit.apples.customer.dao; import com.fruit.apples.customer.webdisplay.LkTimeZone; import java

我正在尝试将我们的Spring项目从2.5.6更新到3.2.9。我们使用的是Tiles 2.0.7和SpringWebFlow 2.3。我遇到了一个错误,在堆栈溢出或其他论坛中没有相关的解决方案: (部分堆栈跟踪):

####
最后是LkTimezonesDAO.java中的一节:

package com.fruit.apples.customer.dao;

import com.fruit.apples.customer.webdisplay.LkTimeZone;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.dao.EmptyResultDataAccessException;

public class LkTimezonesDAO extends CustomerWebDaoImpl
   {
private static final long serialVersionUID = 2367566965661648309L;

/**
 * getAllLkTimeZones retrieves all data for LkTimeZoneObjects. The data
 * populates the List Object passed to this method with LkTimeZone objects
 * as appropriate for the data retrieved
 *
 * @param  listToLoad  the List Object to be populated
 */
public void getAllLkTimeZones( List<LkTimeZone> listToLoad )
{
    listToLoad.clear();
    JdbcTemplate jcTemplate = new JdbcTemplate();
    List<Map<String, Object>> rows = jcTemplate.queryForList(queries.get( "allLkTimezonesQuery" ) );

    if ( (rows!=null) || (0 < rows.size() ) )
    {
        for ( Map<String,Object> row : rows )
        {
            listToLoad.add( initializeLkTimeZone( row ) );
        }
    }
}

/**
 * getAllLkTimeZones retrieves only active data for LkTimeZoneObjects. The
 * data populates the List Object passed to this method with LkTimeZone
 * objects as appropriate for the data retrieved
 *
 * @param  listToLoad  the List Object to be populated
 */
public void getActiveLkTimeZones( List<LkTimeZone> listToLoad )
{
    listToLoad.clear();
    JdbcTemplate jcTemplate = new JdbcTemplate();

    List<Map<String, Object>> rows = jcTemplate.queryForList(queries.get( "activeLkTimezonesQuery" ) );

    if ( ( rows != null ) || ( 0 < rows.size() ) )
    {
        for ( Map<String,Object> row : rows )
        {
            listToLoad.add( initializeLkTimeZone( row ) );
        }
    }
}
包com.fruit.apples.customer.dao;
导入com.fruit.apples.customer.webdisplay.LkTimeZone;
导入java.util.List;
导入java.util.Map;
导入java.util.TimeZone;
导入org.springframework.jdbc.core.BatchPreparedStatementSetter;
导入org.springframework.jdbc.core.jdbc模板;
导入org.springframework.dao.EmptyResultDataAccessException;
公共类LKTimeZones DAO扩展CustomerWebDaoImpl
{
私有静态最终长serialVersionUID=2367566965661648309L;
/**
*getAllLkTimeZones检索LKTimeZoneObject的所有数据
*用LKTIMEONE对象填充传递给此方法的列表对象
*根据检索到的数据而定
*
*@param listToLoad要填充的列表对象
*/
public void getAllLkTimeZones(列表加载)
{
listToLoad.clear();
JdbcTemplate jcTemplate=新JdbcTemplate();
List rows=jcTemplate.queryForList(querys.get(“allLkTimezonesQuery”);
if((rows!=null)| |(0
LkTimezonesDAO中

JdbcTemplate jcTemplate = new JdbcTemplate();
您正在使用
new
关键字自己实例化
jdbcTemplate
,它如何知道
dataSource


您应该通过
@Autowired
xml

插入上下文中定义的数据源。好的,我将
数据源
插入到DAO文件中,但再次出现了“NullPointerException”错误。不幸的是,我认为部分问题在于我有14个不同的DAO文件将各种查询连接到数据库。O我通过
@Autowire
连接到LkTimezonesDAO.java的ne实例如下:

`import javax.sql.DataSource;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.support.JdbcDaoSupport;
 import org.springframework.stereotype.Repository;
 import org.springframework.stereotype.Service;

 /**
  * ClmgrLkTimezonesTableDAO is a data access object specifically designed to
  * retrieve and set LkTimeZone object data.
  *
  */
  @Service("timeZonesService")
  @Repository
  public class LkTimezonesDAO extends CustomerWebDaoImpl
  {
      private static final long serialVersionUID = 2367566965661648309L;
      private JdbcTemplate jdbcTemplate ;

      @Autowired
      public void init(DataSource dataSource) {
         this.jdbcTemplate = new JdbcTemplate(dataSource);
      }
``
下面是一个堆栈跟踪示例:

`####<Apr 21, 2015 11:50:30 AM GMT-06:00> <Warning> <HTTP>            <xxxxxxxx.xx.xxx.xxx.com> <managedserver1> 
 <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1429638630468> 
 <BEA-101162> <User defined listener org.springframework.web.context.ContextLoaderListener failed: 
 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'lkTimeZones' defined in ServletContext resource 
 [/WEB-INF/webObjectBeans.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException.
 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'lkTimeZones' defined in ServletContext resource 
 [/WEB-INF/webObjectBeans.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException
    at  org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1512)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:633)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
    at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:376)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)


好的,我像这样注入了数据源的
@Autowire
实例:
private-DataSource-DataSource;@Autowired-private-DataSource-setDataSource(){return-DataSource;}
这仍然返回相同的错误:
嵌套异常为java.lang.IllegalArgumentException:未指定任何数据源。
您不需要注入
数据源
本身,您需要注入
JdbcTemplate
。JdbcTemplate需要
数据源
,这是您在xml中配置的。您需要
@Autowired Jdbc模板jdbcTemplate;
LkTimezonesDAO
中,并删除用
new
关键字实例化
jdbcTemplate
的行。请查看我的上一次尝试的答案。很抱歉,我的评论太长(1747个以上字符).
@Autowire
在方法上不起作用,它应该只在字段上。您得到了
NullPointerException
,因为您很可能正在使用新关键字初始化
LkTimezonesDAO
,您同样应该
@Autowire
将它放在某个地方,或者从Spring上下文手动获取。您不需要实例化属于人的bean被Spring老化。不幸的是,我没有用新关键字初始化LkTimesDAO。我正在“webDataAccessBeans.xml”中实例化bean:
,并连接到“webObjectBeans.xml”中的“LKTimeones”和“BuisnsObject Beans,xml”中的DAO集合。好的,我尝试从应用程序DAO的nContext.xml出现NPE(NullPointerException)错误。是否有人需要查看更多代码才能找到解决方案?
JdbcTemplate jcTemplate = new JdbcTemplate();
`import javax.sql.DataSource;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.support.JdbcDaoSupport;
 import org.springframework.stereotype.Repository;
 import org.springframework.stereotype.Service;

 /**
  * ClmgrLkTimezonesTableDAO is a data access object specifically designed to
  * retrieve and set LkTimeZone object data.
  *
  */
  @Service("timeZonesService")
  @Repository
  public class LkTimezonesDAO extends CustomerWebDaoImpl
  {
      private static final long serialVersionUID = 2367566965661648309L;
      private JdbcTemplate jdbcTemplate ;

      @Autowired
      public void init(DataSource dataSource) {
         this.jdbcTemplate = new JdbcTemplate(dataSource);
      }
`####<Apr 21, 2015 11:50:30 AM GMT-06:00> <Warning> <HTTP>            <xxxxxxxx.xx.xxx.xxx.com> <managedserver1> 
 <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1429638630468> 
 <BEA-101162> <User defined listener org.springframework.web.context.ContextLoaderListener failed: 
 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'lkTimeZones' defined in ServletContext resource 
 [/WEB-INF/webObjectBeans.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException.
 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'lkTimeZones' defined in ServletContext resource 
 [/WEB-INF/webObjectBeans.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException
    at  org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1512)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:633)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
    at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:376)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)