简体   繁体   English

Spring Service中的DAO空指针异常

[英]DAO nullpointer exception in spring service

I am facing a problem with a DAO in a spring service, the DAO is not instantiated properly. 我在春季服务中遇到DAO的问题,DAO没有正确实例化。 here is my DAO, DAOImp, Service and ServiceImp and beans.xml file 这是我的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 service implementation: 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 file: 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>

the problem is that when the getAllProducts() method is invoked in the service the nullpointer exception is thrown (property dao is null) 问题是,当在服务中调用getAllProducts()方法时,将引发nullpointer异常(属性dao为null)

is there anything wrong with my code? 我的代码有什么问题吗? Thanks for help 感谢帮助

Hi here is a solution that worked for me: 您好,这里是对我有用的解决方案:

<?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" />

Thanks to all the participants 感谢所有参与者

Best Regards 最好的祝福

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM