0

I encountered a weird error that I could not understand... When I run my web project... My jsp displayed. But after clicking the submit bottom, it hangs then error results. I could not understand what I do wrong.. it is like 3hours trying to check my problem. But right now i need some help.. Thanks guys.

Unable to instantiate Action, lotmovement.action.RegisterAction,  defined for 'register' in namespace '/'Error creating bean with name 'registeraction' defined in class path resource [spring.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [lotmovement.action.RegisterAction]: Constructor threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'registeraction' defined in class path resource [spring.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [lotmovement.action.RegisterAction]: Constructor threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'registeraction' defined in class path resource [spring.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [lotmovement.action.RegisterAction]: Constructor threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'registeraction' defined in class path resource [spring.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [lotmovement.action.RegisterAction]: Constructor threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'registeraction' defined in class path resource [spring.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: [spring.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [lotmovement.action.RegisterAction]: Constructor threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'registeraction' defined in class path resource [spring.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [lotmovement.action.RegisterAction]: Constructor threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'registeraction' defined in class path resource [spring.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [lotmovement.action.RegisterAction]: Constructor threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'registeraction' defined in class path resource [spring.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [lotmovement.action.RegisterAction]: Constructor threw exception; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [spring.xml]; nested exception is java.lang.StackOverflowError
    org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:115)
    org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:839)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
    java.security.AccessController.doPrivileged(Native Method)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
    org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    lotmovement.action.RegisterAction.<init>(RegisterAction.java:27)
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    java.lang.Class.newInstance0(Class.java:372)
    java.lang.Class.newInstance(Class.java:325)
    com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:131)
    com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:162)
    com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:151)
    com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:121)
    com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:300)
    com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:400)
    com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:194)
    org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
    org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
    com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:501)
    org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:432)

And on the tomcat server, this keeps on repeating..

Nov 26, 2012 3:10:51 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@2d43b35f: defining beans [userprofile,registeraction,insertuserprofile,entitystart,recordexistuserprofile]; root of factory hierarchy
Nov 26, 2012 3:10:51 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@50016db: defining beans [userprofile,registeraction,insertuserprofile,entitystart,recordexistuserprofile]; root of factory hierarchy
Nov 26, 2012 3:10:51 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@7ef1277f: defining beans [userprofile,registeraction,insertuserprofile,entitystart,recordexistuserprofile]; root of factory hierarchy
Nov 26, 2012 3:10:51 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@3d510eb6: defining beans [userprofile,registeraction,insertuserprofile,entitystart,recordexistuserprofile]; root of factory hierarchy
Nov 26, 2012 3:10:51 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@66893099: defining beans [userprofile,registeraction,insertuserprofile,entitystart,recordexistuserprofile]; root of factory hierarchy
Nov 26, 2012 3:17:59 PM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/LotMovement_5spingtest]

This is my XML file.

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

    <bean id="userprofile"  class="lotmovement.business.entity.UserProfile">

    </bean>

    <bean id="registeraction"  class="lotmovement.action.RegisterAction">

    </bean>  

    <bean id="insertuserprofile"  
          class="lotmovement.business.crud.InsertUserProfile">

    </bean>


    <bean id="entitystart"  
          class="lotmovement.business.crud.EntityStart">

    </bean>

    <bean id="recordexistuserprofile"  
           class="lotmovement.business.crud.RecordExistUserProfile">

    </bean>


</beans>

This is my some of my code..

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package lotmovement.action;

import com.opensymphony.xwork2.ActionSupport;
import lotmovement.business.crud.EntityStart;
import lotmovement.business.crud.InsertUserProfile;
import lotmovement.business.crud.RecordExistUserProfile;
import lotmovement.business.entity.UserProfile;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 *
 * @author god-gavedmework
 */
public class RegisterAction extends ActionSupport {

    private static String userId;
    private static String password;
    private static String firstName;
    private static String lastName;
    private static int securityLevel;
    ApplicationContext context =
            new ClassPathXmlApplicationContext("spring.xml");
    EntityStart es = (EntityStart) context.getBean("entitystart");

    @Override
    public void validate() {
        es.StartDbaseConnection();
        RecordExistUserProfile reup =
                (RecordExistUserProfile) context.getBean("recordexistuserprofile");
        if (reup.checkrecordexist()) {
            addActionError("record already exist.");
        }
    }

    @Override
    public String execute() {



        InsertUserProfile iup =
                (InsertUserProfile) context.getBean("insertuserprofile");



        iup.Insert();


        return SUCCESS;
    }

This is my WEB.XML

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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">
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>register.jsp</welcome-file>
    </welcome-file-list>
</web-app>
toksis
  • 139
  • 1
  • 4
  • 14

3 Answers3

5

You are creating an infinite loop with this line in RegisterAction

ApplicationContext context =
        new ClassPathXmlApplicationContext("spring.xml");

The loop is you invoke the Spring Container, which creates a RegisterAction, which (shown above) creates a Spring Container, which creates a RegisterAction....

You shouldn't be referencing an ApplicationContext directly in your Spring Beans. You should use configuration (setter or constructor injection) to set the dependencies of your beans. You need to do this

spring.xml

<bean id="insertUserProfile" class="lotmovement.business.crud.InsertUserProfile"/>

<bean id="registeraction"  class="lotmovement.action.RegisterAction">
  <property name="insertUserProfile" ref="insertUserProfile"/>
</bean>  

Then you will add a method setInsertUserProfile to your RegisterAction. Spring will invoke the setter with the specified bean from your context (in this case, a new insertUserProfile). You will need to do this for all of the beans that you are referencing from the context.

You might want to do some research on Spring constructor injection as it's a "better" way of injecting dependencies that never need to change.

jeff
  • 4,325
  • 16
  • 27
  • what I did was on every class, i have this one. ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");. So do you mean I will no longer use this? – toksis Nov 26 '12 at 03:05
  • I will research on what you had advice. – toksis Nov 26 '12 at 03:07
  • Correct, you should not have an ApplicationContext in any class in your spring.xml. – jeff Nov 26 '12 at 03:08
  • Thank you I will check your advice. – toksis Nov 26 '12 at 03:22
  • 1
    I thinkd ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); is only use for class with main() i think. but it is not usefull in a web application. – toksis Nov 26 '12 at 03:33
1

jeff's answer is spot on. It's a great explanation of what's wrong and what you should not be doing.

The piece you're missing is to register the application context in your web.xml:

Loading context in Spring using web.xml

This is the correction that, coupled with jeff's recommendation, should have you on your way.

Community
  • 1
  • 1
duffymo
  • 305,152
  • 44
  • 369
  • 561
0

Why are you handling the Spring container yourself when you are using Struts 2? You need the Struts 2 Spring plugin.

http://struts.apache.org/2.3.4.1/docs/spring-plugin.html

While the other answers are good and describe perfectly what is wrong with this code, I'm not sure they are the best answer . . . Struts 2 provides Spring integration that is EXACTLY designed to allow you to seamlessly inject dependencies into both your own objects and the core framework objects, such as actions.

With the Spring plugin, you can simply configure your spring beans, with XML or annotations, and that's that. The Spring container is integrated into the framework's core object factory, which means you don't have to handle it; and it's the handling of the container in this question's code that creates the problem for toksis.

chad
  • 7,369
  • 6
  • 37
  • 56
  • right now I am using the plugin.. I also switch to maven. I just studied java core in javabrains org and it uses that spring.xml. I thought that it can be use anywhere hehehe. What i did now is using Dependency injection in the applicationContext.xml and so far it is okay :) – toksis Nov 28 '12 at 21:41
  • You can use that "anywhere" if you like, but the struts 2 spring plugin does the work of integration the object creation and injection from the spring container with the object creation of the struts 2 framework . . so you don't have to ;) – chad Nov 28 '12 at 21:57