简体   繁体   中英

Session Factory in Spring and Hibernate

I'm new to Spring MVC and Hibernate and I'm having a problem with my session configurations. I have done this by using the hibernate. What I want to do now is that the sessionFactory will be autowired in the DAO.

This is the application-context.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:mvc="http://www.springframework.org/schema/mvc" xmlns:beans="http://www.springframework.org/schema/beans"
      xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
      xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">

      <!-- Enable @Controller annotation support -->
      <mvc:annotation-driven />
     <mvc:default-servlet-handler/>
      <!-- Map simple view name such as "test" into /WEB-INF/test.jsp -->
      <beans:bean   class="org.springframework.web.servlet.view.InternalResourceViewResolver">      
            <beans:property name="prefix" value="/jsp" />       
            <beans:property name="suffix" value=".jsp" />   
      </beans:bean>

      <!-- Scan classpath for annotations (eg: @Service, @Repository etc) -->
      <context:component-scan base-package="com.nutsaboutcandywebproject.controller"/>

      <!-- JDBC Data Source. It is assumed you have MySQL running on localhost port 3306 with 
           username root and blank password. Change below if it's not the case -->
      <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/db_nutsaboutcandy"/>
        <property name="username" value="root"/>
        <property name="password" value=""/>
        <property name="validationQuery" value="SELECT 1"/>
      </bean>

      <!-- Hibernate Session Factory -->
      <bean id="mySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="myDataSource"/>
        <property name="packagesToScan">
           <list>
                <value>com.nutsaboutcandywebproject.model</value>
            </list>
        </property>
        <property name="hibernateProperties">
          <value>   
            hibernate.dialect=org.hibernate.dialect.MySQLDialect
          </value>
        </property>
      </bean>

        <!-- Hibernate Transaction Manager -->
      <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="mySessionFactory"/>
      </bean> 

      <!-- Activates annotation based transaction management -->
      <tx:annotation-driven transaction-manager="transactionManager"/> 

    </beans>    

This is the full stacktrace.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shoppingCartController' defined in file [C:\Users\Jeremy Marvin\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\NutsAboutCandyWebProject\WEB-INF\classes\com\nutsaboutcandywebproject\controller\ShoppingCartController.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.nutsaboutcandywebproject.controller.ShoppingCartController]: Constructor threw exception; nested exception is java.lang.NullPointerException
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1076)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1021)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1279)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1192)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.nutsaboutcandywebproject.controller.ShoppingCartController]: Constructor threw exception; nested exception is java.lang.NullPointerException
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:164)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1069)
    ... 34 more
Caused by: java.lang.NullPointerException
    at com.nutsaboutcandywebproject.dao.SQLProductsDataAccess.getCurrentSession(SQLProductsDataAccess.java:24)
    at com.nutsaboutcandywebproject.dao.SQLProductsDataAccess.getInventory(SQLProductsDataAccess.java:35)
    at com.nutsaboutcandywebproject.service.ServiceFacadeImpl.getAllProducts(ServiceFacadeImpl.java:140)
    at com.nutsaboutcandywebproject.controller.ShoppingCartController.<init>(ShoppingCartController.java:35)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
    ... 36 more

Apr 04, 2014 1:30:44 AM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shoppingCartController' defined in file [C:\Users\Jeremy Marvin\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\NutsAboutCandyWebProject\WEB-INF\classes\com\nutsaboutcandywebproject\controller\ShoppingCartController.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.nutsaboutcandywebproject.controller.ShoppingCartController]: Constructor threw exception; nested exception is java.lang.NullPointerException
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1076)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1021)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1279)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1192)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.nutsaboutcandywebproject.controller.ShoppingCartController]: Constructor threw exception; nested exception is java.lang.NullPointerException
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:164)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1069)
    ... 34 more
Caused by: java.lang.NullPointerException
    at com.nutsaboutcandywebproject.dao.SQLProductsDataAccess.getCurrentSession(SQLProductsDataAccess.java:24)
    at com.nutsaboutcandywebproject.dao.SQLProductsDataAccess.getInventory(SQLProductsDataAccess.java:35)
    at com.nutsaboutcandywebproject.service.ServiceFacadeImpl.getAllProducts(ServiceFacadeImpl.java:140)
    at com.nutsaboutcandywebproject.controller.ShoppingCartController.<init>(ShoppingCartController.java:35)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
    ... 36 more

Apr 04, 2014 1:30:44 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet appServlet
java.lang.NullPointerException
    at com.nutsaboutcandywebproject.dao.SQLProductsDataAccess.getCurrentSession(SQLProductsDataAccess.java:24)
    at com.nutsaboutcandywebproject.dao.SQLProductsDataAccess.getInventory(SQLProductsDataAccess.java:35)
    at com.nutsaboutcandywebproject.service.ServiceFacadeImpl.getAllProducts(ServiceFacadeImpl.java:140)
    at com.nutsaboutcandywebproject.controller.ShoppingCartController.<init>(ShoppingCartController.java:35)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1069)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1021)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1279)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1192)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

This is the code for the DAO

package com.nutsaboutcandywebproject.dao;

import java.util.List;

import javax.transaction.Transactional;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.beans.factory.annotation.Autowired;

import com.nutsaboutcandywebproject.model.Category;
import com.nutsaboutcandywebproject.model.Inventory;
import com.nutsaboutcandywebproject.model.Product;
import com.nutsaboutcandywebproject.model.ProductTypes;

public class SQLProductsDataAccess implements IProductsDataAccess {

    @Autowired
    SessionFactory sessionFactory;

     protected Session getCurrentSession(){
         return sessionFactory.getCurrentSession();
     }


    public Inventory getInventory()
    {

        Session session = getCurrentSession();
        Transaction transaction = session.beginTransaction();

        String sqlQuery = "from Product";
        Query query = session.createQuery(sqlQuery);
        System.out.println("Query created...");

        @SuppressWarnings("unchecked")
        List<Product> productsList = (List<Product>) query.list();

        Inventory inventory = new Inventory();
        inventory.setProducts(productsList);

        transaction.commit();

        session.close();
        return inventory;
    }

    public Product getProductById(Integer id) {

        Session session = getCurrentSession();
        Transaction transaction = session.beginTransaction();

        Query hqlQuery = session.createQuery("from Product WHERE id = :id");

        hqlQuery.setParameter("id", id);

        System.out.println("Query created...");

        List<?> productList = hqlQuery.list();
        Product product = (Product) productList.get(0);

        transaction.commit();

        session.close();

        return product;     

    }


    public List<Category> getCategoryName()
    {

        Session session = getCurrentSession();
        Transaction transaction = session.beginTransaction();

        String sqlQuery = "from Category";
        Query query = session.createQuery(sqlQuery);
        System.out.println("Query created...");

        List<Category> categoryList = query.list();

        transaction.commit();

        session.close();
        return categoryList;

    }


    @Override
    public Integer addStock(Integer id)
    {


        Product product = getProductById(id);

        int quantity = product.getQuantityInStock() + 1000;

        Session session = getCurrentSession();
        Transaction transaction = session.beginTransaction();

        String sqlQuery = "UPDATE Product set quantityInStock = :quantity"
                + " where id = :id";
        Query query = session.createQuery(sqlQuery);
        query.setParameter("quantity", quantity);
        query.setParameter("id", id);

        query.executeUpdate();

        transaction.commit();

        session.close();
        return quantity;

    }


    @Override
    public List<ProductTypes> getTypeName() {

        Session session = getCurrentSession();
        Transaction transaction = session.beginTransaction();

        String sqlQuery = "from ProductTypes";
        Query query = session.createQuery(sqlQuery);
        System.out.println("Query created...");

        List<ProductTypes> typeList = query.list();

        transaction.commit();

        session.close();
        return typeList;
    }


    @Override
    public void updateProduct(Integer updatedQuantity, Integer productId) {


        Session session = getCurrentSession();
        Transaction transaction = session.beginTransaction();

        String sqlQuery = "UPDATE Product set quantityInStock = :quantity"
                + " where id = :id";
        Query query = session.createQuery(sqlQuery);
        query.setParameter("quantity", updatedQuantity);
        query.setParameter("id", productId);
        System.out.println("Query created...");

        query.executeUpdate();

        transaction.commit();

        session.close();

    }


    @Override
    public Integer deleteProduct(Integer productId)
    {

        Session session = getCurrentSession();
        Transaction transaction = session.beginTransaction();
        Query query = session.createQuery("delete Product where id = :id");

        query.setParameter("id",productId);
        int result = query.executeUpdate();

        transaction.commit();

        session.close();

        return result;
    }



}

ShoppingCartController

package com.nutsaboutcandywebproject.controller;



@SessionAttributes(value = {"customerSession","cartSession"})
@Controller
public class ShoppingCartController {

    private ServiceFacade facade = new ServiceFacadeImpl();
    private NACExceptions exceptionsNAC = new NACExceptions();
    private List<Product> productsList = facade.getAllProducts();
    private List<Category> categoryList = facade.getCategory();
    private List<ProductTypes> typeList = facade.getType();
    private List<Sizes> sizeList = facade.getAllSizes();
    private List<ProductPriceMatrix> priceMatrixList = facade.getProductPriceMatrices();
    private List<String> exceptionList = new ArrayList<String>();

    @RequestMapping(value = "/cart", method = RequestMethod.POST)
      public String doShop(Model model, @RequestParam("smallSize") String[] small,
              @RequestParam("mediumSize") String[] medium ,@RequestParam("largeSize") String[] large) 
      {
        ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
        HttpSession session = attr.getRequest().getSession();

        List<ShoppingCart> cartList  = new ArrayList<ShoppingCart>();
        boolean isCartEmpty = true;

        if(session.getAttribute("cartSession")!=null){
            cartList = (List<ShoppingCart>) session.getAttribute("cartSession");
            isCartEmpty = false;
        }

        for(int index=0; index<productsList.size();index++){

            int numberOfSmall = 0;
            int numberOfMedium = 0;
            int numberOfLarge = 0;

            Integer productId = productsList.get(index).getId();

            Sizes size = priceMatrixList.get(index).getSize();
            Product product = facade.getSingleProduct(productId);


            try{
                exceptionsNAC.numberCheck(small[index]);
                exceptionsNAC.numberCheck(medium[index]);
                exceptionsNAC.numberCheck(large[index]);

                exceptionsNAC.checkValues(small[index]);
                exceptionsNAC.checkValues(medium[index]);
                exceptionsNAC.checkValues(large[index]);

                numberOfSmall = Integer.parseInt(small[index]);
                numberOfMedium = Integer.parseInt(medium[index]);
                numberOfLarge = Integer.parseInt(large[index]);

            }catch(ProductException e){
                exceptionList.add(e.getMessage());
            }


            User user = (User) session.getAttribute(("customerSession"));



            if(small[index] != null && numberOfSmall!=0){

                try {
                    if(exceptionsNAC.getRemainingQuantityInStock(50,numberOfSmall,product.getId())){            

                        ShoppingCart cart = new ShoppingCart(0,user,product,size,numberOfSmall);

                        cartList.add(cart);
                    }
                } catch (ProductException e) {
                    exceptionList.add(e.getMessage());
                }

            }

            if(medium[index] != null && numberOfMedium!=0){

                try {
                    if(exceptionsNAC.getRemainingQuantityInStock(100,numberOfMedium,product.getId())){

                        ShoppingCart cart = new ShoppingCart(0,user,product,size,numberOfMedium);

                        cartList.add(cart);
                    }
                } catch (ProductException e) {
                    exceptionList.add(e.getMessage());
                }


            }


            if(large[index] != null && numberOfLarge!=0){

                try {
                    if(exceptionsNAC.getRemainingQuantityInStock(150,numberOfLarge,product.getId())){
                        ShoppingCart cart = new ShoppingCart(0,user,product,size,numberOfLarge);

                        cartList.add(cart);
                    }
                } catch (ProductException e) {
                    exceptionList.add(e.getMessage());
                }

            }

        }

        if(isCartEmpty){
            session.setAttribute("cartSession", cartList);
        }

        model.addAttribute("cartSession", cartList);
        model.addAttribute("productsList", productsList);
        model.addAttribute("categoryList", categoryList);
        model.addAttribute("typeList", typeList);
        model.addAttribute("sizeList", sizeList);
        model.addAttribute("priceMatrixList", priceMatrixList);
        model.addAttribute("exception", exceptionList);

        return "/ShoppingCart";
     }




}

You are missing "dao" package in your component-scan config:

<context:component-scan base-package="com.nutsaboutcandywebproject.controller"/>
<context:component-scan base-package="com.nutsaboutcandywebproject.dao"/>

Also, DAO class must have @Repository annotation in order to use it as an autowired component.

Your DAO and service objects need to be beans under Spring control. By instantiating them like this:

private ServiceFacade facade = new ServiceFacadeImpl();

Spring never gets to inject your dependencies and wire everything up, hence the NPE . Add the following to your XML file

<context:component-scan base-package="com.nutsaboutcandywebproject.dao"/>
<context:component-scan base-package="com.nutsaboutcandywebproject.service"/>

and make sure your DAO is marked with @Repository or @Component , and your services as @Service or @Component . And change the instantiation of facade to

@Autowired
private ServiceFacade facade;

Since there was no scan for the DAO package, you almost certainly have to do the same in ServiceFacadeImpl and its IProductsDataAccess field.

Update : Besides this, you're accessing beans which haven't been initialised yet, eg

private List<Product> productsList = facade.getAllProducts();

At that point in time, ie during object instantiation, Spring hasn't finished creating your DAOs, Hibernate session factory, etc. You can only access these beans and set your fields when Spring has finished initialising and injecting the dependencies. To do that, put the code in an initialisation method marked with @PostConstruct :

@Controller
public class ShoppingCartController {

    @Autowired
    private ServiceFacade facade;;
    private NACExceptions exceptionsNAC = new NACExceptions();
    private List<Product> productsList;
    private List<Category> categoryList;
    private List<ProductTypes> typeList;
    private List<Sizes> sizeList;
    private List<ProductPriceMatrix> priceMatrixList;
    private List<String> exceptionList = new ArrayList<String>();

    @PostConstruct
    public void someInitializationMethod() {

        productsList = facade.getAllProducts();
        categoryList = facade.getCategory();
        typeList = facade.getType();
        sizeList = facade.getAllSizes();
        priceMatrixList = facade.getProductPriceMatrices();
    }
       ....

Add few more lines like this - in order to initiate the bean along with the datasource

<bean id="shoppingCartController" class="point.it.to.implementation.class">
    <property name="mySessionFactory" ref="mySessionFactory"/>
</bean>

You can even try using @Autowired annotation, by simplying creating the setter method for it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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