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

📄 debugginginterceptor.java

📁 struts 2 核心包 的源码 有错误是难免的
💻 JAVA
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space 
// Source File Name:   DebuggingInterceptor.java

package org.apache.struts2.interceptor.debugging;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.opensymphony.xwork2.interceptor.PreResultListener;
import com.opensymphony.xwork2.util.ValueStack;
import java.beans.*;
import java.io.*;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.views.freemarker.FreemarkerManager;
import org.apache.struts2.views.freemarker.FreemarkerResult;

// Referenced classes of package org.apache.struts2.interceptor.debugging:
//			PrettyPrintWriter

public class DebuggingInterceptor
	implements Interceptor
{

	private static final long serialVersionUID = 0xd50418172a2e1e01L;
	private static final Log log = LogFactory.getLog(org/apache/struts2/interceptor/debugging/DebuggingInterceptor);
	private String ignorePrefixes[] = {
		"org.apache.struts.", "com.opensymphony.xwork2.", "xwork."
	};
	private String _ignoreKeys[] = {
		"application", "session", "parameters", "request"
	};
	private HashSet ignoreKeys;
	private static final String XML_MODE = "xml";
	private static final String CONSOLE_MODE = "console";
	private static final String COMMAND_MODE = "command";
	private static final String SESSION_KEY = "org.apache.struts2.interceptor.debugging.VALUE_STACK";
	private static final String DEBUG_PARAM = "debug";
	private static final String EXPRESSION_PARAM = "expression";
	private boolean enableXmlWithConsole;
	private boolean devMode;
	private FreemarkerManager freemarkerManager;
	private boolean consoleEnabled;

	public DebuggingInterceptor()
	{
		ignoreKeys = new HashSet(Arrays.asList(_ignoreKeys));
		enableXmlWithConsole = false;
		consoleEnabled = false;
	}

	public void setDevMode(String mode)
	{
		devMode = "true".equals(mode);
	}

	public void setFreemarkerManager(FreemarkerManager mgr)
	{
		freemarkerManager = mgr;
	}

	public void init()
	{
	}

	public void destroy()
	{
	}

	public String intercept(ActionInvocation inv)
		throws Exception
	{
		boolean cont = true;
		if (devMode)
		{
			ActionContext ctx = ActionContext.getContext();
			String type = getParameter("debug");
			ctx.getParameters().remove("debug");
			if ("xml".equals(type))
				inv.addPreResultListener(new PreResultListener() {

					final DebuggingInterceptor this$0;

					public void beforeResult(ActionInvocation inv, String result)
					{
						printContext();
					}

			
			{
				this$0 = DebuggingInterceptor.this;
				super();
			}
				});
			else
			if ("console".equals(type))
			{
				consoleEnabled = true;
				inv.addPreResultListener(new PreResultListener() {

					final DebuggingInterceptor this$0;

					public void beforeResult(ActionInvocation inv, String actionResult)
					{
						String xml = "";
						if (enableXmlWithConsole)
						{
							StringWriter writer = new StringWriter();
							printContext(new PrettyPrintWriter(writer));
							xml = writer.toString();
							xml = xml.replaceAll("&", "&");
							xml = xml.replaceAll(">", ">");
							xml = xml.replaceAll("<", "&lt;");
						}
						ActionContext.getContext().put("debugXML", xml);
						FreemarkerResult result = new FreemarkerResult();
						result.setFreemarkerManager(freemarkerManager);
						result.setContentType("text/html");
						result.setLocation("/org/apache/struts2/interceptor/debugging/console.ftl");
						result.setParse(false);
						try
						{
							result.execute(inv);
						}
						catch (Exception ex)
						{
							DebuggingInterceptor.log.error("Unable to create debugging console", ex);
						}
					}

			
			{
				this$0 = DebuggingInterceptor.this;
				super();
			}
				});
			} else
			if ("command".equals(type))
			{
				ValueStack stack = (ValueStack)ctx.getSession().get("org.apache.struts2.interceptor.debugging.VALUE_STACK");
				String cmd = getParameter("expression");
				ServletActionContext.getRequest().setAttribute("decorator", "none");
				HttpServletResponse res = ServletActionContext.getResponse();
				res.setContentType("text/plain");
				try
				{
					PrintWriter writer = ServletActionContext.getResponse().getWriter();
					writer.print(stack.findValue(cmd));
					writer.close();
				}
				catch (IOException ex)
				{
					ex.printStackTrace();
				}
				cont = false;
			}
		}
		if (!cont)
			break MISSING_BLOCK_LABEL_289;
		String s = inv.invoke();
		if (devMode && consoleEnabled)
		{
			ActionContext ctx = ActionContext.getContext();
			ctx.getSession().put("org.apache.struts2.interceptor.debugging.VALUE_STACK", ctx.get("com.opensymphony.xwork2.util.ValueStack.ValueStack"));
		}
		return s;
		Exception exception;
		exception;
		if (devMode && consoleEnabled)
		{
			ActionContext ctx = ActionContext.getContext();
			ctx.getSession().put("org.apache.struts2.interceptor.debugging.VALUE_STACK", ctx.get("com.opensymphony.xwork2.util.ValueStack.ValueStack"));
		}
		throw exception;
		return null;
	}

	private String getParameter(String key)
	{
		String arr[] = (String[])(String[])ActionContext.getContext().getParameters().get(key);
		if (arr != null && arr.length > 0)
			return arr[0];
		else
			return null;
	}

	protected void printContext()
	{
		HttpServletResponse res = ServletActionContext.getResponse();
		res.setContentType("text/xml");
		try
		{
			PrettyPrintWriter writer = new PrettyPrintWriter(ServletActionContext.getResponse().getWriter());
			printContext(writer);
			writer.close();
		}
		catch (IOException ex)
		{
			ex.printStackTrace();
		}
	}

	protected void printContext(PrettyPrintWriter writer)
	{
		ActionContext ctx = ActionContext.getContext();
		writer.startNode("debug");
		serializeIt(ctx.getParameters(), "parameters", writer, new ArrayList());
		writer.startNode("context");
		Map ctxMap = ctx.getContextMap();
		Iterator i$ = ctxMap.keySet().iterator();
		do
		{
			if (!i$.hasNext())
				break;
			Object o = i$.next();
			String key = o.toString();
			boolean print = !ignoreKeys.contains(key);
			String arr$[] = ignorePrefixes;
			int len$ = arr$.length;
			int i$ = 0;
			do
			{
				if (i$ >= len$)
					break;
				String ignorePrefixe = arr$[i$];
				if (key.startsWith(ignorePrefixe))
				{
					print = false;
					break;
				}
				i$++;
			} while (true);
			if (print)
				serializeIt(ctxMap.get(key), key, writer, new ArrayList());
		} while (true);
		writer.endNode();
		serializeIt(ctx.getSession(), "request", writer, new ArrayList());
		serializeIt(ctx.getSession(), "session", writer, new ArrayList());
		ValueStack stack = (ValueStack)ctx.get("com.opensymphony.xwork2.util.ValueStack.ValueStack");
		serializeIt(stack.getRoot(), "valueStack", writer, new ArrayList());
		writer.endNode();
	}

	protected void serializeIt(Object bean, String name, PrettyPrintWriter writer, List stack)
	{
		writer.flush();
		if (bean != null && stack.contains(bean))
		{
			if (log.isInfoEnabled())
				log.info((new StringBuilder()).append("Circular reference detected, not serializing object: ").append(name).toString());
			return;
		}
		if (bean != null)
			stack.add(bean);
		if (bean == null)
			return;
		String clsName = bean.getClass().getName();
		writer.startNode(name);
		if (bean instanceof Collection)
		{
			Collection col = (Collection)bean;
			Object aCol;
			for (Iterator i$ = col.iterator(); i$.hasNext(); serializeIt(aCol, "value", writer, stack))
				aCol = i$.next();

		} else
		if (bean instanceof Map)
		{
			Map map = (Map)bean;
			Object key;
			Object Objvalue;
			for (Iterator i$ = map.keySet().iterator(); i$.hasNext(); serializeIt(Objvalue, key.toString(), writer, stack))
			{
				key = i$.next();
				Objvalue = map.get(key);
			}

		} else
		if (bean.getClass().isArray())
		{
			for (int i = 0; i < Array.getLength(bean); i++)
				serializeIt(Array.get(bean, i), "arrayitem", writer, stack);

		} else
		if (clsName.startsWith("java.lang"))
			writer.setValue(bean.toString());
		else
			try
			{
				BeanInfo info = Introspector.getBeanInfo(bean.getClass());
				PropertyDescriptor props[] = info.getPropertyDescriptors();
				PropertyDescriptor arr$[] = props;
				int len$ = arr$.length;
				for (int i$ = 0; i$ < len$; i$++)
				{
					PropertyDescriptor prop = arr$[i$];
					String n = prop.getName();
					Method m = prop.getReadMethod();
					if (m != null)
						serializeIt(m.invoke(bean, new Object[0]), n, writer, stack);
				}

			}
			catch (Exception e)
			{
				log.error(e, e);
			}
		writer.endNode();
		stack.remove(bean);
	}

	public void setEnableXmlWithConsole(boolean enableXmlWithConsole)
	{
		this.enableXmlWithConsole = enableXmlWithConsole;
	}




}

⌨️ 快捷键说明

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