2017-11-19 7 views
0

Ich baue ein neues Projekt für SOAP-Web-Services. Früher habe ich den JDBC-Layer zum Öffnen und Schließen von Verbindungen verwendet. Jetzt wandle ich es in Spring mit JDBC-Vorlage um. Ich habe alle Schichten konfiguriert und die Komponenten kommentiert. Wenn ich versuche, in meinem Dienst impl Klasse die dao Bohne zu verwenden, wirft es mich Null-Zeiger-AusnahmenNull-Zeiger-Ausnahme für Autowired-Objekt im Frühjahr

@Service 
@WebService 
public interface Transaction { // Web methods here for SOAP Web service 
} 

Impl Klasse

@Component 
@WebService 
public class TransactionImpl implements Transaction{   

    @Autowired 
    BBDao dao; --> This is coming as null when I use it in the method 

} 

BBDao Schnittstelle als

public interface BBDao { /* Methods in it */ } 

Die Umsetzung folgt ist Die Klasse, die die BBDao-Schnittstelle implementiert, ist

public class BBDaoImpl extends JdbcDaoSupport implements BBDao {  

@Autowired 
ServletContext ctx; 

@Autowired 
DataSource dataSource; 

// Methods overriding here 

} 

Servlets

<servlet> 
    <servlet-name>spring-web</servlet-name> 
    <servlet-class> 
       org.springframework.web.servlet.DispatcherServlet 
      </servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>spring-web</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

Und schließlich die Feder-web-servlet.xml ist

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.2.xsd"> 

<context:component-scan base-package="com.bb.controller,com.bb.dao,com.bb.service" /> 
<context:property-placeholder location="classpath:datasource-cfg.properties" /> 


<bean id="bbDAO" class="net.bb.dao.BBDaoImpl"> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 

<!-- AS400 Data source Bean --> 
<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 

    <property name="driverClassName" value="com.ibm.as400.access.AS400JDBCDriver" /> 
    <property name="url" value="${as400.url}" /> 
    <property name="username" value="${as400.username}" /> 
    <property name="password" value="${as400.password}" /> 
</bean> 

<mvc:annotation-driven /> 

</beans> 

Die BBDao Bean-Objekt kommt, wird als null in web.xml definiert.

Gibt es einen Fehler in meiner Konfiguration? Jeder Rat würde sehr geschätzt werden.

P. S: Ich habe andere Beiträge als auch gefolgt, da die meisten der Beiträge über den Komponenten-Scan reden nur und die Pakete sind korrekt

+0

ist BBDaoImpl eine Feder Bohne verweisen? Ich meine, haben Sie "@ Component" oder "@ Service" in dieser Klasse? – pvpkiran

+0

Kein Kiran ist nicht da. Ich habe jetzt @Component hinzugefügt und getestet. Immer noch das gleiche – Yakhoob

+0

Kiran, ich habe gerade gefunden, wenn ich es mit ein paar Test-Controller testen, dao ist nicht null. aber wenn ich versuche, das SOAPUI-Tool zu verwenden, gibt es null. – Yakhoob

Antwort

1

Wir können nicht eine Schnittstelle ohne Implementierung autowire wie wir Instanz für die Schnittstelle erstellen kann nicht. Aber Sie können die unten genannten ausprobieren und sehen, ob es funktioniert.

Wenige Dinge, was Sie tun könnten.

in Ihre feder webservlet.xml

Und auch this

Benutzer Anmerkung wie @ConditionalOnMissingBean (BBDao.class)

+0

Das Dao-Objekt hat die Werte, wenn ich eine der Impl-Methode von einem Test-Controller aufrufen. Wenn ich jetzt eine Methode von SOAP UI zu einer der Methoden in der Impl-Klasse aufrufe, gibt es null – Yakhoob