rleland     01/03/27 08:16:53

  Modified:    src/share/org/apache/struts/action DispatchAction.java
  Log:
  This is definately a first, Struts wouldn't compile.
  
  Package name was incorrect corrected
  so it would compile ! ! !
  
  Revision  Changes    Path
  1.2       +592 -296  
jakarta-struts/src/share/org/apache/struts/action/DispatchAction.java
  
  Index: DispatchAction.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/action/DispatchAction.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DispatchAction.java       2001/03/23 22:21:34     1.1
  +++ DispatchAction.java       2001/03/27 16:16:51     1.2
  @@ -1,296 +1,592 @@
  -/*
  - * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/action/DispatchAction.java,v 1.1 
2001/03/23 22:21:34 craigmcc Exp $
  - * $Revision: 1.1 $
  - * $Date: 2001/03/23 22:21:34 $
  - *
  - * ====================================================================
  - *
  - * The Apache Software License, Version 1.1
  - *
  - * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
  - * reserved.
  - *
  - * Redistribution and use in source and binary forms, with or without
  - * modification, are permitted provided that the following conditions
  - * are met:
  - *
  - * 1. Redistributions of source code must retain the above copyright
  - *    notice, this list of conditions and the following disclaimer.
  - *
  - * 2. Redistributions in binary form must reproduce the above copyright
  - *    notice, this list of conditions and the following disclaimer in
  - *    the documentation and/or other materials provided with the
  - *    distribution.
  - *
  - * 3. The end-user documentation included with the redistribution, if
  - *    any, must include the following acknowlegement:
  - *       "This product includes software developed by the
  - *        Apache Software Foundation (http://www.apache.org/)."
  - *    Alternately, this acknowlegement may appear in the software itself,
  - *    if and wherever such third-party acknowlegements normally appear.
  - *
  - * 4. The names "The Jakarta Project", "Struts", and "Apache Software
  - *    Foundation" must not be used to endorse or promote products derived
  - *    from this software without prior written permission. For written
  - *    permission, please contact [EMAIL PROTECTED]
  - *
  - * 5. Products derived from this software may not be called "Apache"
  - *    nor may "Apache" appear in their names without prior written
  - *    permission of the Apache Group.
  - *
  - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  - * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  - * SUCH DAMAGE.
  - * ====================================================================
  - *
  - * This software consists of voluntary contributions made by many
  - * individuals on behalf of the Apache Software Foundation.  For more
  - * information on the Apache Software Foundation, please see
  - * <http://www.apache.org/>.
  - *
  - */
  -
  -
  -package org.apache.struts.actions;
  -
  -
  -import java.io.IOException;
  -import java.io.PrintWriter;
  -import java.lang.reflect.InvocationTargetException;
  -import java.lang.reflect.Method;
  -import java.util.HashMap;
  -import javax.servlet.ServletException;
  -import javax.servlet.http.HttpServletRequest;
  -import javax.servlet.http.HttpServletResponse;
  -import javax.servlet.http.HttpSession;
  -import org.apache.struts.action.Action;
  -import org.apache.struts.action.ActionForm;
  -import org.apache.struts.action.ActionForward;
  -import org.apache.struts.action.ActionMapping;
  -import org.apache.struts.util.MessageResources;
  -
  -
  -/**
  - * <p>An abstract <strong>Action</strong> that dispatches to a public
  - * method that is named by the request parameter whose name is specified
  - * by the <code>parameter</code> property of the corresponding
  - * ActionMapping.  This Action is useful for developers who prefer to
  - * combine many similar actions into a single Action class, in order to
  - * simplify their application design.</p>
  - *
  - * <p>To configure the use of this action in your
  - * <code>struts-config.xml</code> file, create an entry like this:</p>
  - *
  - * <code>
  - *   &lt;action path="/saveSubscription"
  - *           type="org.apache.struts.action.DispatchAction"
  - *           name="subscriptionForm"
  - *          scope="request"
  - *          input="/subscription.jsp"
  - *      parameter="method"/&gt;
  - * </code>
  - *
  - * <p>which will use the value of the request parameter named "method"
  - * to pick the appropriate "perform" method, which must have the same
  - * signature (other than method name) of the standard Action.perform()
  - * method.  For example, you might have the following three methods in the
  - * same action:</p>
  - * <ul>
  - * <li>public ActionForward delete(ActionMapping mapping, ActionForm form,
  - *     HttpServletRequest request, HttpServletResponse response)
  - *     throws IOException, ServletException</li>
  - * <li>public ActionForward insert(ActionMapping mapping, ActionForm form,
  - *     HttpServletRequest request, HttpServletResponse response)
  - *     throws IOException, ServletException</li>
  - * <li>public ActionForward update(ActionMapping mapping, ActionForm form,
  - *     HttpServletRequest request, HttpServletResponse response)
  - *     throws IOException, ServletException</li>
  - * </ul>
  - * <p>and call one of the methods with a URL like this:</p>
  - * <code>
  - *   http://localhost:8080/myapp/saveSubscription.do?method=update
  - * </code>
  - *
  - * <p><strong>NOTE</strong> - All of the other mapping characteristics of
  - * this action must be shared by the various handlers.  This places some
  - * constraints over what types of handlers may reasonably be packaged into
  - * the same <code>DispatchAction</code> subclass.</p>
  - *
  - * @author Niall Pemberton <[EMAIL PROTECTED]>
  - * @author Craig R. McClanahan
  - * @version $Revision: 1.1 $ $Date: 2001/03/23 22:21:34 $
  - */
  -
  -public abstract class DispatchAction extends Action {
  -
  -
  -    // ----------------------------------------------------- Instance Variables
  -
  -
  -    /**
  -     * The Class instance of this <code>DispatchAction</code> class.
  -     */
  -    protected Class clazz = this.getClass();
  -
  -
  -    /**
  -     * The message resources for this package.
  -     */
  -    protected static MessageResources messages =
  -     MessageResources.getMessageResources
  -        ("org.apache.struts.action.LocalStrings");
  -
  -
  -    /**
  -     * The set of Method objects we have introspected for this class,
  -     * keyed by method name.  This collection is populated as different
  -     * methods are called, so that introspection needs to occur only
  -     * once per method name.
  -     */
  -    protected HashMap methods = new HashMap();
  -
  -
  -    /**
  -     * The set of argument type classes for the reflected method call.  These
  -     * are the same for all calls, so calculate them only once.
  -     */
  -    protected Class types[] = {
  -        ActionMapping.class, ActionForm.class,
  -        HttpServletRequest.class, HttpServletResponse.class };
  -
  -
  -    // --------------------------------------------------------- Public Methods
  -
  -
  -    /**
  -     * Process the specified HTTP request, and create the corresponding HTTP
  -     * response (or forward to another web component that will create it).
  -     * Return an <code>ActionForward</code> instance describing where and how
  -     * control should be forwarded, or <code>null</code> if the response has
  -     * already been completed.
  -     *
  -     * @param mapping The ActionMapping used to select this instance
  -     * @param actionForm The optional ActionForm bean for this request (if any)
  -     * @param request The HTTP request we are processing
  -     * @param response The HTTP response we are creating
  -     *
  -     * @exception IOException if an input/output error occurs
  -     * @exception ServletException if a servlet exception occurs
  -     */
  -    public ActionForward perform(ActionMapping mapping,
  -                              ActionForm form,
  -                              HttpServletRequest request,
  -                              HttpServletResponse response)
  -     throws IOException, ServletException {
  -
  -        // Identify the request parameter containing the method name
  -        String parameter = mapping.getParameter();
  -        if (parameter == null) {
  -            String message =
  -                messages.getMessage("dispatch.handler", mapping.getPath());
  -            servlet.log(message);
  -            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
  -                               message);
  -            return (null);
  -        }
  -
  -        // Identify the method name to be dispatched to
  -        String name = request.getParameter(parameter);
  -        if (name == null) {
  -            String message =
  -                messages.getMessage("dispatch.parameter", mapping.getPath(),
  -                                    parameter);
  -            servlet.log(message);
  -            response.sendError(HttpServletResponse.SC_BAD_REQUEST,
  -                               message);
  -            return (null);
  -        }
  -
  -        // Identify the method object to be dispatched to
  -        Method method = null;
  -        try {
  -            method = getMethod(name);
  -        } catch (NoSuchMethodException e) {
  -            String message =
  -                messages.getMessage("dispatch.method", mapping.getPath(),
  -                                    name);
  -            servlet.log(message);
  -            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
  -                               message);
  -            return (null);
  -        }
  -
  -        // Dispatch to the specified method
  -        ActionForward forward = null;
  -        try {
  -            Object args[] = { mapping, form, request, response };
  -            forward = (ActionForward) method.invoke(this, args);
  -        } catch (ClassCastException e) {
  -            String message =
  -                messages.getMessage("dispatch.return", mapping.getPath(),
  -                                    name);
  -            servlet.log(message);
  -            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
  -                               message);
  -            return (null);
  -        } catch (IllegalAccessException e) {
  -            String message =
  -                messages.getMessage("dispatch.error", mapping.getPath(),
  -                                    name);
  -            servlet.log(message, e);
  -            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
  -                               message);
  -            return (null);
  -        } catch (InvocationTargetException e) {
  -            String message =
  -                messages.getMessage("dispatch.error", mapping.getPath(),
  -                                    name);
  -            servlet.log(message, e);
  -            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
  -                               message);
  -            return (null);
  -        }
  -
  -        // Return the returned ActionForward instance
  -        return (forward);
  -
  -    }
  -
  -
  -    // ----------------------------------------------------- Protected Methods
  -
  -
  -    /**
  -     * Introspect the current class to identify a method of the specified
  -     * name that accepts the same parameter types as the <code>perform()</code>
  -     * method does.
  -     *
  -     * @param name Name of the method to be introspected
  -     *
  -     * @exception NoSuchMethodException if no such method can be found
  -     */
  -    protected Method getMethod(String name)
  -        throws NoSuchMethodException {
  -
  -        synchronized (methods) {
  -            Method method = (Method) methods.get(name);
  -            if (method == null) {
  -                method = clazz.getMethod(name, types);
  -                methods.put(name, method);
  -            }
  -            return (method);
  -        }
  -
  -    }
  -
  -
  -}
  +/*
  +
  + * $Header: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/action/DispatchAction.java,v 1.2 
2001/03/27 16:16:51 rleland Exp $
  +
  + * $Revision: 1.2 $
  +
  + * $Date: 2001/03/27 16:16:51 $
  +
  + *
  +
  + * ====================================================================
  +
  + *
  +
  + * The Apache Software License, Version 1.1
  +
  + *
  +
  + * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
  +
  + * reserved.
  +
  + *
  +
  + * Redistribution and use in source and binary forms, with or without
  +
  + * modification, are permitted provided that the following conditions
  +
  + * are met:
  +
  + *
  +
  + * 1. Redistributions of source code must retain the above copyright
  +
  + *    notice, this list of conditions and the following disclaimer.
  +
  + *
  +
  + * 2. Redistributions in binary form must reproduce the above copyright
  +
  + *    notice, this list of conditions and the following disclaimer in
  +
  + *    the documentation and/or other materials provided with the
  +
  + *    distribution.
  +
  + *
  +
  + * 3. The end-user documentation included with the redistribution, if
  +
  + *    any, must include the following acknowlegement:
  +
  + *       "This product includes software developed by the
  +
  + *        Apache Software Foundation (http://www.apache.org/)."
  +
  + *    Alternately, this acknowlegement may appear in the software itself,
  +
  + *    if and wherever such third-party acknowlegements normally appear.
  +
  + *
  +
  + * 4. The names "The Jakarta Project", "Struts", and "Apache Software
  +
  + *    Foundation" must not be used to endorse or promote products derived
  +
  + *    from this software without prior written permission. For written
  +
  + *    permission, please contact [EMAIL PROTECTED]
  +
  + *
  +
  + * 5. Products derived from this software may not be called "Apache"
  +
  + *    nor may "Apache" appear in their names without prior written
  +
  + *    permission of the Apache Group.
  +
  + *
  +
  + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  +
  + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  +
  + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  +
  + * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  +
  + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  +
  + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  +
  + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  +
  + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  +
  + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  +
  + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  +
  + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  +
  + * SUCH DAMAGE.
  +
  + * ====================================================================
  +
  + *
  +
  + * This software consists of voluntary contributions made by many
  +
  + * individuals on behalf of the Apache Software Foundation.  For more
  +
  + * information on the Apache Software Foundation, please see
  +
  + * <http://www.apache.org/>.
  +
  + *
  +
  + */
  +
  +
  +
  +
  +
  +package org.apache.struts.action;
  +
  +
  +
  +
  +
  +import java.io.IOException;
  +
  +import java.io.PrintWriter;
  +
  +import java.lang.reflect.InvocationTargetException;
  +
  +import java.lang.reflect.Method;
  +
  +import java.util.HashMap;
  +
  +import javax.servlet.ServletException;
  +
  +import javax.servlet.http.HttpServletRequest;
  +
  +import javax.servlet.http.HttpServletResponse;
  +
  +import javax.servlet.http.HttpSession;
  +
  +import org.apache.struts.action.Action;
  +
  +import org.apache.struts.action.ActionForm;
  +
  +import org.apache.struts.action.ActionForward;
  +
  +import org.apache.struts.action.ActionMapping;
  +
  +import org.apache.struts.util.MessageResources;
  +
  +
  +
  +
  +
  +/**
  +
  + * <p>An abstract <strong>Action</strong> that dispatches to a public
  +
  + * method that is named by the request parameter whose name is specified
  +
  + * by the <code>parameter</code> property of the corresponding
  +
  + * ActionMapping.  This Action is useful for developers who prefer to
  +
  + * combine many similar actions into a single Action class, in order to
  +
  + * simplify their application design.</p>
  +
  + *
  +
  + * <p>To configure the use of this action in your
  +
  + * <code>struts-config.xml</code> file, create an entry like this:</p>
  +
  + *
  +
  + * <code>
  +
  + *   &lt;action path="/saveSubscription"
  +
  + *           type="org.apache.struts.action.DispatchAction"
  +
  + *           name="subscriptionForm"
  +
  + *          scope="request"
  +
  + *          input="/subscription.jsp"
  +
  + *      parameter="method"/&gt;
  +
  + * </code>
  +
  + *
  +
  + * <p>which will use the value of the request parameter named "method"
  +
  + * to pick the appropriate "perform" method, which must have the same
  +
  + * signature (other than method name) of the standard Action.perform()
  +
  + * method.  For example, you might have the following three methods in the
  +
  + * same action:</p>
  +
  + * <ul>
  +
  + * <li>public ActionForward delete(ActionMapping mapping, ActionForm form,
  +
  + *     HttpServletRequest request, HttpServletResponse response)
  +
  + *     throws IOException, ServletException</li>
  +
  + * <li>public ActionForward insert(ActionMapping mapping, ActionForm form,
  +
  + *     HttpServletRequest request, HttpServletResponse response)
  +
  + *     throws IOException, ServletException</li>
  +
  + * <li>public ActionForward update(ActionMapping mapping, ActionForm form,
  +
  + *     HttpServletRequest request, HttpServletResponse response)
  +
  + *     throws IOException, ServletException</li>
  +
  + * </ul>
  +
  + * <p>and call one of the methods with a URL like this:</p>
  +
  + * <code>
  +
  + *   http://localhost:8080/myapp/saveSubscription.do?method=update
  +
  + * </code>
  +
  + *
  +
  + * <p><strong>NOTE</strong> - All of the other mapping characteristics of
  +
  + * this action must be shared by the various handlers.  This places some
  +
  + * constraints over what types of handlers may reasonably be packaged into
  +
  + * the same <code>DispatchAction</code> subclass.</p>
  +
  + *
  +
  + * @author Niall Pemberton <[EMAIL PROTECTED]>
  +
  + * @author Craig R. McClanahan
  +
  + * @version $Revision: 1.2 $ $Date: 2001/03/27 16:16:51 $
  +
  + */
  +
  +
  +
  +public abstract class DispatchAction extends Action {
  +
  +
  +
  +
  +
  +    // ----------------------------------------------------- Instance Variables
  +
  +
  +
  +
  +
  +    /**
  +
  +     * The Class instance of this <code>DispatchAction</code> class.
  +
  +     */
  +
  +    protected Class clazz = this.getClass();
  +
  +
  +
  +
  +
  +    /**
  +
  +     * The message resources for this package.
  +
  +     */
  +
  +    protected static MessageResources messages =
  +
  +     MessageResources.getMessageResources
  +
  +        ("org.apache.struts.action.LocalStrings");
  +
  +
  +
  +
  +
  +    /**
  +
  +     * The set of Method objects we have introspected for this class,
  +
  +     * keyed by method name.  This collection is populated as different
  +
  +     * methods are called, so that introspection needs to occur only
  +
  +     * once per method name.
  +
  +     */
  +
  +    protected HashMap methods = new HashMap();
  +
  +
  +
  +
  +
  +    /**
  +
  +     * The set of argument type classes for the reflected method call.  These
  +
  +     * are the same for all calls, so calculate them only once.
  +
  +     */
  +
  +    protected Class types[] = {
  +
  +        ActionMapping.class, ActionForm.class,
  +
  +        HttpServletRequest.class, HttpServletResponse.class };
  +
  +
  +
  +
  +
  +    // --------------------------------------------------------- Public Methods
  +
  +
  +
  +
  +
  +    /**
  +
  +     * Process the specified HTTP request, and create the corresponding HTTP
  +
  +     * response (or forward to another web component that will create it).
  +
  +     * Return an <code>ActionForward</code> instance describing where and how
  +
  +     * control should be forwarded, or <code>null</code> if the response has
  +
  +     * already been completed.
  +
  +     *
  +
  +     * @param mapping The ActionMapping used to select this instance
  +
  +     * @param actionForm The optional ActionForm bean for this request (if any)
  +
  +     * @param request The HTTP request we are processing
  +
  +     * @param response The HTTP response we are creating
  +
  +     *
  +
  +     * @exception IOException if an input/output error occurs
  +
  +     * @exception ServletException if a servlet exception occurs
  +
  +     */
  +
  +    public ActionForward perform(ActionMapping mapping,
  +
  +                 ActionForm form,
  +
  +                 HttpServletRequest request,
  +
  +                 HttpServletResponse response)
  +
  +    throws IOException, ServletException {
  +
  +
  +
  +        // Identify the request parameter containing the method name
  +
  +        String parameter = mapping.getParameter();
  +
  +        if (parameter == null) {
  +
  +            String message =
  +
  +                messages.getMessage("dispatch.handler", mapping.getPath());
  +
  +            servlet.log(message);
  +
  +            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
  +
  +                               message);
  +
  +            return (null);
  +
  +        }
  +
  +
  +
  +        // Identify the method name to be dispatched to
  +
  +        String name = request.getParameter(parameter);
  +
  +        if (name == null) {
  +
  +            String message =
  +
  +                messages.getMessage("dispatch.parameter", mapping.getPath(),
  +
  +                                    parameter);
  +
  +            servlet.log(message);
  +
  +            response.sendError(HttpServletResponse.SC_BAD_REQUEST,
  +
  +                               message);
  +
  +            return (null);
  +
  +        }
  +
  +
  +
  +        // Identify the method object to be dispatched to
  +
  +        Method method = null;
  +
  +        try {
  +
  +            method = getMethod(name);
  +
  +        } catch (NoSuchMethodException e) {
  +
  +            String message =
  +
  +                messages.getMessage("dispatch.method", mapping.getPath(),
  +
  +                                    name);
  +
  +            servlet.log(message);
  +
  +            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
  +
  +                               message);
  +
  +            return (null);
  +
  +        }
  +
  +
  +
  +        // Dispatch to the specified method
  +
  +        ActionForward forward = null;
  +
  +        try {
  +
  +            Object args[] = { mapping, form, request, response };
  +
  +            forward = (ActionForward) method.invoke(this, args);
  +
  +        } catch (ClassCastException e) {
  +
  +            String message =
  +
  +                messages.getMessage("dispatch.return", mapping.getPath(),
  +
  +                                    name);
  +
  +            servlet.log(message);
  +
  +            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
  +
  +                               message);
  +
  +            return (null);
  +
  +        } catch (IllegalAccessException e) {
  +
  +            String message =
  +
  +                messages.getMessage("dispatch.error", mapping.getPath(),
  +
  +                                    name);
  +
  +            servlet.log(message, e);
  +
  +            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
  +
  +                               message);
  +
  +            return (null);
  +
  +        } catch (InvocationTargetException e) {
  +
  +            String message =
  +
  +                messages.getMessage("dispatch.error", mapping.getPath(),
  +
  +                                    name);
  +
  +            servlet.log(message, e);
  +
  +            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
  +
  +                               message);
  +
  +            return (null);
  +
  +        }
  +
  +
  +
  +        // Return the returned ActionForward instance
  +
  +        return (forward);
  +
  +
  +
  +    }
  +
  +
  +
  +
  +
  +    // ----------------------------------------------------- Protected Methods
  +
  +
  +
  +
  +
  +    /**
  +
  +     * Introspect the current class to identify a method of the specified
  +
  +     * name that accepts the same parameter types as the <code>perform()</code>
  +
  +     * method does.
  +
  +     *
  +
  +     * @param name Name of the method to be introspected
  +
  +     *
  +
  +     * @exception NoSuchMethodException if no such method can be found
  +
  +     */
  +
  +    protected Method getMethod(String name)
  +
  +        throws NoSuchMethodException {
  +
  +
  +
  +        synchronized (methods) {
  +
  +            Method method = (Method) methods.get(name);
  +
  +            if (method == null) {
  +
  +                method = clazz.getMethod(name, types);
  +
  +                methods.put(name, method);
  +
  +            }
  +
  +            return (method);
  +
  +        }
  +
  +
  +
  +    }
  +
  +
  +
  +
  +
  +}
  +
  
  
  

Reply via email to