diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/Builder.java b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/Builder.java index be6ebeea..21b89ca1 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/Builder.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/Builder.java @@ -18,6 +18,8 @@ public abstract class Builder { public static interface BuilderContext { ClassOrInterfaceDeclaration self(); + ClassLoader classLoader(); + Descriptor descriptor(); TypeCache type(); diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/ServletGenMojo.java b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/ServletGenMojo.java index f66211d6..216a314d 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/ServletGenMojo.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/ServletGenMojo.java @@ -195,6 +195,11 @@ public ClassOrInterfaceDeclaration self() { return cl; } + @Override + public ClassLoader classLoader() { + return classLoader; + } + @Override public Descriptor descriptor() { return descriptor; diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/LoadInitializer.java b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/LoadInitializer.java index a3d23629..df383517 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/LoadInitializer.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/builder/LoadInitializer.java @@ -21,6 +21,7 @@ import com.github.javaparser.ast.stmt.BlockStmt; import jakarta.servlet.ServletContainerInitializer; +import jakarta.servlet.ServletException; import unknow.server.maven.Utils; import unknow.server.maven.servlet.Builder; @@ -34,7 +35,7 @@ public class LoadInitializer extends Builder { public void add(BuilderContext ctx) { List clazz = new ArrayList<>(ctx.descriptor().initializer); try { - Enumeration e = ClassLoader.getSystemResources("/META-INF/services/" + ServletContainerInitializer.class.getName()); + Enumeration e = ctx.classLoader().getResources("META-INF/services/" + ServletContainerInitializer.class.getName()); while (e.hasMoreElements()) { URL nextElement = e.nextElement(); try (BufferedReader br = new BufferedReader(new InputStreamReader(nextElement.openStream()))) { @@ -46,7 +47,8 @@ public void add(BuilderContext ctx) { } catch (Exception ex) { logger.warn("Failed to process ServletContainerInitializer", ex); } - BlockStmt b = ctx.self().addMethod("loadInitializer", Keyword.PROTECTED, Keyword.FINAL).addMarkerAnnotation(Override.class).createBody(); + BlockStmt b = ctx.self().addMethod("loadInitializer", Keyword.PROTECTED, Keyword.FINAL).addThrownException(ctx.type().getClass(ServletException.class)) + .addMarkerAnnotation(Override.class).createBody(); for (String s : clazz) b.addStatement(new MethodCallExpr(new ObjectCreationExpr(null, ctx.type().getClass(s), Utils.list()), "onStartup", Utils.list(new NullLiteralExpr(), new NameExpr("ctx"))));