2016-12-21 4 views
0

Ich arbeite an Spring MVC-Anwendung. Ich erhalte die folgende Ausnahme, wenn ich versuche, um die Anwendung auszuführen:java.lang.IllegalArgumentException: Eigenschaft 'dataSource' ist erforderlich

java.lang.IllegalArgumentException: Property 'dataSource' is required 

ich andere Beiträge in stackverflow zu folgen versucht und umgesetzt basierend auf commnets aber nichts hat das Problem behoben. Bitte entnehmen Sie die Dateien unter:

Servlets-context.xml

<beans:bean id="SearchResultsServiceDAOImpl" class="com.easyFinder.app.ServiceDAOImpl.SearchResultsServiceDAOImpl"> 
      <beans:property name="dataSource" ref="dataSource" />  
</beans:bean> 

<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <beans:property name="driverClassName" value="oracle.jdbc.OracleDriver"/> 
    <beans:property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL"/> 
    <beans:property name="username" value="sysman"/> 
    <beans:property name="password" value="orcl"/> 
</beans:bean> 

SearchresultsServiceDAOImpl.java

private DataSource dataSource; 
public void setDataSource(DataSource dataSource) { 
    this.dataSource = dataSource; 
} 

public String enterIntoNewEntrytable(Date date, String message) { 
    JdbcTemplate jdbcTemplate = new JdbcTemplate(); 
    List args = new ArrayList(); 
    String query = "INSERT INTO NEW_ENTRY VALUES ('1',?,?)"; 
    jdbcTemplate = new JdbcTemplate(dataSource); 
    args.add(date); 
    args.add(message); 
    jdbcTemplate.update(query,args); 
    return null; 
} 

Stacktrace:

SEVERE: Servlet.service() for servlet [appServlet] in context with path [/app] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: Property 'dataSource' is required] with root cause 
java.lang.IllegalArgumentException: Property 'dataSource' is required 
    at org.springframework.jdbc.support.JdbcAccessor.afterPropertiesSet(JdbcAccessor.java:135) 
    at org.springframework.jdbc.core.JdbcTemplate.<init>(JdbcTemplate.java:168) 
    at com.easyFinder.app.ServiceDAOImpl.SearchResultsServiceDAOImpl.enterIntoNewEntrytable(SearchResultsServiceDAOImpl.java:28) 
    at com.easyFinder.app.SearchActionController.home(SearchActionController.java:32) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

Bitte helfen Sie mir, eine Lösung zu finden.

Antwort

0

Sie benötigen

<beans:bean id="searchResultsServiceDAO" class="com.easyFinder.app.ServiceDAOImpl.SearchResultsServiceDAOImpl"> 
    <beans:property name="dataSource" ref="dataSource" />  
</beans:bean> 

Schnittstelle

public interface SearchresultsServiceDAO { 
    public String enterIntoNewEntrytable(Date date, String message); 
} 

Dann

public class SearchresultsServiceDAOImpl 
    implements SearchresultsServiceDAO { 

    private DataSource dataSource; 

    public void setDataSource(DataSource dataSource) { 
     this.dataSource = dataSource; 
    } 

    public String enterIntoNewEntrytable(Date date, String message) { 
     //Then you can use 
     Connection conn = dataSource.getConnection(); 
     // ... 
     return null; 
    } 

} 

, wenn Sie die Datenquelle in JdbcTemplate Verwendung

<beans:bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
    <beans:property name="dataSource" ref="dataSource" /> 
</beans:bean> 
injizieren wollen

und es auf diese Weise verwenden

@Autowired 
JdbcTemplate jdbcTemplate; 

Sie auch <context:annotation-config/> benötigen je nach Konfiguration

0

Sie müssen interface Definitionen in der Konfiguration verwenden, anstatt implementation.

Sie zur Zeit haben definiert, welche die Implementierung bezieht,

<beans:bean id="SearchResultsServiceDAOImpl" class="com.easyFinder.app.ServiceDAOImpl.SearchResultsServiceDAOImpl"> 
      <beans:property name="dataSource" ref="dataSource" />  
</beans:bean> 

Statt aktualisieren zu (überprüfen Sie bitte den Pfad),

<beans:bean id="searchResultsServiceDAO" class="com.easyFinder.app.ServiceDAO.SearchResultsServiceDAO"> 
    <beans:property name="dataSource" ref="dataSource" />  
</beans:bean> 

Ich sehe, dass Sie constructor Injektion verwendet haben. Sie können jedoch den Annotations-basierten Implementierungsansatz für inject Beans verwenden, da dadurch die Anforderung entfällt, die dataSource in jedem der DAO-Konstruktoren zu übergeben.

Überprüfen Sie für @Autowired Dokumentation.

@Autowired 
DataSource dataSource; 
0

Vergewissern Sie sich, dass die Datasource und die JdbcTemplate initialisiert werden und dass die getJdbcTemplate in den Fluss der Daten definiert (überall, aber getan werden sollte). Unten ist ein Beispiel:

@Autowired 
protected DataSource dataSource; 

/** Spring JDBC helper. */ 
public JdbcTemplate jdbcTemplate; 

/** 
* Gets the jdbc template. Instantiates on first call. 
* 
* @return the jdbc template 
*/ 
public JdbcTemplate getJdbcTemplate() { 
    if (null == jdbcTemplate) { 
     jdbcTemplate = new JdbcTemplate(dataSource); 
    } 
    return jdbcTemplate; 
} 

Ich habe die gleiche Ausnahme, wenn ich die impl Klasse direkt genannt, aber diese wurden in der Basisklasse eingeleitet.

Verwandte Themen