I am following the guide here http://cwiki.apache.org/S2WIKI/struts-2-spring-2-jpa-ajax.html

For some reason when trying to map a method other than execute I recieve the following error:
- Servlet.service() for servlet default threw exception
java.lang.NoSuchMethodException: $Proxy18.find()

Below are the configuration files and a segment of the UserAction class.

struts.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  "http://struts.apache.org/dtds/struts-2.0.dtd";>
<struts>
  <constant name="struts.objectFactory" value="spring" />
  <!-- <constant name="struts.devMode" value="true" />  -->
  <include file="struts-default.xml"/>
    <package name="havoc" extends="struts-default">
      <action name="list" class="userAction" method="execute">
          <result name="success">/WEB-INF/pages/list.jsp</result>
      </action>
      <action name="save" class="userAction" method="save">
          <result name="success" type="redirect">/list.action</result>
      </action>
      <action name="find" class="userAction" method="find">
          <result name="success">/WEB-INF/pages/index.jsp</result>
      </action>
  </package>
</struts>

Application Context
<?xml version="1.0" encoding="UTF-8"?>
<beans default-autowire="byName" xmlns="http://www.springframework.org/schema/beans";
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
      xmlns:aop="http://www.springframework.org/schema/aop";
      xmlns:tx="http://www.springframework.org/schema/tx";
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd";>

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" autowire="no">
      <property name="location" value="/WEB-INF/havoc.properties"/>
  </bean>

  <bean id="config" class="com.havoc.forum.util.Config" autowire="no">
      <property name="location" value="/WEB-INF/havoc.properties"/>
  </bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <property name="driverClassName" value="${jdbc.driverClassName}"/>
      <property name="url" value="${jdbc.url}"/>
      <property name="username" value="${jdbc.username}"/>
      <property name="password" value="${jdbc.password}"/>
  </bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
      <property name="dataSource" ref="dataSource"/>
<!-- This will cause spring to return the raw SessionFactory instead of the spring proxied one. --> <!-- <property name="exposeTransactionAwareSessionFactory" value="false" /> --> <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/> <property name="configLocation" value="classpath:hibernate.cfg.xml"/> <property name="hibernateProperties">
          <props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
              <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.bytecode.use_reflection_optimizer">${hibernate.bytecode.use_reflection_optimizer}</prop> <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop> <prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop> <prop key="hibernate.current_session_context_class">thread</prop> <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>
          </props>
      </property>         </bean>
  <!--
Instruct Spring to perform declarative transaction management automatically
      on annotated classes.
  -->
  <tx:annotation-driven transaction-manager="transactionManager" />
<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"><ref bean="sessionFactory"/></property>
  </bean>

  <!-- Model Objects -->
  <bean id="user" class="com.havoc.forum.model.User" />
  <bean id="group" class="com.havoc.forum.model.Group" />
  <bean id="rank" class="com.havoc.forum.model.Rank" />

  <!-- Data Access Objects -->
  <bean id="userDAO" class="com.havoc.forum.dao.hibernate.UserDAO" />
  <bean id="groupDAO" class="com.havoc.forum.dao.hibernate.GroupDAO" />
  <bean id="rankDAO" class="com.havoc.forum.dao.hibernate.RankDAO" />
    <!-- Actions -->
<bean id="userAction" class="com.havoc.forum.action.UserAction" scope="prototype" />
 </beans>

UserAction

public class UserAction extends ActionSupport {

  ...
  ...

  /**
   * Returns a user from the database or a new user.
   * @return SUCCESS or ERROR.
   * @throws Exception if an error occurs.
   */
@Transactional(readOnly = true, propagation = Propagation.REQUIRED, rollbackFor = PersistenceException.class)
  public String find() {
      if (user != null && user.getId() != null) {
          user = userDAO.find(user.getId());
          return SUCCESS;
      }
      user = new User();
      return SUCCESS;
  }

Reply via email to