diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml
index 2bff0888..6e312801 100644
--- a/.github/workflows/validate.yml
+++ b/.github/workflows/validate.yml
@@ -7,7 +7,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- version: [11, 17]
+ version: [11, 17, 21, 25]
steps:
- uses: actions/checkout@v6
diff --git a/pom.xml b/pom.xml
index 0af6de2e..132714fd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,6 +34,7 @@
11
11
false
+ 0
2.0.13
3.26.1
@@ -69,7 +70,7 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.10.1
+ 3.15.0
@@ -88,7 +89,7 @@
org.apache.maven.plugins
maven-surefire-plugin
- 3.0.0-M7
+ 3.5.6
false
@@ -113,21 +114,29 @@
maven-war-plugin
- 3.3.2
+ 3.5.1
maven-clean-plugin
- 3.2.0
+ 3.5.0
org.apache.maven.plugins
maven-shade-plugin
- 3.2.4
+ 3.6.2
org.apache.maven.plugins
maven-plugin-plugin
- 3.6.0
+ 3.15.2
+
+ 3.9
+
+
+
+ org.eclipse.sisu
+ sisu-maven-plugin
+ 1.0.0
io.github.mavenplugins
@@ -137,17 +146,17 @@
org.apache.maven.plugins
maven-gpg-plugin
- 3.2.4
+ 3.2.8
org.apache.maven.plugins
maven-source-plugin
- 3.3.0
+ 3.4.0
org.apache.maven.plugins
maven-javadoc-plugin
- 3.6.3
+ 3.12.0
@@ -155,12 +164,31 @@
+
+
+ org.apache.maven
+ maven-archiver
+ 3.6.6
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.5.0
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 3.5.0
+
org.codehaus.mojo
versions-maven-plugin
- 2.16.2
+ 2.21.0
false
@@ -171,7 +199,7 @@
regex
- .+-(alpha|beta|rc|M)[0-9]*
+ .+[-.](alpha|beta|rc|RC|M)[0-9]*
@@ -382,7 +410,7 @@
io.github.unknow0.maven
unknow-maven-codegen
- 0.02
+ 0.2.0
io.github.unknow0.model
diff --git a/unknow-server-maven/pom.xml b/unknow-server-maven/pom.xml
index d6056db2..2901d143 100644
--- a/unknow-server-maven/pom.xml
+++ b/unknow-server-maven/pom.xml
@@ -37,14 +37,16 @@
org.apache.maven.plugins
maven-plugin-plugin
-
+
+ io.github.unknow0.maven:unknow-maven-codegen
+
true
+ unknow-server
org.eclipse.sisu
sisu-maven-plugin
- 0.3.3
generate-index
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/AbstractGeneratorMojo.java b/unknow-server-maven/src/main/java/unknow/server/maven/AbstractGeneratorMojo.java
deleted file mode 100644
index 6a054f91..00000000
--- a/unknow-server-maven/src/main/java/unknow/server/maven/AbstractGeneratorMojo.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- *
- */
-package unknow.server.maven;
-
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.plugin.MojoExecution;
-import org.apache.maven.plugins.annotations.Component;
-import org.apache.maven.plugins.annotations.Parameter;
-import org.eclipse.aether.RepositorySystem;
-
-import unknow.maven.codegen.AbstractCodeGenMojo;
-import unknow.maven.codegen.CodeGenConfig;
-
-/**
- * @author unknow
- */
-public abstract class AbstractGeneratorMojo extends AbstractCodeGenMojo {
- @Parameter(defaultValue = "${session}", required = true, readonly = true)
- protected MavenSession session;
- @Parameter(defaultValue = "${mojo}", required = true, readonly = true)
- protected MojoExecution mojo;
- @Component
- protected RepositorySystem repository;
-
- @Parameter
- protected CodeGenConfig codegen;
-}
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/JaxbGeneratorMojo.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/JaxbGeneratorMojo.java
index 09884ba1..b1de8f8b 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/JaxbGeneratorMojo.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/JaxbGeneratorMojo.java
@@ -34,6 +34,7 @@
import com.github.javaparser.ast.stmt.ReturnStmt;
import jakarta.xml.bind.annotation.XmlRootElement;
+import unknow.maven.codegen.AbstractCodeGenMojo;
import unknow.maven.codegen.CodeGenUtils;
import unknow.maven.codegen.TypeFactory;
import unknow.model.api.AnnotationModel;
@@ -58,7 +59,6 @@
import unknow.server.jaxb.handler.ShortHandler;
import unknow.server.jaxb.handler.StringHandler;
import unknow.server.jaxb.handler.ZonedDateTimeHandler;
-import unknow.server.maven.AbstractGeneratorMojo;
import unknow.server.maven.jaxb.builder.HandlerBuilder;
import unknow.server.maven.jaxb.model.XmlCollection;
import unknow.server.maven.jaxb.model.XmlLoader;
@@ -68,7 +68,7 @@
* @author unknow
*/
@Mojo(defaultPhase = LifecyclePhase.GENERATE_SOURCES, name = "jaxb-generator", requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME, requiresDependencyCollection = ResolutionScope.COMPILE_PLUS_RUNTIME)
-public class JaxbGeneratorMojo extends AbstractGeneratorMojo {
+public class JaxbGeneratorMojo extends AbstractCodeGenMojo {
private static final HandlerBuilder HANDLER = new HandlerBuilder();
private final Map handlers = new HashMap<>();
@@ -98,8 +98,7 @@ public JaxbGeneratorMojo() {
}
@Override
- public void execute() throws MojoExecutionException, MojoFailureException {
- init(session, mojo, repository, codegen);
+ protected void doexecute() throws MojoExecutionException, MojoFailureException {
processSrc(type -> {
if (type.annotation(jakarta.xml.bind.annotation.XmlType.class).isPresent())
xmlLoader.add(type);
@@ -147,7 +146,7 @@ private void writeXmlLoader() throws MojoExecutionException {
ClassOrInterfaceDeclaration cl = cu.addClass("XmlLoader", CodeGenUtils.PUBLIC).addImplementedType(types.getClass(XmlHandlerLoader.class));
cl.addMethod("contextPath", CodeGenUtils.PUBLIC).addMarkerAnnotation(Override.class).setType(types.getClass(String.class)).createBody()
- .addStatement(new ReturnStmt(CodeGenUtils.text(codegen.packageName)));
+ .addStatement(new ReturnStmt(CodeGenUtils.text(codegen.getPackageName())));
NodeList list = new NodeList<>();
for (Entry e : handlers.entrySet()) {
@@ -162,7 +161,7 @@ private void writeXmlLoader() throws MojoExecutionException {
writer.write(cu);
- Path path = Paths.get(codegen.resources, "META-INF", "services", XmlHandlerLoader.class.getName());
+ Path path = Paths.get(codegen.getResources(), "META-INF", "services", XmlHandlerLoader.class.getName());
try {
Files.createDirectories(path.getParent());
try (BufferedWriter w = Files.newBufferedWriter(path)) {
@@ -175,11 +174,11 @@ private void writeXmlLoader() throws MojoExecutionException {
}
private void generateGraalVmResources() throws MojoFailureException {
- if (!codegen.graalvm)
+ if (!codegen.isGraalvm())
return;
try {
- Path path = Paths.get(codegen.resources + "/META-INF/native-image/" + uniquePath + "/resource-config.json");
+ Path path = Paths.get(codegen.getResources() + "/META-INF/native-image/" + uniquePath + "/resource-config.json");
Files.createDirectories(path.getParent());
try (BufferedWriter w = Files.newBufferedWriter(path)) {
w.write("{\"resources\":{\"includes\":[");
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsMojo.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsMojo.java
index 7c01905f..1e9be67f 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsMojo.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsMojo.java
@@ -60,6 +60,7 @@
import jakarta.ws.rs.ext.ParamConverter;
import jakarta.ws.rs.ext.ParamConverterProvider;
import jakarta.ws.rs.ext.RuntimeDelegate;
+import unknow.maven.codegen.AbstractCodeGenMojo;
import unknow.maven.codegen.CodeGenUtils;
import unknow.maven.codegen.TypeFactory;
import unknow.model.api.ClassModel;
@@ -67,13 +68,12 @@
import unknow.server.http.jaxrs.JaxrsContext;
import unknow.server.http.jaxrs.JaxrsRuntime;
import unknow.server.http.jaxrs.protostuff.ProtostuffSchema;
-import unknow.server.maven.AbstractGeneratorMojo;
/**
* @author unknow
*/
@Mojo(defaultPhase = LifecyclePhase.GENERATE_SOURCES, name = "jaxrs-generator", requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME, requiresDependencyCollection = ResolutionScope.COMPILE_PLUS_RUNTIME)
-public class JaxrsMojo extends AbstractGeneratorMojo {
+public class JaxrsMojo extends AbstractCodeGenMojo {
private static final String VALUE = "value";
private JaxrsModel model;
@@ -94,8 +94,7 @@ public class JaxrsMojo extends AbstractGeneratorMojo {
private MediaTypesBuilder mt;
@Override
- public void execute() throws MojoExecutionException, MojoFailureException {
- init(session, mojo, repository, codegen);
+ protected void doexecute() throws MojoExecutionException, MojoFailureException {
if (basePath.endsWith("/"))
basePath = basePath.substring(0, basePath.length() - 1);
model = new JaxrsModel(loader, classLoader, basePath);
@@ -124,7 +123,7 @@ public void execute() throws MojoExecutionException, MojoFailureException {
for (Entry> e : map.entrySet())
writer.write(new JaxRsServletBuilder(newCu(), existingClass, e.getKey(), e.getValue(), beans, mt).build());
- new OpenApiBuilder().build(openapi.getSpec(project), model, codegen.resources + basePath + "/openapi.json");
+ new OpenApiBuilder().build(openapi.getSpec(project), model, codegen.getResources() + basePath + "/openapi.json");
beans.save(writer);
mt.save(writer);
@@ -136,7 +135,7 @@ public void execute() throws MojoExecutionException, MojoFailureException {
*/
private void generateInitalizer() throws IOException, MojoExecutionException {
- Path path = Paths.get(codegen.resources, "META-INF", "services", ServletContainerInitializer.class.getName());
+ Path path = Paths.get(codegen.getResources(), "META-INF", "services", ServletContainerInitializer.class.getName());
Files.createDirectories(path.getParent());
try (Writer w = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
w.append(fullName("JaxrsInit")).write('\n');
@@ -265,11 +264,11 @@ private void generateImplicitConverter(ClassOrInterfaceDeclaration clazz, String
}
private void generateGraalvmResources() throws MojoFailureException {
- if (!codegen.graalvm)
+ if (!codegen.isGraalvm())
return;
try {
- Path path = Paths.get(codegen.resources + "/META-INF/native-image/" + uniquePath + "/resource-config.json");
+ Path path = Paths.get(codegen.getResources() + "/META-INF/native-image/" + uniquePath + "/resource-config.json");
Files.createDirectories(path.getParent());
try (BufferedWriter w = Files.newBufferedWriter(path)) {
w.write("{\"resources\":{\"includes\":[");
diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/JaxwsGeneratorMojo.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/JaxwsGeneratorMojo.java
index 25a2f432..51baed8d 100644
--- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/JaxwsGeneratorMojo.java
+++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/JaxwsGeneratorMojo.java
@@ -31,9 +31,9 @@
import com.github.javaparser.ast.CompilationUnit;
import jakarta.jws.WebService;
+import unknow.maven.codegen.AbstractCodeGenMojo;
import unknow.maven.codegen.TypeFactory;
import unknow.model.api.AnnotationModel;
-import unknow.server.maven.AbstractGeneratorMojo;
import unknow.server.maven.jaxb.model.XmlLoader;
import unknow.server.maven.jaxws.binding.Service;
@@ -41,7 +41,7 @@
* @author unknow
*/
@Mojo(defaultPhase = LifecyclePhase.GENERATE_SOURCES, name = "jaxws-generator", requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME, requiresDependencyCollection = ResolutionScope.COMPILE_PLUS_RUNTIME)
-public class JaxwsGeneratorMojo extends AbstractGeneratorMojo {
+public class JaxwsGeneratorMojo extends AbstractCodeGenMojo {
private static final Logger logger = LoggerFactory.getLogger(JaxwsGeneratorMojo.class);
private static final XMLOutputFactory f = XMLOutputFactory.newInstance();
@@ -55,9 +55,7 @@ public class JaxwsGeneratorMojo extends AbstractGeneratorMojo {
private final XmlLoader xmlLoader = new XmlLoader();
@Override
- public void execute() throws MojoExecutionException, MojoFailureException {
- init(session, mojo, repository, codegen);
-
+ protected void doexecute() throws MojoExecutionException, MojoFailureException {
if (!basePath.endsWith("/"))
basePath += "/";
@@ -80,7 +78,7 @@ public void execute() throws MojoExecutionException, MojoFailureException {
Service service = Service.build(t.asClass(), basePath, loader, xmlLoader);
String n = "generated/" + uniquePath + "/" + service.name + ".wsdl";
- Path path = Paths.get(codegen.resources, n);
+ Path path = Paths.get(codegen.getResources(), n);
Files.createDirectories(path.getParent());
try (BufferedWriter w = Files.newBufferedWriter(path)) {
new WsdlBuilder(service, publishUrl).write(f.createXMLStreamWriter(w));
@@ -93,9 +91,9 @@ public void execute() throws MojoExecutionException, MojoFailureException {
}
});
- if (codegen.graalvm && !wsdl.isEmpty()) {
+ if (codegen.isGraalvm() && !wsdl.isEmpty()) {
try {
- Path path = Paths.get(codegen.resources + "/META-INF/native-image/" + uniquePath + "/resource-config.json");
+ Path path = Paths.get(codegen.getResources() + "/META-INF/native-image/" + uniquePath + "/resource-config.json");
Files.createDirectories(path.getParent());
try (BufferedWriter w = Files.newBufferedWriter(path)) {
w.write("{\"resources\":{\"includes\":[");
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 1f5b6ed6..305e024c 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
@@ -6,8 +6,11 @@
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.nio.file.PathMatcher;
import java.nio.file.Paths;
+import java.nio.file.attribute.BasicFileAttributes;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -31,9 +34,11 @@
import jakarta.servlet.DispatcherType;
import jakarta.servlet.ServletContainerInitializer;
+import unknow.maven.codegen.AbstractCodeGenMojo;
+import unknow.maven.codegen.FileScanner.FileHandler;
+import unknow.maven.codegen.PathMatchers;
import unknow.maven.codegen.TypeFactory;
import unknow.model.api.ModelLoader;
-import unknow.server.maven.AbstractGeneratorMojo;
import unknow.server.maven.servlet.Builder.BuilderContext;
import unknow.server.maven.servlet.builder.CreateContext;
import unknow.server.maven.servlet.builder.CreateEventManager;
@@ -55,7 +60,7 @@
* @author unknow
*/
@Mojo(defaultPhase = LifecyclePhase.GENERATE_SOURCES, name = "servlet-generator", requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME, requiresDependencyCollection = ResolutionScope.COMPILE_PLUS_RUNTIME)
-public class ServletGenMojo extends AbstractGeneratorMojo implements BuilderContext {
+public class ServletGenMojo extends AbstractCodeGenMojo implements BuilderContext, FileHandler {
private static final Logger logger = LoggerFactory.getLogger(ServletGenMojo.class);
private static final List BUILDER = Arrays.asList(new CreateEventManager(), new CreateServletManager(), new CreateContext(), new CreateServlets(),
@@ -86,13 +91,15 @@ public class ServletGenMojo extends AbstractGeneratorMojo implements BuilderCont
@Parameter(defaultValue = "false")
private boolean addAccessLog;
- @Parameter(defaultValue = "WEB-INF,META-INF,generated")
- private List ignoredResources;
+ private PathMatcher ignoredResources;
- @Override
- public void execute() throws MojoExecutionException, MojoFailureException {
- init(session, mojo, repository, codegen);
+ @Parameter(defaultValue = "WEB-INF/**,META-INF/**,generated/**")
+ public void setIgnoredResources(Collection ignore) {
+ ignoredResources = PathMatchers.oneofGlob(ignore);
+ }
+ @Override
+ protected void doexecute() throws MojoExecutionException, MojoFailureException {
cu = newCu();
if (addAccessLog)
@@ -106,8 +113,8 @@ public void execute() throws MojoExecutionException, MojoFailureException {
}
processSrc(descriptor);
- processResources(this::process);
- if (codegen.graalvm && !descriptor.resources.isEmpty())
+ processResources(this);
+ if (codegen.isGraalvm() && !descriptor.resources.isEmpty())
generateGraalvmResources();
logger.info("descriptor:\n{}", descriptor);
@@ -123,8 +130,9 @@ public void execute() throws MojoExecutionException, MojoFailureException {
writer.write(cu);
}
- private void process(Path full, Path file) {
- if (file.equals(WEBXML)) {
+ @Override
+ public boolean handle(Path full, Path relative, BasicFileAttributes attrs) throws IOException {
+ if (relative.equals(WEBXML)) {
try (InputStream is = Files.newInputStream(full)) {
XMLStreamReader r = XML_IN.createXMLStreamReader(is);
WebXml.parse(loader, descriptor, r);
@@ -132,9 +140,9 @@ private void process(Path full, Path file) {
} catch (XMLStreamException | IOException e) {
logger.warn("Failed to parse web.xml {}", full, e);
}
- return;
+ return true;
}
- if (file.equals(INITIALIZER)) {
+ if (relative.equals(INITIALIZER)) {
try (BufferedReader r = Files.newBufferedReader(full)) {
String l;
while ((l = r.readLine()) != null)
@@ -144,12 +152,10 @@ private void process(Path full, Path file) {
}
}
- for (String p : ignoredResources) {
- if (file.startsWith(p))
- return;
- }
+ if (ignoredResources.matches(relative))
+ return true;
- String p = "/" + file.toString().replace('\\', '/');
+ String p = "/" + relative.toString().replace('\\', '/');
try {
long size = Files.size(full);
descriptor.resources.put(p, new Resource(Files.getLastModifiedTime(full).to(TimeUnit.MILLISECONDS), size));
@@ -161,7 +167,7 @@ private void process(Path full, Path file) {
} catch (IOException e) {
logger.error("Failed to process resources {}", full, e);
}
-
+ return true;
}
/**
@@ -170,7 +176,7 @@ private void process(Path full, Path file) {
*/
private void generateGraalvmResources() throws MojoFailureException {
try {
- Path path = Paths.get(codegen.resources + "/META-INF/native-image/" + uniquePath + "/resource-config.json");
+ Path path = Paths.get(codegen.getResources() + "/META-INF/native-image/" + uniquePath + "/resource-config.json");
Files.createDirectories(path.getParent());
try (BufferedWriter w = Files.newBufferedWriter(path)) {
w.write("{\"resources\":{\"includes\":[");
diff --git a/unknow-server-nio/src/main/java/unknow/server/nio/NIOLoop.java b/unknow-server-nio/src/main/java/unknow/server/nio/NIOLoop.java
index 9154c317..fbae134f 100644
--- a/unknow-server-nio/src/main/java/unknow/server/nio/NIOLoop.java
+++ b/unknow-server-nio/src/main/java/unknow/server/nio/NIOLoop.java
@@ -93,7 +93,7 @@ public final void run() {
if (!selector.isOpen()) {
afterStop();
return;
- }
+ }
// stop mode
// TODO add timeout ?
diff --git a/unknow-server-servlet/src/main/java/unknow/server/servlet/HttpWorker.java b/unknow-server-servlet/src/main/java/unknow/server/servlet/HttpWorker.java
index d16fe6be..51cace9c 100644
--- a/unknow-server-servlet/src/main/java/unknow/server/servlet/HttpWorker.java
+++ b/unknow-server-servlet/src/main/java/unknow/server/servlet/HttpWorker.java
@@ -68,11 +68,21 @@ public void sendError(int sc, Throwable t, String msg) throws IOException {
}
}
+ private final boolean start() {
+ try {
+ return doStart();
+ } catch (Exception e) {
+ logger.warn("init req failed", e);
+ if (e instanceof InterruptedException)
+ Thread.currentThread().interrupt();
+ return false;
+ }
+ }
+
@Override
public void run() {
try {
- if (!doStart()) {
- logger.warn("init req failed");
+ if (!start()) {
co.getOut().close();
return;
}
@@ -84,8 +94,6 @@ public void run() {
res.sendError(500);
} catch (@SuppressWarnings("unused") IOException e1) { //ok
}
- if (e instanceof InterruptedException)
- Thread.currentThread().interrupt();
} finally {
try {
doDone();
diff --git a/unknow-server-servlet/src/main/java/unknow/server/servlet/impl/ServletRequestImpl.java b/unknow-server-servlet/src/main/java/unknow/server/servlet/impl/ServletRequestImpl.java
index 8f576485..33978d86 100644
--- a/unknow-server-servlet/src/main/java/unknow/server/servlet/impl/ServletRequestImpl.java
+++ b/unknow-server-servlet/src/main/java/unknow/server/servlet/impl/ServletRequestImpl.java
@@ -215,22 +215,28 @@ public void setAttribute(String name, Object o) {
@Override
public String getCharacterEncoding() {
if (encoding == null) {
- String header = getHeader("content-type");
- if (header != null) {
- int i = header.indexOf(";encoding=");
- if (i > 0) {
- int e = header.indexOf(';', i);
- if (e < 0)
- e = header.length();
- encoding = header.substring(i + 10, e);
- }
- }
+ encoding = getCharset(getHeader("content-type"));
if (encoding == null)
encoding = co.getCtx().getRequestCharacterEncoding();
}
return encoding;
}
+ private static String getCharset(String header) {
+ int i = header.indexOf(';');
+ while (i > 0) {
+ int e = header.indexOf(';', i);
+ if (e < 0)
+ e = header.length();
+ int c = header.indexOf("charset=", i);
+ if (c < e) {
+ return header.substring(c + 10, e);
+ }
+ i = e;
+ }
+ return null;
+ }
+
@Override
public void setCharacterEncoding(String env) throws UnsupportedEncodingException {
encoding = env;
@@ -274,7 +280,11 @@ public int getIntHeader(String name) {
@Override
public String getContentType() {
- return getHeader("content-type");
+ String s = getHeader("content-type");
+ int i = s.indexOf(';');
+ if (i > 0)
+ return s.substring(0, i);
+ return s;
}
@Override
@@ -366,7 +376,7 @@ public Map getParameterMap() {
@Override
public String getScheme() {
- return "http";
+ return isSecure() ? "https" : "http";
}
@Override
diff --git a/unknow-server-servlet/src/test/java/unknow/server/servlet/http11/RequestDecoderTest.java b/unknow-server-servlet/src/test/java/unknow/server/servlet/http11/RequestDecoderTest.java
index 999eddd1..2be942e9 100644
--- a/unknow-server-servlet/src/test/java/unknow/server/servlet/http11/RequestDecoderTest.java
+++ b/unknow-server-servlet/src/test/java/unknow/server/servlet/http11/RequestDecoderTest.java
@@ -2,8 +2,6 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.withSettings;
import java.nio.ByteBuffer;
import java.util.stream.Stream;
@@ -12,7 +10,6 @@
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
-import unknow.server.servlet.HttpConnection;
import unknow.server.servlet.impl.ServletRequestImpl;
public class RequestDecoderTest {
@@ -30,7 +27,7 @@ public static Stream test() {
@ParameterizedTest
@MethodSource
public void test(String expected, byte[]... chunk) {
- Http11Processor co = mock(Http11Processor.class, withSettings().useConstructor((HttpConnection) null));
+ Http11Processor co = new Http11Processor(null);
RequestDecoder d = new RequestDecoder(co);
ServletRequestImpl req = null;
for (byte[] b : chunk)
diff --git a/unknow-server-servlet/src/test/java/unknow/server/servlet/utils/PathTreeTest.java b/unknow-server-servlet/src/test/java/unknow/server/servlet/utils/PathTreeTest.java
index f756b8fb..b71f4ddf 100644
--- a/unknow-server-servlet/src/test/java/unknow/server/servlet/utils/PathTreeTest.java
+++ b/unknow-server-servlet/src/test/java/unknow/server/servlet/utils/PathTreeTest.java
@@ -4,19 +4,14 @@
package unknow.server.servlet.utils;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
import java.util.Arrays;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.mockito.Mockito;
import jakarta.servlet.DispatcherType;
import jakarta.servlet.FilterChain;
-import unknow.server.servlet.HttpConnection;
-import unknow.server.servlet.impl.ServletContextImpl;
import unknow.server.servlet.impl.ServletRequestImpl;
import unknow.server.servlet.utils.PathTree.Node;
import unknow.server.servlet.utils.PathTree.PartNode;
@@ -25,15 +20,13 @@
* @author unknow
*/
public class PathTreeTest {
- ServletRequestImpl mock;
+ ServletRequestImpl req;
@BeforeEach
public void init() {
- ServletContextImpl ctx = new ServletContextImpl("", "", null, null, null, null, null);
- HttpConnection p = mock(HttpConnection.class);
- when(p.getCtx()).thenReturn(ctx);
+// ServletContextImpl ctx = new ServletContextImpl("", "", null, null, null, null, null);
- mock = mock(ServletRequestImpl.class, Mockito.withSettings().useConstructor(p, DispatcherType.REQUEST));
+ req = new ServletRequestImpl(null, DispatcherType.REQUEST);
}
@Test
@@ -43,11 +36,11 @@ public void root() {
PathTree tree = new PathTree(new PartNode(null, null, null, exacts, defaults));
- when(mock.getRequestURI()).thenReturn("/");
- assertEquals(exacts, tree.find(mock));
+ req.setRequestUri("/");
+ assertEquals(exacts, tree.find(req));
- when(mock.getRequestURI()).thenReturn("/blabla");
- assertEquals(defaults, tree.find(mock));
+ req.setRequestUri("/blabla");
+ assertEquals(defaults, tree.find(req));
}
@Test
@@ -60,14 +53,14 @@ public void nexts() {
PathTree tree = new PathTree(new PartNode(null, next, null, null, defaults));
- when(mock.getRequestURI()).thenReturn("/toto");
- assertEquals(defaults, tree.find(mock));
+ req.setRequestUri("/toto");
+ assertEquals(defaults, tree.find(req));
- when(mock.getRequestURI()).thenReturn("/first");
- assertEquals(first, tree.find(mock));
+ req.setRequestUri("/first");
+ assertEquals(first, tree.find(req));
- when(mock.getRequestURI()).thenReturn("/second");
- assertEquals(second, tree.find(mock));
+ req.setRequestUri("/second");
+ assertEquals(second, tree.find(req));
}
@Test
@@ -80,14 +73,14 @@ public void ends() {
PathTree tree = new PathTree(new PartNode(null, null, ends, null, defaults));
- when(mock.getRequestURI()).thenReturn("/bla.txt");
- assertEquals(defaults, tree.find(mock));
+ req.setRequestUri("/bla.txt");
+ assertEquals(defaults, tree.find(req));
- when(mock.getRequestURI()).thenReturn("/bla.jsp");
- assertEquals(jsp, tree.find(mock));
+ req.setRequestUri("/bla.jsp");
+ assertEquals(jsp, tree.find(req));
- when(mock.getRequestURI()).thenReturn("/bla.html");
- assertEquals(html, tree.find(mock));
+ req.setRequestUri("/bla.html");
+ assertEquals(html, tree.find(req));
}
}