📄 debugginginterceptor.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("<", "<");
}
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 + -