2016-07-04 4 views
0

JAX-WSベースのWebサービスを開発しました。私はWebサービス層、サービス層、Dao層を持っています。 Webサービスクラスからサービスメソッドを呼び出すと、nullポインタ例外が発生します。理由は、サービスクラスBeanが注入されていないためです。JAX-WS Webサービス:Beansを注入しない:NullPointerException

のWebサービスクラス:

package com.test.webservice.controller; 
import javax.jws.WebMethod; 
import javax.jws.WebService; 

import com.test.salary.service.SalaryService; 

@WebService 
public class EmployeeSalaryWebService { 

    private SalaryService salaryService; 


    /** 
    * @param salaryService the salaryService to set 
    */ 
    @WebMethod(exclude = true) 
    public void setSalaryService(SalaryService salaryService) { 
     this.salaryService = salaryService; 
    } 


    @WebMethod 
    public double getEmployeeSalary(String name){ 

     System.out.println("==== Inside getEmployee Salary === "+salaryService); 
     return salaryService.calculateSalary(name); 
    } 
} 

アプリケーションコンテキスト

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

    <bean name="salaryWebService" 
     class="com.test.webservice.controller.EmployeeSalaryWebService"> 
     <property name="salaryService" ref="salaryService" /> 
    </bean> 

    <bean name="salaryService" class="com.test.salary.service.SalaryServiceImpl"> 
     <property name="salaryDAO" ref="salaryDAO" /> 
    </bean> 

    <bean name="salaryDAO" class="com.test.salary.dao.SalaryDaoImpl"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 

    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="configLocation" value="classpath:hibernate.cfg.xml" /> 
    </bean> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
     destroy-method="close"> 
     <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> 
     <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" /> 
     <property name="username" value="LOCAL" /> 
     <property name="password" value="abcdef" /> 
    </bean> 

</beans> 

のweb.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    version="2.5"> 
    <display-name>Archetype Created Web Application</display-name> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/salaryConfiguration.xml</param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

</web-app> 

私になぜSalaryService salaryServiceが注入されていないのか教えてください。

答えて

1

コンテキスト内のサービスクラスとBeanは、2つの別個のものです。私はあなたが文脈から豆を取っておらず、ただクラスを使うのではないと信じていますか?春の豆になるために、あなたのクラスを行います 私のアドバイスあなたが

@Component 

を使用してサービスクラスをマーク。 次に、内部アノテーションを使用することができます。

@Autowired 

これは、春の文脈で注釈付き要素タイプの適切なbeanを見つけることを試みます。 あなたの状況を忘れないでください。

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

これは、@Componentとマークされたすべてのクラスを検索して、スプリングコンテキストにBeanとして追加します。あなたは次のようにSalaryServiceの自動配線してください。この記事 https://www.javacodegeeks.com/2010/11/jaxws-with-spring-and-maven-tutorial.html

+0

は、私はそれが働いた記事を、続きます。それですべての仕組みを理解する必要があります:-) – Pankaj

0

を確認することができ、より詳細な指示については :

public class EmployeeSalaryWebService { 

@Autowired 
private SalaryService salaryService; 
.... 
関連する問題