update datastructures to 5.2.3, remove settings wherever possible
This commit is contained in:
parent
d4a8beaf65
commit
be870d64ea
49 changed files with 205 additions and 172 deletions
|
@ -18,7 +18,8 @@ test {
|
||||||
'--add-opens=java.base/java.nio=ALL-UNNAMED',
|
'--add-opens=java.base/java.nio=ALL-UNNAMED',
|
||||||
'--add-opens=java.base/java.util=ALL-UNNAMED'
|
'--add-opens=java.base/java.util=ALL-UNNAMED'
|
||||||
systemProperty 'java.util.logging.config.file', 'src/test/resources/logging.properties'
|
systemProperty 'java.util.logging.config.file', 'src/test/resources/logging.properties'
|
||||||
systemProperty 'java.net.preferIPv6Addresses', 'true'
|
// avoid network unreachable on IPv4-only environments
|
||||||
|
systemProperty 'java.net.preferIPv6Addresses', 'false'
|
||||||
systemProperty 'io.netty.tryReflectionSetAccessible', 'false'
|
systemProperty 'io.netty.tryReflectionSetAccessible', 'false'
|
||||||
systemProperty 'io.netty.allocator.typ', 'pooled'
|
systemProperty 'io.netty.allocator.typ', 'pooled'
|
||||||
systemProperty 'io.netty.noUnsafe', 'true'
|
systemProperty 'io.netty.noUnsafe', 'true'
|
||||||
|
|
|
@ -25,6 +25,8 @@ import org.xbib.net.http.client.netty.NettyHttpClientConfig;
|
||||||
import org.xbib.net.http.client.netty.secure.HttpsResponse;
|
import org.xbib.net.http.client.netty.secure.HttpsResponse;
|
||||||
import org.xbib.net.http.client.netty.secure.NettyHttpsClientConfig;
|
import org.xbib.net.http.client.netty.secure.NettyHttpsClientConfig;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.fail;
|
||||||
|
|
||||||
class Https1Test {
|
class Https1Test {
|
||||||
|
|
||||||
|
@ -193,7 +195,6 @@ class Https1Test {
|
||||||
.join();
|
.join();
|
||||||
logger.info("got result = " + result);
|
logger.info("got result = " + result);
|
||||||
}
|
}
|
||||||
// TODO 15 sec timeout on closing event loop group, why?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -217,10 +218,11 @@ class Https1Test {
|
||||||
.addParameter("query", content.substring(0, 15))
|
.addParameter("query", content.substring(0, 15))
|
||||||
.build(), stringFunction);
|
.build(), stringFunction);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.log(Level.WARNING, e.getMessage(), e);
|
logger.log(Level.SEVERE, e.getMessage(), e);
|
||||||
return null;
|
return null; // never reached
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
assertNotNull(completableFuture);
|
||||||
String result = completableFuture.join();
|
String result = completableFuture.join();
|
||||||
logger.info("got result = " + result);
|
logger.info("got result = " + result);
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,8 +81,8 @@ public abstract class BaseInteraction implements Interaction {
|
||||||
/**
|
/**
|
||||||
* Method for executing the request and respond in a completable future.
|
* Method for executing the request and respond in a completable future.
|
||||||
*
|
*
|
||||||
* @param request request
|
* @param request request, must not be null
|
||||||
* @param supplier supplier
|
* @param supplier supplier, must not be null
|
||||||
* @param <T> supplier result
|
* @param <T> supplier result
|
||||||
* @return completable future
|
* @return completable future
|
||||||
*/
|
*/
|
||||||
|
@ -99,7 +99,7 @@ public abstract class BaseInteraction implements Interaction {
|
||||||
} else {
|
} else {
|
||||||
completableFuture.cancel(true);
|
completableFuture.cancel(true);
|
||||||
}
|
}
|
||||||
get();
|
get(request.getTimeoutMillis(), TimeUnit.MILLISECONDS);
|
||||||
cancel();
|
cancel();
|
||||||
});
|
});
|
||||||
request.setTimeoutListener(req -> completableFuture.completeExceptionally(new TimeoutException()));
|
request.setTimeoutListener(req -> completableFuture.completeExceptionally(new TimeoutException()));
|
||||||
|
@ -110,9 +110,8 @@ public abstract class BaseInteraction implements Interaction {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() throws IOException {
|
public void close() throws IOException {
|
||||||
logger.log(Level.FINE, "closing interaction " + this);
|
logger.log(Level.FINE, "closing interaction " + this + " within 15 seconds");
|
||||||
get();
|
get(15000L, TimeUnit.MILLISECONDS);
|
||||||
//cancel();
|
|
||||||
releaseChannel(channel, true);
|
releaseChannel(channel, true);
|
||||||
if (future != null) {
|
if (future != null) {
|
||||||
future.complete(null);
|
future.complete(null);
|
||||||
|
|
|
@ -26,14 +26,14 @@ public class J2HtmlServiceBuilder extends BaseHttpServiceBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public J2HtmlServiceBuilder setMethod(HttpMethod... httpMethod) {
|
public J2HtmlServiceBuilder addMethod(HttpMethod httpMethod) {
|
||||||
super.setMethod(httpMethod);
|
super.addMethod(httpMethod);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public J2HtmlServiceBuilder setHandler(HttpHandler... handler) {
|
public J2HtmlServiceBuilder addHandler(HttpHandler handler) {
|
||||||
super.setHandler(handler);
|
super.addHandler(handler);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,9 +60,9 @@ public class J2HtmlServiceBuilder extends BaseHttpServiceBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
public J2HtmlService build() {
|
public J2HtmlService build() {
|
||||||
if (handlers == null) {
|
if (this.handlers == null) {
|
||||||
HttpHandler httpHandler = new J2HtmlResourceHandler(prefix, suffix, "index.java");
|
HttpHandler httpHandler = new J2HtmlResourceHandler(prefix, suffix, "index.java");
|
||||||
setHandler(httpHandler);
|
addHandler(httpHandler);
|
||||||
}
|
}
|
||||||
return new J2HtmlService(this);
|
return new J2HtmlService(this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package org.xbib.net.http.server.application.config;
|
package org.xbib.net.http.server.application.config;
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
import org.xbib.config.ConfigLoader;
|
import org.xbib.config.ConfigLoader;
|
||||||
import org.xbib.config.ConfigParams;
|
import org.xbib.config.ConfigParams;
|
||||||
import org.xbib.net.http.server.HttpRequest;
|
import org.xbib.net.http.server.HttpRequest;
|
||||||
|
@ -12,19 +11,17 @@ import org.xbib.settings.Settings;
|
||||||
|
|
||||||
public class ConfigApplicationModule extends BaseApplicationModule {
|
public class ConfigApplicationModule extends BaseApplicationModule {
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(ConfigApplicationModule.class.getName());
|
|
||||||
|
|
||||||
private final ConfigParams configParams;
|
private final ConfigParams configParams;
|
||||||
|
|
||||||
private final ConfigLoader configLoader;
|
private final ConfigLoader configLoader;
|
||||||
|
|
||||||
private final Settings settings;
|
private final Settings settings;
|
||||||
|
|
||||||
public ConfigApplicationModule(Application application, String name, Settings settings) {
|
public ConfigApplicationModule(Application application, String name) {
|
||||||
super(application, name, settings);
|
super(application, name);
|
||||||
String profile = System.getProperty("application.profile");
|
String profile = application.getProfile();
|
||||||
if (profile == null) {
|
if (profile == null) {
|
||||||
profile = "developer";
|
profile = "dev";
|
||||||
}
|
}
|
||||||
this.configParams = new ConfigParams()
|
this.configParams = new ConfigParams()
|
||||||
.withDirectoryName(name)
|
.withDirectoryName(name)
|
||||||
|
|
|
@ -3,5 +3,4 @@ dependencies {
|
||||||
api libs.datastructures.json.tiny
|
api libs.datastructures.json.tiny
|
||||||
api libs.jdbc.query
|
api libs.jdbc.query
|
||||||
api libs.jdbc.pool
|
api libs.jdbc.pool
|
||||||
implementation libs.settings.api
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@ module org.xbib.net.http.server.application.database {
|
||||||
requires org.xbib.net.http;
|
requires org.xbib.net.http;
|
||||||
requires org.xbib.net.http.server;
|
requires org.xbib.net.http.server;
|
||||||
requires org.xbib.datastructures.tiny;
|
requires org.xbib.datastructures.tiny;
|
||||||
requires org.xbib.settings.api;
|
|
||||||
requires org.xbib.jdbc.query;
|
requires org.xbib.jdbc.query;
|
||||||
requires org.xbib.jdbc.pool;
|
requires org.xbib.jdbc.pool;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,15 +13,14 @@ import org.xbib.net.http.server.application.BaseApplicationModule;
|
||||||
import org.xbib.net.http.server.HttpRequest;
|
import org.xbib.net.http.server.HttpRequest;
|
||||||
import org.xbib.net.http.server.route.HttpRouterContext;
|
import org.xbib.net.http.server.route.HttpRouterContext;
|
||||||
import org.xbib.net.http.server.service.HttpService;
|
import org.xbib.net.http.server.service.HttpService;
|
||||||
import org.xbib.settings.Settings;
|
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
public class DatabaseApplicationModule extends BaseApplicationModule {
|
public class DatabaseApplicationModule extends BaseApplicationModule {
|
||||||
|
|
||||||
public DatabaseApplicationModule(Application application, String name, Settings settings) {
|
public DatabaseApplicationModule(Application application, String name) {
|
||||||
super(application, name, settings);
|
super(application, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
dependencies {
|
dependencies {
|
||||||
api project(':net-http-server')
|
api project(':net-http-server')
|
||||||
implementation libs.settings.api
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,5 @@ module org.xbib.net.http.server.application.journal {
|
||||||
requires org.xbib.net;
|
requires org.xbib.net;
|
||||||
requires org.xbib.net.http;
|
requires org.xbib.net.http;
|
||||||
requires org.xbib.net.http.server;
|
requires org.xbib.net.http.server;
|
||||||
requires org.xbib.settings.api;
|
|
||||||
requires java.logging;
|
requires java.logging;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,10 +6,10 @@ import org.xbib.net.http.server.application.Application;
|
||||||
import org.xbib.net.http.server.application.BaseApplicationModule;
|
import org.xbib.net.http.server.application.BaseApplicationModule;
|
||||||
import org.xbib.net.http.server.route.HttpRouterContext;
|
import org.xbib.net.http.server.route.HttpRouterContext;
|
||||||
import org.xbib.net.http.server.service.HttpService;
|
import org.xbib.net.http.server.service.HttpService;
|
||||||
import org.xbib.settings.Settings;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
@ -19,9 +19,10 @@ public class JournalApplicationModule extends BaseApplicationModule {
|
||||||
|
|
||||||
private final Journal journal;
|
private final Journal journal;
|
||||||
|
|
||||||
public JournalApplicationModule(Application application, String name, Settings settings) throws IOException {
|
public JournalApplicationModule(Application application, String name) throws IOException {
|
||||||
super(application, name, settings);
|
super(application, name);
|
||||||
this.journal = new Journal(settings.get("application.journal", "/var/tmp/application/journal"));
|
String journalPath = Objects.requireNonNull(application.getAttributes().get(String.class, "application.journal", "/var/tmp/application/journal"));
|
||||||
|
this.journal = new Journal(journalPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -122,7 +122,7 @@ public final class Bootstrap {
|
||||||
|
|
||||||
HttpService httpService = BaseHttpService.builder()
|
HttpService httpService = BaseHttpService.builder()
|
||||||
.setPath("/secure")
|
.setPath("/secure")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
@ -149,7 +149,7 @@ public final class Bootstrap {
|
||||||
.setHttpAddress(httpsAddress)
|
.setHttpAddress(httpsAddress)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/favicon.ico")
|
.setPath("/favicon.ico")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, "image/x-icon")
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, "image/x-icon")
|
||||||
.body(NettyDataBufferFactory.getInstance().wrap(fromHex(hexFavIcon)))
|
.body(NettyDataBufferFactory.getInstance().wrap(fromHex(hexFavIcon)))
|
||||||
|
@ -158,14 +158,14 @@ public final class Bootstrap {
|
||||||
.build())
|
.build())
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/webjars/**")
|
.setPath("/webjars/**")
|
||||||
.setHandler(new ClassLoaderResourceHandler(Bootstrap.class.getClassLoader(), "META-INF/resources/", 24 + 2600))
|
.addHandler(new ClassLoaderResourceHandler(Bootstrap.class.getClassLoader(), "META-INF/resources/", 24 + 2600))
|
||||||
.build())
|
.build())
|
||||||
.addService(httpService)
|
.addService(httpService)
|
||||||
.addService(GroovyTemplateService.builder()
|
.addService(GroovyTemplateService.builder()
|
||||||
.setTemplateName("index.gtpl")
|
.setTemplateName("index.gtpl")
|
||||||
.setSecurityDomain(securityDomain)
|
.setSecurityDomain(securityDomain)
|
||||||
.setPath("glob:**")
|
.setPath("glob:**")
|
||||||
.setHandler(new GroovyTemplateResourceHandler())
|
.addHandler(new GroovyTemplateResourceHandler())
|
||||||
.build())
|
.build())
|
||||||
.build())
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
|
@ -139,7 +139,7 @@ public final class Bootstrap {
|
||||||
.setHttpAddress(httpsAddress)
|
.setHttpAddress(httpsAddress)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/favicon.ico")
|
.setPath("/favicon.ico")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, "image/x-icon")
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, "image/x-icon")
|
||||||
.body(NettyDataBufferFactory.getInstance().wrap(fromHex(hexFavIcon)))
|
.body(NettyDataBufferFactory.getInstance().wrap(fromHex(hexFavIcon)))
|
||||||
|
@ -148,11 +148,11 @@ public final class Bootstrap {
|
||||||
.build())
|
.build())
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/webjars/**")
|
.setPath("/webjars/**")
|
||||||
.setHandler(new ClassLoaderResourceHandler(Bootstrap.class.getClassLoader(), "META-INF/resources/", 24 * 3600))
|
.addHandler(new ClassLoaderResourceHandler(Bootstrap.class.getClassLoader(), "META-INF/resources/", 24 * 3600))
|
||||||
.build())
|
.build())
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/insecure")
|
.setPath("/insecure")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
@ -170,7 +170,7 @@ public final class Bootstrap {
|
||||||
.addService(J2HtmlService.builder()
|
.addService(J2HtmlService.builder()
|
||||||
.setPath("glob:**")
|
.setPath("glob:**")
|
||||||
.setSecurityDomain(securityDomain)
|
.setSecurityDomain(securityDomain)
|
||||||
.setHandler(new MyResourceHandler())
|
.addHandler(new MyResourceHandler())
|
||||||
.build())
|
.build())
|
||||||
.build())
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
|
@ -3,7 +3,7 @@ dependencies {
|
||||||
api libs.net.security
|
api libs.net.security
|
||||||
testImplementation project(':net-http-client-netty-secure')
|
testImplementation project(':net-http-client-netty-secure')
|
||||||
testImplementation project(':net-http-netty-boringssl')
|
testImplementation project(':net-http-netty-boringssl')
|
||||||
testImplementation libs.settings.datastructures.json
|
testImplementation testLibs.settings.datastructures.json
|
||||||
testImplementation libs.net.bouncycastle
|
testImplementation libs.net.bouncycastle
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,12 +58,12 @@ public class NettyHttps2ServerMultiRequestLoadTest {
|
||||||
.setHttpAddress(httpsAddress)
|
.setHttpAddress(httpsAddress)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/favicon.ico")
|
.setPath("/favicon.ico")
|
||||||
.setHandler(ctx ->
|
.addHandler(ctx ->
|
||||||
ctx.status(HttpResponseStatus.NOT_FOUND))
|
ctx.status(HttpResponseStatus.NOT_FOUND))
|
||||||
.build())
|
.build())
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/secure")
|
.setPath("/secure")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
|
|
@ -59,11 +59,11 @@ public class NettyHttps2ServerTest {
|
||||||
.setHttpAddress(httpsAddress)
|
.setHttpAddress(httpsAddress)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/favicon.ico")
|
.setPath("/favicon.ico")
|
||||||
.setHandler(ctx -> ctx.status(HttpResponseStatus.NOT_FOUND))
|
.addHandler(ctx -> ctx.status(HttpResponseStatus.NOT_FOUND))
|
||||||
.build())
|
.build())
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/secure")
|
.setPath("/secure")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
|
|
@ -60,11 +60,11 @@ public class NettyHttpsServerMultiRequestLoadTest {
|
||||||
.setHttpAddress(httpsAddress)
|
.setHttpAddress(httpsAddress)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/favicon.ico")
|
.setPath("/favicon.ico")
|
||||||
.setHandler(ctx -> ctx.status(HttpResponseStatus.NOT_FOUND))
|
.addHandler(ctx -> ctx.status(HttpResponseStatus.NOT_FOUND))
|
||||||
.build())
|
.build())
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/secure")
|
.setPath("/secure")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
logger.log(Level.INFO, "executing /secure");
|
logger.log(Level.INFO, "executing /secure");
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
|
@ -148,11 +148,11 @@ public class NettyHttpsServerMultiRequestLoadTest {
|
||||||
.setHttpAddress(httpsAddress)
|
.setHttpAddress(httpsAddress)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/favicon.ico")
|
.setPath("/favicon.ico")
|
||||||
.setHandler(ctx -> ctx.status(HttpResponseStatus.NOT_FOUND))
|
.addHandler(ctx -> ctx.status(HttpResponseStatus.NOT_FOUND))
|
||||||
.build())
|
.build())
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/secure")
|
.setPath("/secure")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
|
|
@ -64,12 +64,12 @@ public class NettyHttpsServerTest {
|
||||||
.setHttpAddress(httpsAddress)
|
.setHttpAddress(httpsAddress)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/favicon.ico")
|
.setPath("/favicon.ico")
|
||||||
.setHandler(ctx ->
|
.addHandler(ctx ->
|
||||||
ctx.status(HttpResponseStatus.NOT_FOUND))
|
ctx.status(HttpResponseStatus.NOT_FOUND))
|
||||||
.build())
|
.build())
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/secure")
|
.setPath("/secure")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx ->
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
@ -80,8 +80,8 @@ public class NettyHttpsServerTest {
|
||||||
" parameter = " + ctx.getRequest().getParameter().toString() +
|
" parameter = " + ctx.getRequest().getParameter().toString() +
|
||||||
" attributes = " + ctx.getAttributes() +
|
" attributes = " + ctx.getAttributes() +
|
||||||
" local address = " + ctx.getRequest().getLocalAddress() +
|
" local address = " + ctx.getRequest().getLocalAddress() +
|
||||||
" remote address = " + ctx.getRequest().getRemoteAddress());
|
" remote address = " + ctx.getRequest().getRemoteAddress())
|
||||||
})
|
)
|
||||||
.build())
|
.build())
|
||||||
.build())
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
@ -143,11 +143,11 @@ public class NettyHttpsServerTest {
|
||||||
.setHttpAddress(httpsAddress)
|
.setHttpAddress(httpsAddress)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/favicon.ico")
|
.setPath("/favicon.ico")
|
||||||
.setHandler(ctx -> ctx.status(HttpResponseStatus.NOT_FOUND))
|
.addHandler(ctx -> ctx.status(HttpResponseStatus.NOT_FOUND))
|
||||||
.build())
|
.build())
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/secure")
|
.setPath("/secure")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx ->
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
@ -158,8 +158,8 @@ public class NettyHttpsServerTest {
|
||||||
" parameter = " + ctx.getRequest().getParameter().toString() +
|
" parameter = " + ctx.getRequest().getParameter().toString() +
|
||||||
" attributes = " + ctx.getAttributes() +
|
" attributes = " + ctx.getAttributes() +
|
||||||
" local address = " + ctx.getRequest().getLocalAddress() +
|
" local address = " + ctx.getRequest().getLocalAddress() +
|
||||||
" remote address = " + ctx.getRequest().getRemoteAddress());
|
" remote address = " + ctx.getRequest().getRemoteAddress())
|
||||||
})
|
)
|
||||||
.build())
|
.build())
|
||||||
.build())
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
@ -220,11 +220,11 @@ public class NettyHttpsServerTest {
|
||||||
.setHttpAddress(httpsAddress)
|
.setHttpAddress(httpsAddress)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/favicon.ico")
|
.setPath("/favicon.ico")
|
||||||
.setHandler(ctx -> ctx.status(HttpResponseStatus.NOT_FOUND))
|
.addHandler(ctx -> ctx.status(HttpResponseStatus.NOT_FOUND))
|
||||||
.build())
|
.build())
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/secure")
|
.setPath("/secure")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx ->
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
@ -234,8 +234,8 @@ public class NettyHttpsServerTest {
|
||||||
" base URL = " + ctx.getRequest().getBaseURL() + " " +
|
" base URL = " + ctx.getRequest().getBaseURL() + " " +
|
||||||
ctx.getRequest().getParameter() + " " +
|
ctx.getRequest().getParameter() + " " +
|
||||||
ctx.getRequest().getLocalAddress() + " " +
|
ctx.getRequest().getLocalAddress() + " " +
|
||||||
ctx.getRequest().getRemoteAddress());
|
ctx.getRequest().getRemoteAddress())
|
||||||
})
|
)
|
||||||
.build())
|
.build())
|
||||||
.build())
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
|
@ -3,7 +3,7 @@ dependencies {
|
||||||
api libs.netty.codec.http2
|
api libs.netty.codec.http2
|
||||||
testImplementation project(':net-http-client-netty')
|
testImplementation project(':net-http-client-netty')
|
||||||
testImplementation project(':net-http-template-groovy')
|
testImplementation project(':net-http-template-groovy')
|
||||||
testImplementation libs.settings.datastructures.json
|
testImplementation testLibs.settings.datastructures.json
|
||||||
testImplementation libs.datastructures.json.tiny
|
testImplementation libs.datastructures.json.tiny
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class NettyHttp2ServerMultiRequestLoadTest {
|
||||||
.setHttpAddress(httpAddress)
|
.setHttpAddress(httpAddress)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/domain")
|
.setPath("/domain")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
|
|
@ -50,7 +50,7 @@ public class NettyHttp2ServerTest {
|
||||||
.setHttpAddress(httpAddress1)
|
.setHttpAddress(httpAddress1)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/domain")
|
.setPath("/domain")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
|
|
@ -48,7 +48,7 @@ public class NettyHttpServerBodyTest {
|
||||||
.setHttpAddress(httpAddress1)
|
.setHttpAddress(httpAddress1)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/domain")
|
.setPath("/domain")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
String body = ctx.getRequestBuilder().getBodyAsChars(StandardCharsets.UTF_8).toString();
|
String body = ctx.getRequestBuilder().getBodyAsChars(StandardCharsets.UTF_8).toString();
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
|
|
|
@ -52,8 +52,8 @@ class NettyHttpServerByteOrderMarkTest {
|
||||||
.setHttpAddress(httpAddress1)
|
.setHttpAddress(httpAddress1)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/")
|
.setPath("/")
|
||||||
.setMethod(HttpMethod.POST)
|
.addMethod(HttpMethod.POST)
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
logger.log(Level.FINEST, "handler starting");
|
logger.log(Level.FINEST, "handler starting");
|
||||||
String content = ctx.getRequestBuilder().getBodyAsChars(StandardCharsets.UTF_8).toString();
|
String content = ctx.getRequestBuilder().getBodyAsChars(StandardCharsets.UTF_8).toString();
|
||||||
logger.log(Level.FINEST, "got content = " + content);
|
logger.log(Level.FINEST, "got content = " + content);
|
||||||
|
|
|
@ -54,7 +54,7 @@ public class NettyHttpServerFailureTest {
|
||||||
.setHttpAddress(httpAddress1)
|
.setHttpAddress(httpAddress1)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/domain")
|
.setPath("/domain")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
|
|
@ -59,8 +59,8 @@ public class NettyHttpServerFileUploadTest {
|
||||||
.setHttpAddress(httpAddress1)
|
.setHttpAddress(httpAddress1)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/")
|
.setPath("/")
|
||||||
.setMethod(HttpMethod.POST)
|
.addMethod(HttpMethod.POST)
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
HttpResponseStatus httpResponseStatus = HttpResponseStatus.NOT_FOUND;
|
HttpResponseStatus httpResponseStatus = HttpResponseStatus.NOT_FOUND;
|
||||||
List<org.xbib.net.http.server.Message> messages = ctx.getRequest().getMessages();
|
List<org.xbib.net.http.server.Message> messages = ctx.getRequest().getMessages();
|
||||||
logger.log(Level.INFO, "messages = " + messages.size());
|
logger.log(Level.INFO, "messages = " + messages.size());
|
||||||
|
@ -155,8 +155,8 @@ public class NettyHttpServerFileUploadTest {
|
||||||
.setHttpAddress(httpAddress1)
|
.setHttpAddress(httpAddress1)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/")
|
.setPath("/")
|
||||||
.setMethod(HttpMethod.POST)
|
.addMethod(HttpMethod.POST)
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
HttpResponseStatus httpResponseStatus = HttpResponseStatus.NOT_FOUND;
|
HttpResponseStatus httpResponseStatus = HttpResponseStatus.NOT_FOUND;
|
||||||
List<org.xbib.net.http.server.Message> messages = ctx.getRequest().getMessages();
|
List<org.xbib.net.http.server.Message> messages = ctx.getRequest().getMessages();
|
||||||
logger.log(Level.INFO, "messages = " + messages.size());
|
logger.log(Level.INFO, "messages = " + messages.size());
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class NettyHttpServerMultiRequestLoadTest {
|
||||||
.setHttpAddress(httpAddress)
|
.setHttpAddress(httpAddress)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/domain")
|
.setPath("/domain")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
|
|
@ -53,8 +53,8 @@ public class NettyHttpServerRequestTest {
|
||||||
.setHttpAddress(httpAddress1)
|
.setHttpAddress(httpAddress1)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath(url.getPath())
|
.setPath(url.getPath())
|
||||||
.setMethod(HttpMethod.GET)
|
.addMethod(HttpMethod.GET)
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
try {
|
try {
|
||||||
String value = ctx.getRequest().getParameter().getAsString("value", Parameter.Domain.QUERY);
|
String value = ctx.getRequest().getParameter().getAsString("value", Parameter.Domain.QUERY);
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
|
|
|
@ -53,7 +53,7 @@ public class NettyHttpServerTest {
|
||||||
.setHttpAddress(httpAddress1)
|
.setHttpAddress(httpAddress1)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/domain")
|
.setPath("/domain")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
|
|
@ -36,7 +36,7 @@ public class NioHttpServerTest {
|
||||||
.setHttpAddress(httpAddress1)
|
.setHttpAddress(httpAddress1)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/domain1")
|
.setPath("/domain1")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
@ -51,7 +51,7 @@ public class NioHttpServerTest {
|
||||||
.setHttpAddress(httpAddress2)
|
.setHttpAddress(httpAddress2)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/domain2")
|
.setPath("/domain2")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
@ -67,7 +67,7 @@ public class NioHttpServerTest {
|
||||||
Executor executor = BaseExecutor.builder()
|
Executor executor = BaseExecutor.builder()
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
try(NioHttpServer server = NioHttpServer.builder()
|
try (NioHttpServer server = NioHttpServer.builder()
|
||||||
.setHttpServerConfig(new HttpServerConfig()
|
.setHttpServerConfig(new HttpServerConfig()
|
||||||
.setServerName("NioHttpServer", NioHttpServer.class.getPackage().getImplementationVendor())
|
.setServerName("NioHttpServer", NioHttpServer.class.getPackage().getImplementationVendor())
|
||||||
.setNetworkClass(NetworkClass.SITE))
|
.setNetworkClass(NetworkClass.SITE))
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
dependencies {
|
dependencies {
|
||||||
api project(':net-http-server-simple')
|
api project(':net-http-server-simple')
|
||||||
api libs.net.security
|
api libs.net.security
|
||||||
testImplementation libs.settings.datastructures.json
|
testImplementation testLibs.settings.datastructures.json
|
||||||
testImplementation libs.net.bouncycastle
|
testImplementation libs.net.bouncycastle
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,11 +48,11 @@ public class SimpleHttpsServerTest {
|
||||||
.setHttpAddress(httpsAddress)
|
.setHttpAddress(httpsAddress)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/favicon.ico")
|
.setPath("/favicon.ico")
|
||||||
.setHandler(ctx -> ctx.status(HttpResponseStatus.NOT_FOUND))
|
.addHandler(ctx -> ctx.status(HttpResponseStatus.NOT_FOUND))
|
||||||
.build())
|
.build())
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/secure")
|
.setPath("/secure")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
dependencies {
|
dependencies {
|
||||||
api project(':net-http-server')
|
api project(':net-http-server')
|
||||||
testImplementation libs.settings.datastructures.json
|
testImplementation testLibs.settings.datastructures.json
|
||||||
}
|
}
|
||||||
|
|
||||||
test {
|
test {
|
||||||
|
|
|
@ -39,9 +39,9 @@ public class HttpRouterTest {
|
||||||
.addDomain(BaseHttpDomain.builder()
|
.addDomain(BaseHttpDomain.builder()
|
||||||
.setHttpAddress(httpAddress)
|
.setHttpAddress(httpAddress)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setMethod(HttpMethod.DELETE)
|
.addMethod(HttpMethod.DELETE)
|
||||||
.setPath("/demo")
|
.setPath("/demo")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
Logger.getAnonymousLogger().log(Level.INFO, "got request: " + ctx.getRequestBuilder().getRequestURI());
|
Logger.getAnonymousLogger().log(Level.INFO, "got request: " + ctx.getRequestBuilder().getRequestURI());
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
|
|
|
@ -36,7 +36,7 @@ public class SimpleHttpServerTest {
|
||||||
.setHttpAddress(httpAddress1)
|
.setHttpAddress(httpAddress1)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/domain1")
|
.setPath("/domain1")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
@ -48,14 +48,14 @@ public class SimpleHttpServerTest {
|
||||||
.build())
|
.build())
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/file1/*")
|
.setPath("/file1/*")
|
||||||
.setHandler(new FileResourceHandler())
|
.addHandler(new FileResourceHandler())
|
||||||
.build())
|
.build())
|
||||||
.build())
|
.build())
|
||||||
.addDomain(BaseHttpDomain.builder()
|
.addDomain(BaseHttpDomain.builder()
|
||||||
.setHttpAddress(httpAddress2)
|
.setHttpAddress(httpAddress2)
|
||||||
.addService(BaseHttpService.builder()
|
.addService(BaseHttpService.builder()
|
||||||
.setPath("/domain2")
|
.setPath("/domain2")
|
||||||
.setHandler(ctx -> {
|
.addHandler(ctx -> {
|
||||||
ctx.status(HttpResponseStatus.OK)
|
ctx.status(HttpResponseStatus.OK)
|
||||||
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
.setHeader(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN)
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
|
|
|
@ -3,6 +3,7 @@ dependencies {
|
||||||
implementation libs.datastructures.tiny
|
implementation libs.datastructures.tiny
|
||||||
implementation libs.datastructures.json.tiny
|
implementation libs.datastructures.json.tiny
|
||||||
implementation libs.settings.api
|
implementation libs.settings.api
|
||||||
|
testImplementation testLibs.settings.datastructures
|
||||||
}
|
}
|
||||||
|
|
||||||
def moduleName = 'org.xbib.net.http.server.test'
|
def moduleName = 'org.xbib.net.http.server.test'
|
||||||
|
|
|
@ -3,6 +3,7 @@ module org.xbib.net.http.server {
|
||||||
requires java.logging;
|
requires java.logging;
|
||||||
requires java.naming;
|
requires java.naming;
|
||||||
requires java.sql;
|
requires java.sql;
|
||||||
|
requires org.xbib.datastructures.api;
|
||||||
requires org.xbib.datastructures.common;
|
requires org.xbib.datastructures.common;
|
||||||
requires org.xbib.datastructures.tiny;
|
requires org.xbib.datastructures.tiny;
|
||||||
requires org.xbib.datastructures.json.tiny;
|
requires org.xbib.datastructures.json.tiny;
|
||||||
|
|
|
@ -11,9 +11,9 @@ public interface HttpServiceBuilder {
|
||||||
|
|
||||||
HttpServiceBuilder setPath(String path);
|
HttpServiceBuilder setPath(String path);
|
||||||
|
|
||||||
HttpServiceBuilder setMethod(HttpMethod... method);
|
HttpServiceBuilder addMethod(HttpMethod method);
|
||||||
|
|
||||||
HttpServiceBuilder setHandler(HttpHandler... handler);
|
HttpServiceBuilder addHandler(HttpHandler handler);
|
||||||
|
|
||||||
HttpServiceBuilder setParameterDefinition(ParameterDefinition... parameterDefinition);
|
HttpServiceBuilder setParameterDefinition(ParameterDefinition... parameterDefinition);
|
||||||
|
|
||||||
|
|
|
@ -57,8 +57,8 @@ public class BaseApplication implements Application {
|
||||||
|
|
||||||
protected BaseApplication(BaseApplicationBuilder builder) {
|
protected BaseApplication(BaseApplicationBuilder builder) {
|
||||||
this.builder = builder;
|
this.builder = builder;
|
||||||
this.attributes = newAttributes();
|
|
||||||
this.applicationModuleList = new ArrayList<>();
|
this.applicationModuleList = new ArrayList<>();
|
||||||
|
this.attributes = newAttributes();
|
||||||
this.httpResponseRenderer = newResponseRenderer();
|
this.httpResponseRenderer = newResponseRenderer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@ public class BaseApplication implements Application {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSessionName() {
|
public String getSessionName() {
|
||||||
return "SESS_" + getProfile().toLowerCase(Locale.ROOT);
|
return "SESS_" + getProfile().toUpperCase(Locale.ROOT);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSecret() {
|
public String getSecret() {
|
||||||
|
|
|
@ -4,7 +4,6 @@ import org.xbib.net.http.server.HttpRequest;
|
||||||
import org.xbib.net.http.server.route.HttpRouterContext;
|
import org.xbib.net.http.server.route.HttpRouterContext;
|
||||||
import org.xbib.net.http.server.service.HttpService;
|
import org.xbib.net.http.server.service.HttpService;
|
||||||
import org.xbib.net.http.server.session.Session;
|
import org.xbib.net.http.server.session.Session;
|
||||||
import org.xbib.settings.Settings;
|
|
||||||
|
|
||||||
public abstract class BaseApplicationModule implements ApplicationModule {
|
public abstract class BaseApplicationModule implements ApplicationModule {
|
||||||
|
|
||||||
|
@ -12,17 +11,14 @@ public abstract class BaseApplicationModule implements ApplicationModule {
|
||||||
|
|
||||||
protected final String name;
|
protected final String name;
|
||||||
|
|
||||||
protected final Settings settings;
|
public BaseApplicationModule(Application application, String name) {
|
||||||
|
|
||||||
public BaseApplicationModule(Application application, String name, Settings settings) {
|
|
||||||
this.application = application;
|
this.application = application;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.settings = settings;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name != null ? name : settings.get("name", "undefined");
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
package org.xbib.net.http.server.handler;
|
||||||
|
|
||||||
|
import org.xbib.net.http.HttpResponseStatus;
|
||||||
|
import org.xbib.net.http.server.HttpErrorHandler;
|
||||||
|
import org.xbib.net.http.server.route.HttpRouterContext;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import static org.xbib.net.http.HttpHeaderNames.CONTENT_TYPE;
|
||||||
|
|
||||||
|
public class OkHandler implements HttpErrorHandler {
|
||||||
|
|
||||||
|
public OkHandler() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(HttpRouterContext context) throws IOException {
|
||||||
|
context.status(HttpResponseStatus.OK)
|
||||||
|
.setHeader(CONTENT_TYPE, "text/plain; charset=utf-8")
|
||||||
|
.body("Hello world")
|
||||||
|
.done();
|
||||||
|
}
|
||||||
|
}
|
|
@ -48,7 +48,7 @@ public class BaseHttpRouter implements HttpRouter {
|
||||||
|
|
||||||
private static final String PATH_SEPARATOR = "/";
|
private static final String PATH_SEPARATOR = "/";
|
||||||
|
|
||||||
private final Logger logger = Logger.getLogger(BaseHttpRouter.class.getName());
|
private static final Logger logger = Logger.getLogger(BaseHttpRouter.class.getName());
|
||||||
|
|
||||||
private final BaseHttpRouterBuilder builder;
|
private final BaseHttpRouterBuilder builder;
|
||||||
|
|
||||||
|
|
|
@ -88,31 +88,6 @@ public class BaseHttpRouterBuilder implements HttpRouterBuilder {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public HttpRouterBuilder fromSettings(Settings settings) {
|
|
||||||
fromSettings(settings, null);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public HttpRouterBuilder fromSettings(Settings settings,
|
|
||||||
Map<String, HttpSecurityDomain> securityDomainMap) {
|
|
||||||
// global prefix
|
|
||||||
if (settings.containsSetting("prefix")) {
|
|
||||||
setPrefix(settings.get("prefix"));
|
|
||||||
}
|
|
||||||
// global handlers
|
|
||||||
for (Map.Entry<String, Settings> entry : settings.getGroups("handler").entrySet()) {
|
|
||||||
String codeString = entry.getKey();
|
|
||||||
Settings handlerSettings = entry.getValue();
|
|
||||||
setHandler(Integer.parseInt(codeString), createHttpHandler(handlerSettings));
|
|
||||||
}
|
|
||||||
// handler domains
|
|
||||||
for (Map.Entry<String, Settings> entry : settings.getGroups("domain").entrySet()) {
|
|
||||||
addDomain(createHttpDomain(entry.getValue(), securityDomainMap));
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BaseHttpRouter build() {
|
public BaseHttpRouter build() {
|
||||||
if (domains.isEmpty()) {
|
if (domains.isEmpty()) {
|
||||||
|
@ -138,6 +113,31 @@ public class BaseHttpRouterBuilder implements HttpRouterBuilder {
|
||||||
return new BaseHttpRouter(this);
|
return new BaseHttpRouter(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public HttpRouterBuilder fromSettings(Settings settings) {
|
||||||
|
fromSettings(settings, null);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HttpRouterBuilder fromSettings(Settings settings,
|
||||||
|
Map<String, HttpSecurityDomain> securityDomainMap) {
|
||||||
|
// global prefix
|
||||||
|
if (settings.containsSetting("prefix")) {
|
||||||
|
setPrefix(settings.get("prefix"));
|
||||||
|
}
|
||||||
|
// global handlers
|
||||||
|
for (Map.Entry<String, Settings> entry : settings.getGroups("handler").entrySet()) {
|
||||||
|
String codeString = entry.getKey();
|
||||||
|
Settings handlerSettings = entry.getValue();
|
||||||
|
setHandler(Integer.parseInt(codeString), createHttpHandler(handlerSettings));
|
||||||
|
}
|
||||||
|
// handler domains
|
||||||
|
for (Map.Entry<String, Settings> entry : settings.getGroups("domain").entrySet()) {
|
||||||
|
addDomain(createHttpDomain(entry.getValue(), securityDomainMap));
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
private HttpDomain createHttpDomain(Settings settings,
|
private HttpDomain createHttpDomain(Settings settings,
|
||||||
Map<String, HttpSecurityDomain> securityDomainMap) {
|
Map<String, HttpSecurityDomain> securityDomainMap) {
|
||||||
if (settings.getAsBoolean("enabled", true)) {
|
if (settings.getAsBoolean("enabled", true)) {
|
||||||
|
@ -156,7 +156,7 @@ public class BaseHttpRouterBuilder implements HttpRouterBuilder {
|
||||||
throw new IllegalArgumentException("class not found or not loadable: " + e.getMessage());
|
throw new IllegalArgumentException("class not found or not loadable: " + e.getMessage());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
logger.log(Level.WARNING, "disabled: " + settings.getAsMap());
|
logger.log(Level.WARNING, "disabled domain: " + settings.getAsMap());
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -174,7 +174,7 @@ public class BaseHttpRouterBuilder implements HttpRouterBuilder {
|
||||||
boolean isSecure = settings.getAsBoolean("secure", false);
|
boolean isSecure = settings.getAsBoolean("secure", false);
|
||||||
httpAddressBuilder.setSecure(isSecure);
|
httpAddressBuilder.setSecure(isSecure);
|
||||||
httpAddressBuilder.setPort(settings.getAsInt("port", isSecure ? 443 : 80));
|
httpAddressBuilder.setPort(settings.getAsInt("port", isSecure ? 443 : 80));
|
||||||
httpAddressBuilder.setVersion(HttpVersion.valueOf(settings.get("version", "HTTP_1_1")));
|
httpAddressBuilder.setVersion(HttpVersion.valueOf(settings.get("version", "HTTP/1.1")));
|
||||||
}
|
}
|
||||||
return httpAddressBuilder.build();
|
return httpAddressBuilder.build();
|
||||||
}
|
}
|
||||||
|
@ -191,8 +191,13 @@ public class BaseHttpRouterBuilder implements HttpRouterBuilder {
|
||||||
}
|
}
|
||||||
httpServiceBuilder.setPrefix(prefix);
|
httpServiceBuilder.setPrefix(prefix);
|
||||||
httpServiceBuilder.setPath(path);
|
httpServiceBuilder.setPath(path);
|
||||||
httpServiceBuilder.setMethod(HttpMethod.valueOf(settings.get("method", "GET")));
|
if (settings.containsSetting("method")) {
|
||||||
httpServiceBuilder.setHandler(createHttpHandler(settings));
|
String[] methods = settings.getAsArray("method");
|
||||||
|
|
||||||
|
} else {
|
||||||
|
httpServiceBuilder.addMethod(HttpMethod.GET);
|
||||||
|
}
|
||||||
|
httpServiceBuilder.addHandler(createHttpHandler(settings));
|
||||||
return httpServiceBuilder.build();
|
return httpServiceBuilder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package org.xbib.net.http.server.route;
|
package org.xbib.net.http.server.route;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
import org.xbib.net.http.HttpResponseStatus;
|
import org.xbib.net.http.HttpResponseStatus;
|
||||||
import org.xbib.net.http.server.HttpException;
|
import org.xbib.net.http.server.HttpException;
|
||||||
import org.xbib.net.http.server.HttpRequestBuilder;
|
import org.xbib.net.http.server.HttpRequestBuilder;
|
||||||
|
@ -21,5 +22,4 @@ public interface HttpRouter {
|
||||||
void routeToErrorHandler(HttpRouterContext httpRouterContext, Throwable t);
|
void routeToErrorHandler(HttpRouterContext httpRouterContext, Throwable t);
|
||||||
|
|
||||||
void routeException(HttpException e);
|
void routeException(HttpException e);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,10 +18,5 @@ public interface HttpRouterBuilder {
|
||||||
|
|
||||||
HttpRouterBuilder setRouteResolver(HttpRouteResolver<HttpService> httpRouteResolver);
|
HttpRouterBuilder setRouteResolver(HttpRouteResolver<HttpService> httpRouteResolver);
|
||||||
|
|
||||||
HttpRouterBuilder fromSettings(Settings settings);
|
|
||||||
|
|
||||||
HttpRouterBuilder fromSettings(Settings settings,
|
|
||||||
Map<String, HttpSecurityDomain> securityDomainMap);
|
|
||||||
|
|
||||||
HttpRouter build();
|
HttpRouter build();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
package org.xbib.net.http.server.service;
|
package org.xbib.net.http.server.service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Set;
|
|
||||||
import org.xbib.net.ParameterDefinition;
|
import org.xbib.net.ParameterDefinition;
|
||||||
import org.xbib.net.PathNormalizer;
|
import org.xbib.net.PathNormalizer;
|
||||||
import org.xbib.net.http.HttpMethod;
|
import org.xbib.net.http.HttpMethod;
|
||||||
|
@ -28,8 +27,8 @@ public class BaseHttpServiceBuilder implements HttpServiceBuilder {
|
||||||
protected BaseHttpServiceBuilder() {
|
protected BaseHttpServiceBuilder() {
|
||||||
this.prefix = "";
|
this.prefix = "";
|
||||||
this.pathSpec = "/**";
|
this.pathSpec = "/**";
|
||||||
this.methods = Set.of(HttpMethod.GET);
|
this.methods = new ArrayList<>();
|
||||||
this.handlers = null;
|
this.handlers = new ArrayList<>();
|
||||||
this.securityDomain = null;
|
this.securityDomain = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,22 +39,22 @@ public class BaseHttpServiceBuilder implements HttpServiceBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BaseHttpServiceBuilder setPath(String path) {
|
public BaseHttpServiceBuilder setPath(String pathSpec) {
|
||||||
if (path != null) {
|
if (pathSpec != null) {
|
||||||
this.pathSpec = PathNormalizer.normalize(path);
|
this.pathSpec = PathNormalizer.normalize(pathSpec);
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BaseHttpServiceBuilder setMethod(HttpMethod... methods) {
|
public BaseHttpServiceBuilder addMethod(HttpMethod method) {
|
||||||
this.methods = Set.of(methods);
|
this.methods.add(method);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BaseHttpServiceBuilder setHandler(HttpHandler... handler) {
|
public BaseHttpServiceBuilder addHandler(HttpHandler handler) {
|
||||||
this.handlers = Arrays.asList(handler);
|
this.handlers.add(handler);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,7 +71,9 @@ public class BaseHttpServiceBuilder implements HttpServiceBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
public BaseHttpService build() {
|
public BaseHttpService build() {
|
||||||
Objects.requireNonNull(handlers);
|
if (methods.isEmpty()) {
|
||||||
|
methods.add(HttpMethod.GET);
|
||||||
|
}
|
||||||
return new BaseHttpService(this);
|
return new BaseHttpService(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,15 @@
|
||||||
package org.xbib.net.http.server.test.base;
|
package org.xbib.net.http.server.test.base;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.xbib.net.http.server.domain.HttpDomain;
|
||||||
import org.xbib.net.http.server.route.BaseHttpRouter;
|
import org.xbib.net.http.server.route.BaseHttpRouter;
|
||||||
import org.xbib.net.http.server.route.HttpRouter;
|
import org.xbib.net.http.server.route.HttpRouter;
|
||||||
import org.xbib.settings.Settings;
|
import org.xbib.settings.Settings;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
public class RouterBuilderTest {
|
public class RouterBuilderTest {
|
||||||
|
|
||||||
public RouterBuilderTest() {
|
public RouterBuilderTest() {
|
||||||
|
@ -12,10 +17,17 @@ public class RouterBuilderTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void buildFromSettings() {
|
void buildFromSettings() {
|
||||||
// java.lang.NullPointerException: Cannot invoke "org.xbib.settings.SettingsBuilder.build()" because the return value of "org.xbib.settings.Settings$Holder.createBuilder()" is null
|
// the simplest possible setup in settings
|
||||||
Settings settings = Settings.emptySettings();
|
Settings settings = Settings.settingsBuilder()
|
||||||
|
.put("domain.domain1.name", "localhost")
|
||||||
|
.put("domain.domain1.service./demo1.method", "GET")
|
||||||
|
.put("domain.domain1.service./demo1.class", "org.xbib.net.http.server.handler.OkHandler")
|
||||||
|
.build();
|
||||||
HttpRouter httpRouter = BaseHttpRouter.builder()
|
HttpRouter httpRouter = BaseHttpRouter.builder()
|
||||||
.fromSettings(settings)
|
.fromSettings(settings)
|
||||||
.build();
|
.build();
|
||||||
|
Optional<HttpDomain> httpDomain = httpRouter.getDomains().stream().findFirst();
|
||||||
|
assertTrue(httpDomain.isPresent());
|
||||||
|
assertTrue(httpDomain.get().getNames().contains("localhost"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ import org.xbib.net.http.server.route.HttpRouterContext;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.UncheckedIOException;
|
import java.io.UncheckedIOException;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
@ -23,27 +24,28 @@ public class GroovyTemplateApplicationModule extends BaseApplicationModule {
|
||||||
|
|
||||||
private final GroovyTemplateRenderer groovyTemplateRenderer;
|
private final GroovyTemplateRenderer groovyTemplateRenderer;
|
||||||
|
|
||||||
public GroovyTemplateApplicationModule(Application application, String name, Settings settings) {
|
public GroovyTemplateApplicationModule(Application application, String name) {
|
||||||
super(application, name, settings);
|
super(application, name);
|
||||||
ClassLoader classLoader = GroovyMarkupTemplateHandler.class.getClassLoader();
|
ClassLoader classLoader = getClass().getClassLoader();
|
||||||
String defaultMarkupTemplate = settings.get("markup.templateClass",
|
Settings settings = Objects.requireNonNull(application.getAttributes().get(Settings.class, "settings"));
|
||||||
|
String defaultMarkupTemplate = settings.get("groovy.markup.templateClass",
|
||||||
"org.xbib.net.http.template.DefaultMarkupTemplate");
|
"org.xbib.net.http.template.DefaultMarkupTemplate");
|
||||||
try {
|
try {
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Class<? extends BaseTemplate> defaultMarkupTemplateClass =
|
Class<? extends BaseTemplate> defaultMarkupTemplateClass =
|
||||||
(Class<? extends BaseTemplate>) Class.forName(defaultMarkupTemplate, true, classLoader);
|
(Class<? extends BaseTemplate>) Class.forName(defaultMarkupTemplate, true, classLoader);
|
||||||
logger.log(Level.INFO, "markup template class = " + defaultMarkupTemplateClass.getName());
|
logger.log(Level.INFO, "groovy markup template class = " + defaultMarkupTemplateClass.getName());
|
||||||
this.groovyMarkupTemplateHandler = new GroovyMarkupTemplateHandler(application,
|
this.groovyMarkupTemplateHandler = new GroovyMarkupTemplateHandler(application,
|
||||||
classLoader, defaultMarkupTemplateClass, application.getLocale(),
|
classLoader, defaultMarkupTemplateClass, application.getLocale(),
|
||||||
settings.getAsBoolean("markup.autoEscape", true),
|
settings.getAsBoolean("groovy.markup.autoEscape", true),
|
||||||
settings.getAsBoolean("markup.autoIndent", false),
|
settings.getAsBoolean("groovy.markup.autoIndent", false),
|
||||||
settings.get("markup.autoIndentString", " "),
|
settings.get("groovy.markup.autoIndentString", " "),
|
||||||
settings.getAsBoolean("markup.autoNewline", false),
|
settings.getAsBoolean("groovy.markup.autoNewline", false),
|
||||||
settings.getAsBoolean("markup.cacheTemplates", true),
|
settings.getAsBoolean("groovy.markup.cacheTemplates", true),
|
||||||
settings.get("markup.declarationEncoding", null),
|
settings.get("groovy.markup.declarationEncoding", null),
|
||||||
settings.getAsBoolean("markup.expandEmptyElements", true),
|
settings.getAsBoolean("groovy.markup.expandEmptyElements", true),
|
||||||
settings.get("markup.newLine", System.getProperty("line.separator")),
|
settings.get("groovy.markup.newLine", System.getProperty("line.separator")),
|
||||||
settings.getAsBoolean("markup.useDoubleQuotes", true));
|
settings.getAsBoolean("groovy.markup.useDoubleQuotes", true));
|
||||||
this.groovyTemplateRenderer = new GroovyTemplateRenderer();
|
this.groovyTemplateRenderer = new GroovyTemplateRenderer();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new IllegalStateException(e);
|
throw new IllegalStateException(e);
|
||||||
|
|
|
@ -32,14 +32,14 @@ public class GroovyTemplateServiceBuilder extends BaseHttpServiceBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GroovyTemplateServiceBuilder setMethod(HttpMethod... httpMethod) {
|
public GroovyTemplateServiceBuilder addMethod(HttpMethod httpMethod) {
|
||||||
super.setMethod(httpMethod);
|
super.addMethod(httpMethod);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GroovyTemplateServiceBuilder setHandler(HttpHandler... handler) {
|
public GroovyTemplateServiceBuilder addHandler(HttpHandler handler) {
|
||||||
super.setHandler(handler);
|
super.addHandler(handler);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ public class GroovyTemplateServiceBuilder extends BaseHttpServiceBuilder {
|
||||||
public GroovyTemplateService build() {
|
public GroovyTemplateService build() {
|
||||||
if (this.handlers == null) {
|
if (this.handlers == null) {
|
||||||
HttpHandler httpHandler = new GroovyTemplateResourceHandler(prefix, suffix, indexFileName);
|
HttpHandler httpHandler = new GroovyTemplateResourceHandler(prefix, suffix, indexFileName);
|
||||||
setHandler(httpHandler);
|
addHandler(httpHandler);
|
||||||
}
|
}
|
||||||
return new GroovyTemplateService(this);
|
return new GroovyTemplateService(this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ dependencyResolutionManagement {
|
||||||
version('groovy', '4.0.26')
|
version('groovy', '4.0.26')
|
||||||
version('netty', '4.1.119.Final')
|
version('netty', '4.1.119.Final')
|
||||||
version('netty-tcnative', '2.0.70.Final')
|
version('netty-tcnative', '2.0.70.Final')
|
||||||
version('datastructures', '5.2.2')
|
version('datastructures', '5.2.3')
|
||||||
version('net', '4.8.0')
|
version('net', '4.8.0')
|
||||||
version('database', '2.3.2')
|
version('database', '2.3.2')
|
||||||
library('netty-codec-http2', 'io.netty', 'netty-codec-http2').versionRef('netty')
|
library('netty-codec-http2', 'io.netty', 'netty-codec-http2').versionRef('netty')
|
||||||
|
@ -27,19 +27,21 @@ dependencyResolutionManagement {
|
||||||
library('datastructures-json-tiny', 'org.xbib', 'datastructures-json-tiny').versionRef('datastructures')
|
library('datastructures-json-tiny', 'org.xbib', 'datastructures-json-tiny').versionRef('datastructures')
|
||||||
library('datastructures-yaml-tiny', 'org.xbib', 'datastructures-yaml-tiny').versionRef('datastructures')
|
library('datastructures-yaml-tiny', 'org.xbib', 'datastructures-yaml-tiny').versionRef('datastructures')
|
||||||
library('settings-api', 'org.xbib', 'settings-api').versionRef('datastructures')
|
library('settings-api', 'org.xbib', 'settings-api').versionRef('datastructures')
|
||||||
library('settings-datastructures-json', 'org.xbib', 'settings-datastructures-json').versionRef('datastructures')
|
|
||||||
library('settings-datastructures-yaml', 'org.xbib', 'settings-datastructures-yaml').versionRef('datastructures')
|
|
||||||
library('config', 'org.xbib', 'config').versionRef('datastructures')
|
library('config', 'org.xbib', 'config').versionRef('datastructures')
|
||||||
library('jdbc-query', 'org.xbib', 'jdbc-query').versionRef('database')
|
library('jdbc-query', 'org.xbib', 'jdbc-query').versionRef('database')
|
||||||
library('jdbc-pool', 'org.xbib', 'jdbc-pool').versionRef('database')
|
library('jdbc-pool', 'org.xbib', 'jdbc-pool').versionRef('database')
|
||||||
}
|
}
|
||||||
testLibs {
|
testLibs {
|
||||||
version('junit', '5.12.0')
|
version('junit', '5.12.0')
|
||||||
|
version('datastructures', '5.2.3')
|
||||||
library('junit-jupiter-api', 'org.junit.jupiter', 'junit-jupiter-api').versionRef('junit')
|
library('junit-jupiter-api', 'org.junit.jupiter', 'junit-jupiter-api').versionRef('junit')
|
||||||
library('junit-jupiter-params', 'org.junit.jupiter', 'junit-jupiter-params').versionRef('junit')
|
library('junit-jupiter-params', 'org.junit.jupiter', 'junit-jupiter-params').versionRef('junit')
|
||||||
library('junit-jupiter-engine', 'org.junit.jupiter', 'junit-jupiter-engine').versionRef('junit')
|
library('junit-jupiter-engine', 'org.junit.jupiter', 'junit-jupiter-engine').versionRef('junit')
|
||||||
library('junit-jupiter-platform-launcher', 'org.junit.platform', 'junit-platform-launcher').version('1.12.0')
|
library('junit-jupiter-platform-launcher', 'org.junit.platform', 'junit-platform-launcher').version('1.12.0')
|
||||||
library('hamcrest', 'org.hamcrest', 'hamcrest-library').version('3.0')
|
library('hamcrest', 'org.hamcrest', 'hamcrest-library').version('3.0')
|
||||||
|
library('settings-datastructures', 'org.xbib', 'settings-datastructures').versionRef('datastructures')
|
||||||
|
library('settings-datastructures-json', 'org.xbib', 'settings-datastructures-json').versionRef('datastructures')
|
||||||
|
library('settings-datastructures-yaml', 'org.xbib', 'settings-datastructures-yaml').versionRef('datastructures')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue