Spring服务中的DAO nullpointer异常

时间:2014-03-09 22:25:47

标签: java spring service dao

我在spring服务中遇到DAO问题,DAO没有正确实例化。 这是我的DAO,DAOImp,Service和ServiceImp以及beans.xml文件

package com.dao;

import java.util.List;
import com.dto.ProductDTO;

public interface ProductDAO {
    public List<ProductDTO> getAllProducts();
}

package com.dao.implementations;

import java.util.ArrayList;
import java.util.List;

import com.dao.ProductDAO;
import com.dto.ProductDTO;

public class ProductDAOImp implements ProductDAO{
    @Override
    public List<ProductDTO> getAllProducts() {
        List<ProductDTO> liste = new ArrayList<ProductDTO>();

        liste.add(new ProductDTO(1,"pc", 100));
        liste.add(new ProductDTO(2,"disk", 11));
        return liste;
    }
}

package com.webservices;

import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;


import com.dto.ProductDTO;

@Path("products")
public interface ProductWebService {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("all")
    public List<ProductDTO> getAllProducts();
}

Web服务实施:

package com.webservices.implementations;

import java.util.List;

import com.dao.implementations.ProductDAOImp;
import com.dto.ProductDTO;
import com.webservices.ProductWebService;


public class ProductWebServiceImp implements ProductWebService {

    private ProductDAOImp productDAO;


    @Override
    public List<ProductDTO> getAllProducts() {  
        return productDAO.getAllProducts();
    }

    public ProductDAOImp getProductDAO() {
        return productDAO;
    }

    public void setProductDAO(ProductDAOImp productDAO) {
        this.productDAO = productDAO;
    }
}

beans.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:jaxws="http://cxf.apache.org/jaxws"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"    
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:tx="http://www.springframework.org/schema/tx"   
    xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation=" 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.2.xsd
     http://www.springframework.org/schema/jee 
     http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
     http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
     http://cxf.apache.org/jaxws
     http://cxf.apache.org/schemas/jaxws.xsd
     http://cxf.apache.org/jaxrs
     http://cxf.apache.org/schemas/jaxrs.xsd">
    <import resource="classpath:META-INF/cxf/cxf.xml" />
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxrs:server id="productWebService"
    serviceClass="com.webservices.implementations.ProductWebServiceImp"
    name="productWebService" address="/productServices" />




<bean id="productService"     
          class="com.webservices.implementations.ProductWebServiceImp">
    <property name="productDAO" ref="productDAO"></property>
</bean>

<bean id="productDAO" class="com.dao.implementations.ProductDAOImp"/>
    </beans>

问题是当在服务中调用getAllProducts()方法时抛出nullpointer异常(属性dao为null)

我的代码有什么问题吗? 谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

嗨,这是一个对我有用的解决方案:

<?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:jaxws="http://cxf.apache.org/jaxws"
xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation=" 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.2.xsd
     http://www.springframework.org/schema/jee 
     http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
     http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
     http://cxf.apache.org/jaxws
     http://cxf.apache.org/schemas/jaxws.xsd
     http://cxf.apache.org/jaxrs
     http://cxf.apache.org/schemas/jaxrs.xsd">

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

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

<jaxrs:server id="productWebService" name="productWebService"
    address="/productServices">
    <jaxrs:serviceBeans>
        <ref bean="productService"/>
    </jaxrs:serviceBeans>
</jaxrs:server>

<bean id="productService" class="com.webservices.implementations.ProductWebServiceImp">
  <property name="productDAO" ref="productDAO"/>
</bean>

<bean id="productDAO" class="com.dao.implementations.ProductDAOImp" />

感谢所有参与者

最好的问候

答案 1 :(得分:-2)

您可以尝试在Dao上的ProductWebServiceImp中添加@Autowired注释。