Look at the processActionCreate() method in the RequestProcessor. This is
where the problem surfaces. Here's a fragment:
try {
instance = (Action)RequestUtils.applicationInstance(className);
instance.setServlet(this.servlet);
actions.put(className, instance);
} catch (Throwable t) {
log.error(getInternal().getMessage("actionCreate",
mapping.getPath()), t);
The applicationInstance() method just does a newInstance(). Either the
className variable is null, which means the className could not be
retrieved from the mapping. This would be some type of mapping glitch. If
the className is not null, then newInstance() failed for other reasons.
Sprinkle a few println's around in here and the problem will become very
evident.
Chuck
At 04:44 PM 4/15/2002 -0400, you wrote:
>This one is driving me crazy. I've already checked the archive but found
>nothing relevant. I get the following error whenever I run the following
>action:
>
>No action instance for path /addToCart could be created
>
>The other actions are found, just not this one. Here's the relevant parts
>of my struts-config.xml:
>
><struts-config>
>
> <!-- ========== Global Forward Definitions
>============================== -->
> <global-forwards>
>
> <forward name="error" path="/error.jsp"/>
> <forward name="welcome" path="/do/welcome"/>
>
> </global-forwards>
>
> <!-- ========== Action Mapping Definitions
>============================== -->
> <action-mappings>
>
> <action path="/addToCart"
> type="y21.isac.struts.action.AddToCartAction">
> <forward name="success" path="/confirmAddToCart.jsp"/>
> </action>
>
> <action path="/welcome"
> type="y21.isac.struts.action.WelcomeAction"
> name=""
> scope="request"
> input="">
> <forward name="success" path="/welcome.jsp"/>
> </action>
>
> <!-- Test Actions -->
>
> <action path="/testStart"
> type="y21.isac.struts.action.IsacTestStartAction">
> <forward name="success" path="/do/welcome"/>
> <forward name="AddToCartAction" path="/do/addToCart"/>
> </action>
>
> </action-mappings>
></struts-config>
>
>I have tried /addToCart both with and without an ActionForm just to see if
>it made any difference, but it didn't. Wanting to make sure whether or not
>the ActionServlet was finding AddToCartAction, I added the following snippet
>to IsacTestStartAction (which is where I'm calling /addToCart from):
>
> try
> {
> Class.forName("y21.isac.struts.action.AddToCartAction",
>true, this.getClass().getClassLoader());
> System.err.println("ISAC Test Message: AddToCartAction
>Found");
> }
> catch (Exception ex)
> {
> ex.printStackTrace();
> System.err.println("ISAC Test Message: AddToCartAction NOT
>Found");
> }
>
>The AddToCartAction class is reported as found (removing the class file gave
>me the expected "NOT Found"). However if I change the Class.forName line to
>read:
>
>Class.forName("y21.isac.struts.action.AddToCartAction", true,
>this.getClass().getClassLoader());
>
>I get a ClassNotFoundException and the "NOT Found" message. The class files
>are where they should be however. What I can't understand is how
>WelcomeAction and IsacTestStartAction can be found, but AddToCart isn't.
>I've stripped the code from AddToCartAction down to the point where all it
>does is return the ActionForward.
>
>Here are the calls to the action from my jsp:
>
>Add To Cart Action Test Add To Cart Action Direct Does anyone have any
>ideas? Here is the code for IsacTestStartAction and AddToCartAction for
>reference. Thanks in advance. Jason ======================== package
>y21.isac.struts.action; import java.io.*; import javax.servlet.*; import
>javax.servlet.http.*; import org.apache.struts.action.*; class
>AddToCartAction extends org.apache.struts.action.Action { public
>ActionForward perform(ActionMapping mapping, ActionForm form,
>HttpServletRequest request, HttpServletResponse response) throws
>IOException, ServletException { return mapping.findForward("success"); } }
>======================== package y21.isac.struts.action; import java.io.*;
>import javax.servlet.*; import javax.servlet.http.*; import
>org.apache.struts.action.*; import y21.isac.IsacUser; import
>netscape.ldap.LDAPException; public class IsacTestStartAction extends
>Action { public ActionForward perform(ActionMapping mapping, ActionForm
>form, HttpServletRequest request, HttpServletResponse response) throws
>IOException, ServletException { ActionErrors errors = new ActionErrors();
>IsacUser user = new IsacUser(); String testLevel =
>request.getParameter("testLevel"); try { if ("tb".equals(testLevel))
>user.load("isac-tb-1"); else if ("oo".equals(testLevel))
>user.load("isac-oo-1"); else if ("bo".equals(testLevel))
>user.load("isac-bo-1"); else if ("ao".equals(testLevel))
>user.load("isac-ao-1"); else if ("pmbm".equals(testLevel))
>user.load("isac-pm-1"); else { System.err.println("Error in
>IsacTestStartAction: testLevel not recognized"); return (
>mapping.findForward("error") ); } } catch (LDAPException e) {
>e.printStackTrace(); errors.add(ActionErrors.GLOBAL_ERROR, new
>ActionError("error.exception.ldap")); saveErrors(request, errors);
>return(mapping.findForward("error")); }
>request.getSession().setAttribute("user", user); String test =
>request.getParameter("test"); if ("AddToCartAction".equals(test)) {
>System.err.println("ISAC Test Message: Testing AddToCartAction"); try {
>Class.forName("y21.isac.struts.action.AddToCartAction", true,
>request.getClass().getClassLoader()); System.err.println("ISAC Test
>Message: AddToCartAction Found"); } catch (Exception ex) {
>ex.printStackTrace(); System.err.println("ISAC Test Message:
>AddToCartAction NOT Found"); } return
>mapping.findForward("AddToCartAction"); } System.err.println("ISAC Test
>Message: Testing WelcomeAction"); return ( mapping.findForward("success")
>); } } -- To unsubscribe, e-mail: For additional commands, e-mail:
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>