⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defaultactioninvocation.java

📁 在Struts2中的jar包xwork的源代码.版本为2.0.7
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    		if (interceptors.hasNext()) {    			final InterceptorMapping interceptor = (InterceptorMapping) interceptors.next();    			UtilTimerStack.profile("interceptor: "+interceptor.getName(),     					new UtilTimerStack.ProfilingBlock<String>() {							public String doProfiling() throws Exception {				    			resultCode = interceptor.getInterceptor().intercept(DefaultActionInvocation.this);				    			return null;							}    			});    		} else {    			resultCode = invokeActionOnly();    		}    		// this is needed because the result will be executed, then control will return to the Interceptor, which will    		// return above and flow through again    		if (!executed) {    			if (preResultListeners != null) {    				for (Iterator iterator = preResultListeners.iterator();    					iterator.hasNext();) {    					PreResultListener listener = (PreResultListener) iterator.next();    					    					String _profileKey="preResultListener: ";    					try {    						UtilTimerStack.push(_profileKey);    						listener.beforeResult(this, resultCode);    					}    					finally {    						UtilTimerStack.pop(_profileKey);    					}    				}    			}    			// now execute the result, if we're supposed to    			if (proxy.getExecuteResult()) {    				executeResult();    			}    			executed = true;    		}    		return resultCode;    	}    	finally {    		UtilTimerStack.pop(profileKey);    	}    }    public String invokeActionOnly() throws Exception {    	return invokeAction(getAction(), proxy.getConfig());    }    protected void createAction(Map contextMap) {        // load action        String timerKey = "actionCreate: "+proxy.getActionName();        try {            UtilTimerStack.push(timerKey);            action = objectFactory.buildAction(proxy.getActionName(), proxy.getNamespace(), proxy.getConfig(), contextMap);        } catch (InstantiationException e) {            throw new XWorkException("Unable to intantiate Action!", e, proxy.getConfig());        } catch (IllegalAccessException e) {            throw new XWorkException("Illegal access to constructor, is it public?", e, proxy.getConfig());        } catch (Exception e) {            String gripe = "";            if (proxy == null) {                gripe = "Whoa!  No ActionProxy instance found in current ActionInvocation.  This is bad ... very bad";            } else if (proxy.getConfig() == null) {                gripe = "Sheesh.  Where'd that ActionProxy get to?  I can't find it in the current ActionInvocation!?";            } else if (proxy.getConfig().getClassName() == null) {                gripe = "No Action defined for '" + proxy.getActionName() + "' in namespace '" + proxy.getNamespace() + "'";            } else {                gripe = "Unable to instantiate Action, " + proxy.getConfig().getClassName() + ",  defined for '" + proxy.getActionName() + "' in namespace '" + proxy.getNamespace() + "'";            }            gripe += (((" -- " + e.getMessage()) != null) ? e.getMessage() : " [no message in exception]");            throw new XWorkException(gripe, e, proxy.getConfig());        } finally {            UtilTimerStack.pop(timerKey);        }        if (actionEventListener != null) {            action = actionEventListener.prepare(action, stack);        }    }    protected Map createContextMap() {        Map contextMap;        if ((extraContext != null) && (extraContext.containsKey(ActionContext.VALUE_STACK))) {            // In case the ValueStack was passed in            stack = (ValueStack) extraContext.get(ActionContext.VALUE_STACK);            if (stack == null) {                throw new IllegalStateException("There was a null Stack set into the extra params.");            }            contextMap = stack.getContext();        } else {            // create the value stack            // this also adds the ValueStack to its context            stack = ValueStackFactory.getFactory().createValueStack();            // create the action context            contextMap = stack.getContext();        }        // put extraContext in        if (extraContext != null) {            contextMap.putAll(extraContext);        }        //put this DefaultActionInvocation into the context map        contextMap.put(ActionContext.ACTION_INVOCATION, this);        return contextMap;    }    /**     * Uses getResult to get the final Result and executes it     *      * @throws ConfigurationException If not result can be found with the returned code     */    private void executeResult() throws Exception {        result = createResult();        String timerKey = "executeResult: "+getResultCode();        try {            UtilTimerStack.push(timerKey);            if (result != null) {                result.execute(this);            } else if (resultCode != null && !Action.NONE.equals(resultCode)) {                throw new ConfigurationException("No result defined for action " + getAction().getClass().getName()                         + " and result " + getResultCode(), proxy.getConfig());            } else {                if (LOG.isDebugEnabled()) {                    LOG.debug("No result returned for action "+getAction().getClass().getName()+" at "+proxy.getConfig().getLocation());                }            }        } finally {            UtilTimerStack.pop(timerKey);        }    }    private void init() throws Exception {        Map contextMap = createContextMap();        createAction(contextMap);        if (pushAction) {            stack.push(action);        }        invocationContext = new ActionContext(contextMap);        invocationContext.setName(proxy.getActionName());        // get a new List so we don't get problems with the iterator if someone changes the list        List interceptorList = new ArrayList(proxy.getConfig().getInterceptors());        interceptors = interceptorList.iterator();    }    protected String invokeAction(Object action, ActionConfig actionConfig) throws Exception {        String methodName = proxy.getMethod();        if (LOG.isDebugEnabled()) {            LOG.debug("Executing action method = " + actionConfig.getMethodName());        }        String timerKey = "invokeAction: "+proxy.getActionName();        try {            UtilTimerStack.push(timerKey);                        Method method;            try {                method = getAction().getClass().getMethod(methodName, new Class[0]);            } catch (NoSuchMethodException e) {                // hmm -- OK, try doXxx instead                try {                    String altMethodName = "do" + methodName.substring(0, 1).toUpperCase() + methodName.substring(1);                    method = getAction().getClass().getMethod(altMethodName, new Class[0]);                } catch (NoSuchMethodException e1) {                    // throw the original one                    throw e;                }            }            Object methodResult = method.invoke(action, new Object[0]);            if (methodResult instanceof Result) {            	this.result = (Result) methodResult;            	return null;            } else {            	return (String) methodResult;            }        } catch (NoSuchMethodException e) {            throw new IllegalArgumentException("The " + methodName + "() is not defined in action " + getAction().getClass() + "");        } catch (InvocationTargetException e) {            // We try to return the source exception.            Throwable t = e.getTargetException();            if (actionEventListener != null) {                String result = actionEventListener.handleException(t, getStack());                if (result != null) {                    return result;                }            }            if (t instanceof Exception) {                throw(Exception) t;            } else {                throw e;            }        } finally {            UtilTimerStack.pop(timerKey);        }    }            }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -