From d4a8beaf65b6a865569d1be5d901e2b26700c7cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Prante?= Date: Tue, 11 Mar 2025 15:43:43 +0100 Subject: [PATCH] working on http router creation from settings --- gradle.properties | 2 +- gradle/compile/java.gradle | 2 +- .../event/stream/test/EventStreamTest.java | 3 + .../http1/Https1ChannelInitializer.java | 6 +- .../http2/Https2ChannelInitializer.java | 2 + .../client/netty/secure/test/AkamaiTest.java | 3 + .../netty/secure/test/ThreadLeakTest.java | 5 + .../netty/http2/Http2ChannelInitializer.java | 2 + .../net/http/client/ExponentialBackOff.java | 2 +- .../net/http/j2html/BadRequestHandler.java | 3 + .../j2html/InternalServerErrorHandler.java | 3 + .../xbib/net/http/j2html/NotFoundHandler.java | 3 + .../net/http/j2html/UnauthorizedHandler.java | 3 + .../http/netty/conscrypt/test/Http1Test.java | 3 + .../application/web/WebApplication.java | 2 +- .../web/WebApplicationBuilder.java | 8 +- .../application/web/groovy/Bootstrap.java | 2 +- .../application/web/j2html/Bootstrap.java | 6 +- .../netty/secure/http2/Https2Handler.java | 2 +- ...NettyHttps2ServerMultiRequestLoadTest.java | 3 + .../secure/test/NettyHttps2ServerTest.java | 3 + .../NettyHttpsServerMultiRequestLoadTest.java | 3 + .../secure/test/NettyHttpsServerTest.java | 3 + .../http/server/netty/NettyHttpServer.java | 6 +- .../server/netty/test/HttpRequestTest.java | 3 + .../NettyHttp2ServerMultiRequestLoadTest.java | 3 + .../netty/test/NettyHttp2ServerTest.java | 3 + .../netty/test/NettyHttpServerBodyTest.java | 3 + .../test/NettyHttpServerFailureTest.java | 3 + .../test/NettyHttpServerFileUploadTest.java | 3 + .../NettyHttpServerMultiRequestLoadTest.java | 3 + .../test/NettyHttpServerRequestTest.java | 3 + .../netty/test/NettyHttpServerTest.java | 3 + .../net/http/server/nio/NioHttpServer.java | 6 +- .../http/server/nio/test/ByteArrayTest.java | 4 + .../nio/test/HttpRequestParserTest.java | 3 + .../server/nio/test/NioHttpServerTest.java | 3 + .../http/server/simple/SimpleHttpServer.java | 6 +- .../server/simple/test/HttpRouterTest.java | 3 + .../simple/test/SimpleHttpServerTest.java | 3 + .../http/server/BaseHttpResponseBuilder.java | 1 + .../org/xbib/net/http/server/HttpServer.java | 11 +- .../http/server/application/Application.java | 7 +- .../application/ApplicationBuilder.java | 4 + .../server/application/BaseApplication.java | 72 ++++----- .../application/BaseApplicationBuilder.java | 43 +++++- .../http/server/ldap/LdapContextFactory.java | 19 +-- .../server/resource/HtmlTemplateResource.java | 20 ++- .../resource/negotiate/LocaleNegotiator.java | 4 +- .../net/http/server/route/BaseHttpRoute.java | 7 +- .../server/route/BaseHttpRouterBuilder.java | 139 ++++++++++++++++-- .../http/server/route/HttpRouterBuilder.java | 9 ++ .../net/http/server/session/BaseSession.java | 4 +- .../src/test/java/module-info.java | 2 + .../test/base/BaseHttpRouteResolverTest.java | 3 + .../server/test/base/RouterBuilderTest.java | 21 +++ .../http/server/test/ldap/LdapRealmTest.java | 2 + .../net/http/server/test/ldap/LdapTest.java | 3 + .../server/test/session/JsonSessionTest.java | 3 + .../test/userprofile/JsonUserProfileTest.java | 3 + .../groovy/DefaultMarkupTemplate.java | 15 +- .../groovy/GroovyMarkupTemplateHandler.java | 2 +- .../java/org/xbib/net/http/HttpHeaders.java | 2 - .../xbib/net/http/cookie/DefaultCookie.java | 2 +- 64 files changed, 401 insertions(+), 132 deletions(-) create mode 100644 net-http-server/src/test/java/org/xbib/net/http/server/test/base/RouterBuilderTest.java diff --git a/gradle.properties b/gradle.properties index 0645920..f88abb9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ group = org.xbib name = net-http -version = 4.9.0 +version = 5.0.0 diff --git a/gradle/compile/java.gradle b/gradle/compile/java.gradle index 49943d2..b112661 100644 --- a/gradle/compile/java.gradle +++ b/gradle/compile/java.gradle @@ -21,7 +21,7 @@ tasks.withType(JavaCompile) { options.fork = true options.forkOptions.jvmArgs += ['-Duser.language=en','-Duser.country=US'] options.encoding = 'UTF-8' - options.compilerArgs.add('-Xlint:all') + options.compilerArgs.add('-Xlint:all,-exports') options.compilerArgs.add("--module-path") options.compilerArgs.add(classpath.asPath) classpath = files() diff --git a/net-http-client-event-stream/src/test/java/org/xbib/net/http/client/event/stream/test/EventStreamTest.java b/net-http-client-event-stream/src/test/java/org/xbib/net/http/client/event/stream/test/EventStreamTest.java index dd91140..6060aec 100644 --- a/net-http-client-event-stream/src/test/java/org/xbib/net/http/client/event/stream/test/EventStreamTest.java +++ b/net-http-client-event-stream/src/test/java/org/xbib/net/http/client/event/stream/test/EventStreamTest.java @@ -17,6 +17,9 @@ public class EventStreamTest { private static final Logger logger = Logger.getLogger(EventStreamTest.class.getName()); + public EventStreamTest() { + } + @Test void testSimpleJournalGateway() throws URISyntaxException, IOException, InterruptedException { var uri = new URI("http://localhost:19531/entries?follow"); diff --git a/net-http-client-netty-secure/src/main/java/org/xbib/net/http/client/netty/secure/http1/Https1ChannelInitializer.java b/net-http-client-netty-secure/src/main/java/org/xbib/net/http/client/netty/secure/http1/Https1ChannelInitializer.java index 5ab538a..e58d2c0 100644 --- a/net-http-client-netty-secure/src/main/java/org/xbib/net/http/client/netty/secure/http1/Https1ChannelInitializer.java +++ b/net-http-client-netty-secure/src/main/java/org/xbib/net/http/client/netty/secure/http1/Https1ChannelInitializer.java @@ -229,12 +229,16 @@ public class Https1ChannelInitializer implements HttpChannelInitializer { throw new IllegalStateException(); } }; + // TODO replace deprecation Http2MultiplexCodecBuilder multiplexCodecBuilder = Http2MultiplexCodecBuilder.forClient(initializer) .initialSettings(nettyHttpClientConfig.getHttp2Settings()); if (nettyHttpClientConfig.isDebug()) { multiplexCodecBuilder.frameLogger(new Http2FrameLogger(LogLevel.DEBUG, "client-frame")); } - Http2MultiplexCodec multiplexCodec = multiplexCodecBuilder.autoAckSettingsFrame(true).build(); + // TODO replace deprecation + Http2MultiplexCodec multiplexCodec = multiplexCodecBuilder + .autoAckSettingsFrame(true) + .build(); pipeline.addLast("client-multiplex", multiplexCodec); pipeline.addLast("client-messages", new Http2Messages(interaction)); // simulate we are ready for HTTP/2 diff --git a/net-http-client-netty-secure/src/main/java/org/xbib/net/http/client/netty/secure/http2/Https2ChannelInitializer.java b/net-http-client-netty-secure/src/main/java/org/xbib/net/http/client/netty/secure/http2/Https2ChannelInitializer.java index 9905ad8..a9cbd7d 100644 --- a/net-http-client-netty-secure/src/main/java/org/xbib/net/http/client/netty/secure/http2/Https2ChannelInitializer.java +++ b/net-http-client-netty-secure/src/main/java/org/xbib/net/http/client/netty/secure/http2/Https2ChannelInitializer.java @@ -170,11 +170,13 @@ public class Https2ChannelInitializer implements HttpChannelInitializer { throw new IllegalStateException(); } }; + // TODO replace deprecation Http2MultiplexCodecBuilder multiplexCodecBuilder = Http2MultiplexCodecBuilder.forClient(initializer) .initialSettings(nettyHttpClientConfig.getHttp2Settings()); if (nettyHttpClientConfig.isDebug()) { multiplexCodecBuilder.frameLogger(new Http2FrameLogger(LogLevel.DEBUG, "client-frame")); } + // TODO replace deprecation Http2MultiplexCodec multiplexCodec = multiplexCodecBuilder .autoAckSettingsFrame(true) .autoAckPingFrame(true) diff --git a/net-http-client-netty-secure/src/test/java/org/xbib/net/http/client/netty/secure/test/AkamaiTest.java b/net-http-client-netty-secure/src/test/java/org/xbib/net/http/client/netty/secure/test/AkamaiTest.java index dc8ade4..378c383 100644 --- a/net-http-client-netty-secure/src/test/java/org/xbib/net/http/client/netty/secure/test/AkamaiTest.java +++ b/net-http-client-netty-secure/src/test/java/org/xbib/net/http/client/netty/secure/test/AkamaiTest.java @@ -15,6 +15,9 @@ public class AkamaiTest { private static final Logger logger = Logger.getLogger(AkamaiTest.class.getName()); + public AkamaiTest() { + } + /** * Problems with akamai: * failing: Cannot invoke "io.netty.handler.codec.http2.AbstractHttp2StreamChannel.fireChildRead(io.netty.handler.codec.http2.Http2Frame)" because "channel" is null * demo/h2_demo_frame.html sends no content, only a push promise, and does not continue diff --git a/net-http-client-netty-secure/src/test/java/org/xbib/net/http/client/netty/secure/test/ThreadLeakTest.java b/net-http-client-netty-secure/src/test/java/org/xbib/net/http/client/netty/secure/test/ThreadLeakTest.java index be9998b..009dfe8 100644 --- a/net-http-client-netty-secure/src/test/java/org/xbib/net/http/client/netty/secure/test/ThreadLeakTest.java +++ b/net-http-client-netty-secure/src/test/java/org/xbib/net/http/client/netty/secure/test/ThreadLeakTest.java @@ -17,12 +17,17 @@ class ThreadLeakTest { private static final Logger logger = Logger.getLogger(ThreadLeakTest.class.getName()); + public ThreadLeakTest() { + } + @Test void testForLeaks() throws IOException { NettyHttpClientConfig config = new NettyHttpsClientConfig(); try (NettyHttpClient client = NettyHttpClient.builder() .setConfig(config) .build()) { + // do something with the client + client.getClientConfig(); } } diff --git a/net-http-client-netty/src/main/java/org/xbib/net/http/client/netty/http2/Http2ChannelInitializer.java b/net-http-client-netty/src/main/java/org/xbib/net/http/client/netty/http2/Http2ChannelInitializer.java index 232b986..2b0727d 100644 --- a/net-http-client-netty/src/main/java/org/xbib/net/http/client/netty/http2/Http2ChannelInitializer.java +++ b/net-http-client-netty/src/main/java/org/xbib/net/http/client/netty/http2/Http2ChannelInitializer.java @@ -66,11 +66,13 @@ public class Http2ChannelInitializer implements HttpChannelInitializer { throw new IllegalStateException(); } }; + // TODO replace deprecation Http2MultiplexCodecBuilder multiplexCodecBuilder = Http2MultiplexCodecBuilder.forClient(initializer) .initialSettings(nettyHttpClientConfig.getHttp2Settings()); if (nettyHttpClientConfig.isDebug()) { multiplexCodecBuilder.frameLogger(new Http2FrameLogger(LogLevel.DEBUG, "client-frame")); } + // TODO replace deprecation Http2MultiplexCodec multiplexCodec = multiplexCodecBuilder .autoAckPingFrame(true) .autoAckSettingsFrame(true) diff --git a/net-http-client/src/main/java/org/xbib/net/http/client/ExponentialBackOff.java b/net-http-client/src/main/java/org/xbib/net/http/client/ExponentialBackOff.java index f022f19..14df17f 100644 --- a/net-http-client/src/main/java/org/xbib/net/http/client/ExponentialBackOff.java +++ b/net-http-client/src/main/java/org/xbib/net/http/client/ExponentialBackOff.java @@ -278,7 +278,7 @@ public class ExponentialBackOff implements BackOff { if (currentIntervalMillis >= maxIntervalMillis / multiplier) { currentIntervalMillis = maxIntervalMillis; } else { - currentIntervalMillis *= multiplier; + currentIntervalMillis = (int)(currentIntervalMillis * multiplier); } } diff --git a/net-http-j2html/src/main/java/org/xbib/net/http/j2html/BadRequestHandler.java b/net-http-j2html/src/main/java/org/xbib/net/http/j2html/BadRequestHandler.java index cb37ccc..62a0e8f 100644 --- a/net-http-j2html/src/main/java/org/xbib/net/http/j2html/BadRequestHandler.java +++ b/net-http-j2html/src/main/java/org/xbib/net/http/j2html/BadRequestHandler.java @@ -14,6 +14,9 @@ import static org.xbib.j2html.TagCreator.html; public class BadRequestHandler extends J2HtmlResourceHandler { + public BadRequestHandler() { + } + @Override protected Resource createResource(HttpRouterContext httpRouterContext) throws IOException, ParameterException { diff --git a/net-http-j2html/src/main/java/org/xbib/net/http/j2html/InternalServerErrorHandler.java b/net-http-j2html/src/main/java/org/xbib/net/http/j2html/InternalServerErrorHandler.java index 4e7b57e..7963894 100644 --- a/net-http-j2html/src/main/java/org/xbib/net/http/j2html/InternalServerErrorHandler.java +++ b/net-http-j2html/src/main/java/org/xbib/net/http/j2html/InternalServerErrorHandler.java @@ -19,6 +19,9 @@ import static org.xbib.j2html.TagCreator.pre; public class InternalServerErrorHandler extends J2HtmlResourceHandler { + public InternalServerErrorHandler() { + } + @Override protected Resource createResource(HttpRouterContext httpRouterContext) throws IOException, ParameterException { diff --git a/net-http-j2html/src/main/java/org/xbib/net/http/j2html/NotFoundHandler.java b/net-http-j2html/src/main/java/org/xbib/net/http/j2html/NotFoundHandler.java index 0c43aa5..9147b69 100644 --- a/net-http-j2html/src/main/java/org/xbib/net/http/j2html/NotFoundHandler.java +++ b/net-http-j2html/src/main/java/org/xbib/net/http/j2html/NotFoundHandler.java @@ -14,6 +14,9 @@ import static org.xbib.j2html.TagCreator.html; public class NotFoundHandler extends J2HtmlResourceHandler { + public NotFoundHandler() { + } + @Override protected Resource createResource(HttpRouterContext httpRouterContext) throws IOException, ParameterException { diff --git a/net-http-j2html/src/main/java/org/xbib/net/http/j2html/UnauthorizedHandler.java b/net-http-j2html/src/main/java/org/xbib/net/http/j2html/UnauthorizedHandler.java index 2b8da9b..28d4442 100644 --- a/net-http-j2html/src/main/java/org/xbib/net/http/j2html/UnauthorizedHandler.java +++ b/net-http-j2html/src/main/java/org/xbib/net/http/j2html/UnauthorizedHandler.java @@ -14,6 +14,9 @@ import static org.xbib.j2html.TagCreator.html; public class UnauthorizedHandler extends J2HtmlResourceHandler { + public UnauthorizedHandler() { + } + @Override protected Resource createResource(HttpRouterContext httpRouterContext) throws IOException, ParameterException { diff --git a/net-http-netty-conscrypt/src/test/java/org/xbib/net/http/netty/conscrypt/test/Http1Test.java b/net-http-netty-conscrypt/src/test/java/org/xbib/net/http/netty/conscrypt/test/Http1Test.java index d57b875..735fa62 100644 --- a/net-http-netty-conscrypt/src/test/java/org/xbib/net/http/netty/conscrypt/test/Http1Test.java +++ b/net-http-netty-conscrypt/src/test/java/org/xbib/net/http/netty/conscrypt/test/Http1Test.java @@ -13,6 +13,9 @@ public class Http1Test { private static final Logger logger = Logger.getLogger(Http1Test.class.getName()); + public Http1Test() { + } + @Test void testGoogleConscrypt() throws Exception { diff --git a/net-http-server-application-web/src/main/java/org/xbib/net/http/server/application/web/WebApplication.java b/net-http-server-application-web/src/main/java/org/xbib/net/http/server/application/web/WebApplication.java index 6ba2bc2..abe1c3d 100644 --- a/net-http-server-application-web/src/main/java/org/xbib/net/http/server/application/web/WebApplication.java +++ b/net-http-server-application-web/src/main/java/org/xbib/net/http/server/application/web/WebApplication.java @@ -27,7 +27,7 @@ public class WebApplication extends BaseApplication { @Override protected Codec newSessionCodec(HttpRouterContext httpRouterContext) { - return new FileJsonSessionCodec(sessionName, this, 1024, Duration.ofDays(1), + return new FileJsonSessionCodec(getSessionName(), this, 1024, Duration.ofDays(1), Paths.get("/var/tmp/session")); } diff --git a/net-http-server-application-web/src/main/java/org/xbib/net/http/server/application/web/WebApplicationBuilder.java b/net-http-server-application-web/src/main/java/org/xbib/net/http/server/application/web/WebApplicationBuilder.java index c1b8dcb..cfd1c9f 100644 --- a/net-http-server-application-web/src/main/java/org/xbib/net/http/server/application/web/WebApplicationBuilder.java +++ b/net-http-server-application-web/src/main/java/org/xbib/net/http/server/application/web/WebApplicationBuilder.java @@ -8,10 +8,10 @@ import org.xbib.settings.Settings; public class WebApplicationBuilder extends BaseApplicationBuilder { - protected String profile; - protected String name; + protected String profile; + protected WebApplicationBuilder() { super(); this.name = System.getProperty("application.name"); @@ -28,11 +28,11 @@ public class WebApplicationBuilder extends BaseApplicationBuilder { return this; } - @Override + /*@Override public WebApplicationBuilder setSettings(Settings settings) { this.settings = settings; return this; - } + }*/ @Override public WebApplicationBuilder setSecret(String secret) { diff --git a/net-http-server-application-web/src/main/java/org/xbib/net/http/server/application/web/groovy/Bootstrap.java b/net-http-server-application-web/src/main/java/org/xbib/net/http/server/application/web/groovy/Bootstrap.java index 915610b..75bb33c 100644 --- a/net-http-server-application-web/src/main/java/org/xbib/net/http/server/application/web/groovy/Bootstrap.java +++ b/net-http-server-application-web/src/main/java/org/xbib/net/http/server/application/web/groovy/Bootstrap.java @@ -174,7 +174,7 @@ public final class Bootstrap { .build(); WebApplication application = WebApplication.builder() - .setSettings(settings) + //.setSettings(settings) .setSecret("1088e6b7ad58d64d09961e1357bf95544447051c6ad1332cd626e3a33bb5786b") .setExecutor(executor) .setRouter(httpRouter) diff --git a/net-http-server-application-web/src/main/java/org/xbib/net/http/server/application/web/j2html/Bootstrap.java b/net-http-server-application-web/src/main/java/org/xbib/net/http/server/application/web/j2html/Bootstrap.java index d2d710c..fdcbee1 100644 --- a/net-http-server-application-web/src/main/java/org/xbib/net/http/server/application/web/j2html/Bootstrap.java +++ b/net-http-server-application-web/src/main/java/org/xbib/net/http/server/application/web/j2html/Bootstrap.java @@ -46,8 +46,6 @@ import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; import java.util.Objects; -import java.util.Optional; -import java.util.ServiceLoader; import static org.xbib.j2html.TagCreator.body; import static org.xbib.j2html.TagCreator.h1; @@ -57,7 +55,7 @@ public final class Bootstrap { private Bootstrap() { } - public static void main(String[] args) throws Exception { + public static void main(String[] args) { String profile = args.length > 0 ? args[0] : System.getProperty("application.profile"); ConfigParams configParams; ConfigLoader configLoader; @@ -181,7 +179,7 @@ public final class Bootstrap { .build(); WebApplication application = WebApplication.builder() - .setSettings(settings) + //.setSettings(settings) .setSecret("1088e6b7ad58d64d09961e1357bf95544447051c6ad1332cd626e3a33bb5786b") .setExecutor(executor) .setRouter(httpRouter) diff --git a/net-http-server-netty-secure/src/main/java/org/xbib/net/http/server/netty/secure/http2/Https2Handler.java b/net-http-server-netty-secure/src/main/java/org/xbib/net/http/server/netty/secure/http2/Https2Handler.java index 0604a34..0fecb72 100644 --- a/net-http-server-netty-secure/src/main/java/org/xbib/net/http/server/netty/secure/http2/Https2Handler.java +++ b/net-http-server-netty-secure/src/main/java/org/xbib/net/http/server/netty/secure/http2/Https2Handler.java @@ -55,7 +55,7 @@ public class Https2Handler extends ChannelDuplexHandler { .setRemoteAddress((InetSocketAddress) ctx.channel().remoteAddress()) .setStreamId(streamId); if ("PRI".equals(fullHttpRequest.method().name())) { - nettyHttpServer.dispatch(httpsRequestBuilder, httpsResponseBuilder, HttpResponseStatus.HTTP_VERSION_NOT_SUPPORTED); + nettyHttpServer.dispatchError(httpsRequestBuilder, httpsResponseBuilder, HttpResponseStatus.HTTP_VERSION_NOT_SUPPORTED); return; } httpsResponseBuilder.shouldClose("close".equalsIgnoreCase(fullHttpRequest.headers().get(HttpHeaderNames.CONNECTION))); diff --git a/net-http-server-netty-secure/src/test/java/org/xbib/net/http/server/netty/secure/test/NettyHttps2ServerMultiRequestLoadTest.java b/net-http-server-netty-secure/src/test/java/org/xbib/net/http/server/netty/secure/test/NettyHttps2ServerMultiRequestLoadTest.java index 0548e94..b3debe3 100644 --- a/net-http-server-netty-secure/src/test/java/org/xbib/net/http/server/netty/secure/test/NettyHttps2ServerMultiRequestLoadTest.java +++ b/net-http-server-netty-secure/src/test/java/org/xbib/net/http/server/netty/secure/test/NettyHttps2ServerMultiRequestLoadTest.java @@ -34,6 +34,9 @@ public class NettyHttps2ServerMultiRequestLoadTest { private static final Logger logger = Logger.getLogger(NettyHttps2ServerMultiRequestLoadTest.class.getName()); + public NettyHttps2ServerMultiRequestLoadTest() { + } + @Test public void testHttps2Load() throws Exception { // client HTTP 2.0, server HTTP 2.0 diff --git a/net-http-server-netty-secure/src/test/java/org/xbib/net/http/server/netty/secure/test/NettyHttps2ServerTest.java b/net-http-server-netty-secure/src/test/java/org/xbib/net/http/server/netty/secure/test/NettyHttps2ServerTest.java index 4dbadd4..8684523 100644 --- a/net-http-server-netty-secure/src/test/java/org/xbib/net/http/server/netty/secure/test/NettyHttps2ServerTest.java +++ b/net-http-server-netty-secure/src/test/java/org/xbib/net/http/server/netty/secure/test/NettyHttps2ServerTest.java @@ -34,6 +34,9 @@ public class NettyHttps2ServerTest { private static final Logger logger = Logger.getLogger(NettyHttps2ServerTest.class.getName()); + public NettyHttps2ServerTest() { + } + @Test public void testHttps2() throws Exception { // client HTTP 2.0 + server HTTP 2.0 (no upgrade) diff --git a/net-http-server-netty-secure/src/test/java/org/xbib/net/http/server/netty/secure/test/NettyHttpsServerMultiRequestLoadTest.java b/net-http-server-netty-secure/src/test/java/org/xbib/net/http/server/netty/secure/test/NettyHttpsServerMultiRequestLoadTest.java index dd34616..10e5e9b 100644 --- a/net-http-server-netty-secure/src/test/java/org/xbib/net/http/server/netty/secure/test/NettyHttpsServerMultiRequestLoadTest.java +++ b/net-http-server-netty-secure/src/test/java/org/xbib/net/http/server/netty/secure/test/NettyHttpsServerMultiRequestLoadTest.java @@ -36,6 +36,9 @@ public class NettyHttpsServerMultiRequestLoadTest { private static final Logger logger = Logger.getLogger(NettyHttpsServerMultiRequestLoadTest.class.getName()); + public NettyHttpsServerMultiRequestLoadTest() { + } + @Test public void testHttps1Load() throws Exception { // client HTTP 1.1, server HTTP 1.1 (no upgrade) diff --git a/net-http-server-netty-secure/src/test/java/org/xbib/net/http/server/netty/secure/test/NettyHttpsServerTest.java b/net-http-server-netty-secure/src/test/java/org/xbib/net/http/server/netty/secure/test/NettyHttpsServerTest.java index 057df54..3459b65 100644 --- a/net-http-server-netty-secure/src/test/java/org/xbib/net/http/server/netty/secure/test/NettyHttpsServerTest.java +++ b/net-http-server-netty-secure/src/test/java/org/xbib/net/http/server/netty/secure/test/NettyHttpsServerTest.java @@ -39,6 +39,9 @@ public class NettyHttpsServerTest { private static final Logger logger = Logger.getLogger(NettyHttpsServerTest.class.getName()); + public NettyHttpsServerTest() { + } + @Test public void testHttps1() throws Exception { // client HTTP 1.1 + server HTTP 1.1 (no upgrade) diff --git a/net-http-server-netty/src/main/java/org/xbib/net/http/server/netty/NettyHttpServer.java b/net-http-server-netty/src/main/java/org/xbib/net/http/server/netty/NettyHttpServer.java index dbacb32..52a7a69 100644 --- a/net-http-server-netty/src/main/java/org/xbib/net/http/server/netty/NettyHttpServer.java +++ b/net-http-server-netty/src/main/java/org/xbib/net/http/server/netty/NettyHttpServer.java @@ -189,9 +189,9 @@ public class NettyHttpServer implements HttpServer { } @Override - public void dispatch(HttpRequestBuilder requestBuilder, - HttpResponseBuilder responseBuilder, - HttpResponseStatus responseStatus) { + public void dispatchError(HttpRequestBuilder requestBuilder, + HttpResponseBuilder responseBuilder, + HttpResponseStatus responseStatus) { Callable callable = (Callable) () -> { HttpRouter router = builder.application.getRouter(); HttpRouterContext httpRouterContext = builder.application.createContext(null, requestBuilder, responseBuilder); diff --git a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/HttpRequestTest.java b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/HttpRequestTest.java index 89db5fb..7fa16aa 100644 --- a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/HttpRequestTest.java +++ b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/HttpRequestTest.java @@ -17,6 +17,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals; public class HttpRequestTest { + public HttpRequestTest() { + } + @Test public void testFormAsMultiMap() { Parameter parameter = Parameter.builder().domain(Parameter.Domain.FORM) diff --git a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttp2ServerMultiRequestLoadTest.java b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttp2ServerMultiRequestLoadTest.java index 1587974..ccc619d 100644 --- a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttp2ServerMultiRequestLoadTest.java +++ b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttp2ServerMultiRequestLoadTest.java @@ -32,6 +32,9 @@ public class NettyHttp2ServerMultiRequestLoadTest { private static final Logger logger = Logger.getLogger(NettyHttp2ServerMultiRequestLoadTest.class.getName()); + public NettyHttp2ServerMultiRequestLoadTest() { + } + @Test public void testHttp2Multi() throws Exception { diff --git a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttp2ServerTest.java b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttp2ServerTest.java index f52cb5e..cd57926 100644 --- a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttp2ServerTest.java +++ b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttp2ServerTest.java @@ -31,6 +31,9 @@ public class NettyHttp2ServerTest { private static final Logger logger = Logger.getLogger(NettyHttp2ServerTest.class.getName()); + public NettyHttp2ServerTest() { + } + @Test public void testHttp2() throws Exception { // note that h2c in cleartext is very uncommon, browser do not support this. diff --git a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerBodyTest.java b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerBodyTest.java index 3192ac3..c3014ef 100644 --- a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerBodyTest.java +++ b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerBodyTest.java @@ -30,6 +30,9 @@ public class NettyHttpServerBodyTest { private static final Logger logger = Logger.getLogger(NettyHttpServerBodyTest.class.getName()); + public NettyHttpServerBodyTest() { + } + @Test public void testHttp() throws Exception { URL url = URL.from("http://localhost:8008/domain/"); diff --git a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerFailureTest.java b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerFailureTest.java index 55a8b87..629a317 100644 --- a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerFailureTest.java +++ b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerFailureTest.java @@ -36,6 +36,9 @@ public class NettyHttpServerFailureTest { private static final Logger logger = Logger.getLogger(NettyHttpServerTest.class.getName()); + public NettyHttpServerFailureTest() { + } + @Test public void testBadRequest() throws Exception { URL url = URL.from("http://localhost:8008/domain/"); diff --git a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerFileUploadTest.java b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerFileUploadTest.java index 1756346..61bbe21 100644 --- a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerFileUploadTest.java +++ b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerFileUploadTest.java @@ -39,6 +39,9 @@ public class NettyHttpServerFileUploadTest { private static final Logger logger = Logger.getLogger(NettyHttpServerFileUploadTest.class.getName()); + public NettyHttpServerFileUploadTest() { + } + @Test public void testSimpleFileUpload() throws Exception { URL url = URL.from("http://localhost:8008/"); diff --git a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerMultiRequestLoadTest.java b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerMultiRequestLoadTest.java index 017b75c..56d96e4 100644 --- a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerMultiRequestLoadTest.java +++ b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerMultiRequestLoadTest.java @@ -32,6 +32,9 @@ public class NettyHttpServerMultiRequestLoadTest { private static final Logger logger = Logger.getLogger(NettyHttpServerMultiRequestLoadTest.class.getName()); + public NettyHttpServerMultiRequestLoadTest() { + } + @Test public void testHttp1Multi() throws Exception { diff --git a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerRequestTest.java b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerRequestTest.java index 5108da9..bcf75ad 100644 --- a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerRequestTest.java +++ b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerRequestTest.java @@ -35,6 +35,9 @@ public class NettyHttpServerRequestTest { private static final Logger logger = Logger.getLogger(NettyHttpServerRequestTest.class.getName()); + public NettyHttpServerRequestTest() { + } + @Test public void testHttpRequest() throws Exception { URL url = URL.from("http://localhost:8008/test/"); diff --git a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerTest.java b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerTest.java index d260029..e876395 100644 --- a/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerTest.java +++ b/net-http-server-netty/src/test/java/org/xbib/net/http/server/netty/test/NettyHttpServerTest.java @@ -35,6 +35,9 @@ public class NettyHttpServerTest { private static final Logger logger = Logger.getLogger(NettyHttpServerTest.class.getName()); + public NettyHttpServerTest() { + } + @Test public void testHttp() throws Exception { URL url = URL.from("http://localhost:8008/domain/"); diff --git a/net-http-server-nio/src/main/java/org/xbib/net/http/server/nio/NioHttpServer.java b/net-http-server-nio/src/main/java/org/xbib/net/http/server/nio/NioHttpServer.java index 161e003..4790506 100644 --- a/net-http-server-nio/src/main/java/org/xbib/net/http/server/nio/NioHttpServer.java +++ b/net-http-server-nio/src/main/java/org/xbib/net/http/server/nio/NioHttpServer.java @@ -144,9 +144,9 @@ public class NioHttpServer implements HttpServer { } @Override - public void dispatch(org.xbib.net.http.server.HttpRequestBuilder requestBuilder, - org.xbib.net.http.server.HttpResponseBuilder responseBuilder, - HttpResponseStatus responseStatus) { + public void dispatchError(org.xbib.net.http.server.HttpRequestBuilder requestBuilder, + org.xbib.net.http.server.HttpResponseBuilder responseBuilder, + HttpResponseStatus responseStatus) { HttpRouterContext httpRouterContext = builder.application.createContext(null, requestBuilder, responseBuilder); Callable callable = (Callable) () -> { HttpRouter router = builder.application.getRouter(); diff --git a/net-http-server-nio/src/test/java/org/xbib/net/http/server/nio/test/ByteArrayTest.java b/net-http-server-nio/src/test/java/org/xbib/net/http/server/nio/test/ByteArrayTest.java index b8dbcaf..361dd4d 100644 --- a/net-http-server-nio/src/test/java/org/xbib/net/http/server/nio/test/ByteArrayTest.java +++ b/net-http-server-nio/src/test/java/org/xbib/net/http/server/nio/test/ByteArrayTest.java @@ -8,6 +8,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; public class ByteArrayTest { + + public ByteArrayTest() { + } + @Test public void should_return_inserted_data_when_insert_some_bytes_and_call_getCopyArray_given_a_ByteArray() { ByteArray byteArray = new ByteArray(); diff --git a/net-http-server-nio/src/test/java/org/xbib/net/http/server/nio/test/HttpRequestParserTest.java b/net-http-server-nio/src/test/java/org/xbib/net/http/server/nio/test/HttpRequestParserTest.java index 3d88175..0af5aa7 100644 --- a/net-http-server-nio/src/test/java/org/xbib/net/http/server/nio/test/HttpRequestParserTest.java +++ b/net-http-server-nio/src/test/java/org/xbib/net/http/server/nio/test/HttpRequestParserTest.java @@ -17,6 +17,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue; public class HttpRequestParserTest { + public HttpRequestParserTest() { + } + @Test public void should_parse_get_request_success() { HttpRequestParser parser = new HttpRequestParser(); diff --git a/net-http-server-nio/src/test/java/org/xbib/net/http/server/nio/test/NioHttpServerTest.java b/net-http-server-nio/src/test/java/org/xbib/net/http/server/nio/test/NioHttpServerTest.java index afa12d8..398ab89 100644 --- a/net-http-server-nio/src/test/java/org/xbib/net/http/server/nio/test/NioHttpServerTest.java +++ b/net-http-server-nio/src/test/java/org/xbib/net/http/server/nio/test/NioHttpServerTest.java @@ -22,6 +22,9 @@ import java.nio.charset.StandardCharsets; public class NioHttpServerTest { + public NioHttpServerTest() { + } + @Disabled @Test public void nioServerTest() throws Exception { diff --git a/net-http-server-simple/src/main/java/org/xbib/net/http/server/simple/SimpleHttpServer.java b/net-http-server-simple/src/main/java/org/xbib/net/http/server/simple/SimpleHttpServer.java index 60ad4f3..504cca8 100644 --- a/net-http-server-simple/src/main/java/org/xbib/net/http/server/simple/SimpleHttpServer.java +++ b/net-http-server-simple/src/main/java/org/xbib/net/http/server/simple/SimpleHttpServer.java @@ -146,9 +146,9 @@ public class SimpleHttpServer implements HttpServer { } @Override - public void dispatch(org.xbib.net.http.server.HttpRequestBuilder requestBuilder, - org.xbib.net.http.server.HttpResponseBuilder responseBuilder, - HttpResponseStatus responseStatus) { + public void dispatchError(org.xbib.net.http.server.HttpRequestBuilder requestBuilder, + org.xbib.net.http.server.HttpResponseBuilder responseBuilder, + HttpResponseStatus responseStatus) { HttpRouterContext httpRouterContext = builder.application.createContext(null, requestBuilder, responseBuilder); Callable callable = (Callable) () -> { HttpRouter router = builder.application.getRouter(); diff --git a/net-http-server-simple/src/test/java/org/xbib/net/http/server/simple/test/HttpRouterTest.java b/net-http-server-simple/src/test/java/org/xbib/net/http/server/simple/test/HttpRouterTest.java index d7cb8b1..503eb37 100644 --- a/net-http-server-simple/src/test/java/org/xbib/net/http/server/simple/test/HttpRouterTest.java +++ b/net-http-server-simple/src/test/java/org/xbib/net/http/server/simple/test/HttpRouterTest.java @@ -27,6 +27,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue; public class HttpRouterTest { + public HttpRouterTest() { + } + @Test public void routerTest() throws Exception { URL url = URL.http().host("localhost").port(8008).build(); diff --git a/net-http-server-simple/src/test/java/org/xbib/net/http/server/simple/test/SimpleHttpServerTest.java b/net-http-server-simple/src/test/java/org/xbib/net/http/server/simple/test/SimpleHttpServerTest.java index 4a69bbc..1129596 100644 --- a/net-http-server-simple/src/test/java/org/xbib/net/http/server/simple/test/SimpleHttpServerTest.java +++ b/net-http-server-simple/src/test/java/org/xbib/net/http/server/simple/test/SimpleHttpServerTest.java @@ -22,6 +22,9 @@ import java.nio.charset.StandardCharsets; public class SimpleHttpServerTest { + public SimpleHttpServerTest() { + } + @Disabled @Test public void simpleServerTest() throws Exception { diff --git a/net-http-server/src/main/java/org/xbib/net/http/server/BaseHttpResponseBuilder.java b/net-http-server/src/main/java/org/xbib/net/http/server/BaseHttpResponseBuilder.java index 31604bc..2976b55 100644 --- a/net-http-server/src/main/java/org/xbib/net/http/server/BaseHttpResponseBuilder.java +++ b/net-http-server/src/main/java/org/xbib/net/http/server/BaseHttpResponseBuilder.java @@ -92,6 +92,7 @@ public abstract class BaseHttpResponseBuilder implements HttpResponseBuilder { */ protected Attributes attributes; + @SuppressWarnings("this-escape") protected BaseHttpResponseBuilder() { reset(); } diff --git a/net-http-server/src/main/java/org/xbib/net/http/server/HttpServer.java b/net-http-server/src/main/java/org/xbib/net/http/server/HttpServer.java index d6478c5..7a2d060 100644 --- a/net-http-server/src/main/java/org/xbib/net/http/server/HttpServer.java +++ b/net-http-server/src/main/java/org/xbib/net/http/server/HttpServer.java @@ -13,13 +13,12 @@ public interface HttpServer extends Closeable { void loop() throws IOException; + Collection getDomains(); + void dispatch(HttpRequestBuilder requestBuilder, HttpResponseBuilder responseBuilder); - void dispatch(HttpRequestBuilder requestBuilder, - HttpResponseBuilder responseBuilder, - HttpResponseStatus responseStatus); - - Collection getDomains(); - + void dispatchError(HttpRequestBuilder requestBuilder, + HttpResponseBuilder responseBuilder, + HttpResponseStatus responseStatus); } diff --git a/net-http-server/src/main/java/org/xbib/net/http/server/application/Application.java b/net-http-server/src/main/java/org/xbib/net/http/server/application/Application.java index 99e4294..ef168c5 100644 --- a/net-http-server/src/main/java/org/xbib/net/http/server/application/Application.java +++ b/net-http-server/src/main/java/org/xbib/net/http/server/application/Application.java @@ -18,7 +18,6 @@ import org.xbib.net.http.server.executor.Executor; import org.xbib.net.http.server.route.HttpRouter; import org.xbib.net.http.server.session.SessionListener; import org.xbib.net.mime.MimeTypeService; -import org.xbib.settings.Settings; public interface Application extends SessionListener, Resolver, Closeable { @@ -28,10 +27,14 @@ public interface Application extends SessionListener, Resolver, Closeable Path getHome(); + String getPrefix(); + Collection getDomains(); Set getAddresses(); + boolean shouldNegotiateLocale(); + Locale getLocale(); ZoneId getZoneId(); @@ -40,8 +43,6 @@ public interface Application extends SessionListener, Resolver, Closeable String getContextPath(); - Settings getSettings(); - void addModule(ApplicationModule applicationModule); Collection getModules(); diff --git a/net-http-server/src/main/java/org/xbib/net/http/server/application/ApplicationBuilder.java b/net-http-server/src/main/java/org/xbib/net/http/server/application/ApplicationBuilder.java index 51aa9f6..27fa6d4 100644 --- a/net-http-server/src/main/java/org/xbib/net/http/server/application/ApplicationBuilder.java +++ b/net-http-server/src/main/java/org/xbib/net/http/server/application/ApplicationBuilder.java @@ -13,6 +13,8 @@ public interface ApplicationBuilder { ApplicationBuilder setHome(Path home); + ApplicationBuilder setPrefix(String prefix); + ApplicationBuilder setContextPath(String contextPath); ApplicationBuilder setSecret(String hexSecret); @@ -21,6 +23,8 @@ public interface ApplicationBuilder { ApplicationBuilder setSessionsEnabled(boolean sessionsEnabled); + ApplicationBuilder shouldNegotiateLocale(boolean shouldNegotiate); + ApplicationBuilder setLocale(Locale locale); ApplicationBuilder setZoneId(ZoneId zoneId); diff --git a/net-http-server/src/main/java/org/xbib/net/http/server/application/BaseApplication.java b/net-http-server/src/main/java/org/xbib/net/http/server/application/BaseApplication.java index b8d0c95..17b3787 100644 --- a/net-http-server/src/main/java/org/xbib/net/http/server/application/BaseApplication.java +++ b/net-http-server/src/main/java/org/xbib/net/http/server/application/BaseApplication.java @@ -9,7 +9,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Locale; -import java.util.Map; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -41,7 +40,6 @@ import org.xbib.net.http.server.auth.MemoryPropertiesUserProfileCodec; import org.xbib.net.http.server.validate.HttpRequestValidator; import org.xbib.net.mime.MimeTypeService; import org.xbib.net.util.RandomUtil; -import org.xbib.settings.Settings; public class BaseApplication implements Application { @@ -49,8 +47,6 @@ public class BaseApplication implements Application { protected BaseApplicationBuilder builder; - protected final String sessionName; - private final HttpResponseRenderer httpResponseRenderer; private final Attributes attributes; @@ -61,30 +57,9 @@ public class BaseApplication implements Application { protected BaseApplication(BaseApplicationBuilder builder) { this.builder = builder; - this.sessionName = builder.settings.get("session.name", "SESS"); - this.httpResponseRenderer = newResponseRenderer(); this.attributes = newAttributes(); this.applicationModuleList = new ArrayList<>(); - for (Map.Entry entry : builder.settings.getGroups("module").entrySet()) { - String moduleName = entry.getKey(); - Settings moduleSettings = entry.getValue(); - if (moduleSettings.getAsBoolean("enabled", true)) { - try { - String className = moduleSettings.get("class"); - @SuppressWarnings("unchecked") - Class clazz = - (Class) Class.forName(className, true, builder.classLoader); - ApplicationModule applicationModule = clazz.getConstructor(Application.class, String.class, Settings.class) - .newInstance(this, moduleName, moduleSettings); - applicationModuleList.add(applicationModule); - } catch (Exception e) { - logger.log(Level.WARNING, e.getMessage(), e); - throw new IllegalArgumentException("class not found or not loadable: " + e.getMessage()); - } - } else { - logger.log(Level.WARNING, "disabled module: " + moduleName); - } - } + this.httpResponseRenderer = newResponseRenderer(); } public static BaseApplicationBuilder builder() { @@ -111,6 +86,16 @@ public class BaseApplication implements Application { return builder.home; } + @Override + public String getPrefix() { + return builder.prefix; + } + + @Override + public boolean shouldNegotiateLocale() { + return builder.shouldNegotiateLocale; + } + @Override public Locale getLocale() { return builder.locale; @@ -131,19 +116,6 @@ public class BaseApplication implements Application { return builder.contextPath; } - @Override - public Settings getSettings() { - return builder.settings; - } - - public String getSecret() { - return builder.secret; - } - - public Set getStaticFileSuffixes() { - return builder.staticFileSuffixes; - } - @Override public Collection getModules() { return applicationModuleList; @@ -195,6 +167,18 @@ public class BaseApplication implements Application { } } + public String getSessionName() { + return "SESS_" + getProfile().toLowerCase(Locale.ROOT); + } + + public String getSecret() { + return builder.secret; + } + + public Set getStaticFileSuffixes() { + return builder.staticFileSuffixes; + } + protected HttpRequestValidator newRequestValidator() { return new HttpRequestValidator(); } @@ -216,7 +200,7 @@ public class BaseApplication implements Application { } protected Codec newSessionCodec(HttpRouterContext httpRouterContext) { - return new MemoryPropertiesSessionCodec(sessionName,this, 1024, Duration.ofDays(1)); + return new MemoryPropertiesSessionCodec(getSessionName(),this, 1024, Duration.ofDays(1)); } protected Codec newUserProfileCodec(HttpRouterContext httpRouterContext) { @@ -227,7 +211,7 @@ public class BaseApplication implements Application { return new IncomingContextHandler(userProfileCodec, getSecret(), "HmacSHA1", - sessionName, + getSessionName(), sessionCodec, getStaticFileSuffixes(), () -> RandomUtil.randomString(16)); @@ -237,7 +221,7 @@ public class BaseApplication implements Application { return new OutgoingContextHandler( getSecret(), "HmacSHA1", - sessionName, + getSessionName(), getStaticFileSuffixes(), Duration.ofDays(1), true, @@ -254,13 +238,13 @@ public class BaseApplication implements Application { @Override public void onCreated(Session session) { - logger.log(Level.FINER, "session name = " + sessionName + " created = " + session); + logger.log(Level.FINER, "session created = " + session); applicationModuleList.forEach(module -> module.onOpen(session)); } @Override public void onDestroy(Session session) { - logger.log(Level.FINER, "session name = " + sessionName + " destroyed = " + session); + logger.log(Level.FINER, "session destroyed = " + session); if (throwable != null) { applicationModuleList.forEach(module -> module.onFail(session, throwable)); } else { diff --git a/net-http-server/src/main/java/org/xbib/net/http/server/application/BaseApplicationBuilder.java b/net-http-server/src/main/java/org/xbib/net/http/server/application/BaseApplicationBuilder.java index 171e013..aa750de 100644 --- a/net-http-server/src/main/java/org/xbib/net/http/server/application/BaseApplicationBuilder.java +++ b/net-http-server/src/main/java/org/xbib/net/http/server/application/BaseApplicationBuilder.java @@ -12,7 +12,6 @@ import org.xbib.net.http.server.executor.BaseExecutor; import org.xbib.net.http.server.executor.Executor; import org.xbib.net.http.server.route.HttpRouter; import org.xbib.net.mime.MimeTypeService; -import org.xbib.settings.Settings; public class BaseApplicationBuilder implements ApplicationBuilder { @@ -25,9 +24,9 @@ public class BaseApplicationBuilder implements ApplicationBuilder { protected Path home; - protected ClassLoader classLoader; + protected String prefix; - protected Settings settings; + protected ClassLoader classLoader; protected String contextPath; @@ -37,6 +36,8 @@ public class BaseApplicationBuilder implements ApplicationBuilder { protected boolean sessionsEnabled; + protected boolean shouldNegotiateLocale; + protected Locale locale; protected ZoneId zoneId; @@ -62,14 +63,16 @@ public class BaseApplicationBuilder implements ApplicationBuilder { this.profile = profile; return this; } + @Override public BaseApplicationBuilder setHome(Path home) { this.home = home; return this; } - public BaseApplicationBuilder setSettings(Settings settings) { - this.settings = settings; + @Override + public BaseApplicationBuilder setPrefix(String prefix) { + this.prefix = prefix; return this; } @@ -102,6 +105,12 @@ public class BaseApplicationBuilder implements ApplicationBuilder { return this; } + @Override + public ApplicationBuilder shouldNegotiateLocale(boolean shouldNegotiateLocale) { + this.shouldNegotiateLocale = shouldNegotiateLocale; + return this; + } + @Override public ApplicationBuilder setLocale(Locale locale) { this.locale = locale; @@ -150,8 +159,8 @@ public class BaseApplicationBuilder implements ApplicationBuilder { if (this.home == null) { this.home = Paths.get(System.getProperty("application.home", ".")); } - if (this.settings == null) { - this.settings = Settings.emptySettings(); + if (this.prefix == null) { + this.prefix = "/"; } if (this.classLoader == null) { this.classLoader = getClass().getClassLoader(); @@ -177,6 +186,26 @@ public class BaseApplicationBuilder implements ApplicationBuilder { if (executor == null) { this.executor = BaseExecutor.builder().build(); } + /*for (Map.Entry entry : settings.getGroups("module").entrySet()) { + String moduleName = entry.getKey(); + Settings moduleSettings = entry.getValue(); + if (moduleSettings.getAsBoolean("enabled", true)) { + try { + String className = moduleSettings.get("class"); + @SuppressWarnings("unchecked") + Class clazz = + (Class) Class.forName(className, true, builder.classLoader); + ApplicationModule applicationModule = clazz.getConstructor(Application.class, String.class, Settings.class) + .newInstance(this, moduleName, moduleSettings); + applicationModuleList.add(applicationModule); + } catch (Exception e) { + logger.log(Level.WARNING, e.getMessage(), e); + throw new IllegalArgumentException("class not found or not loadable: " + e.getMessage()); + } + } else { + logger.log(Level.WARNING, "disabled module: " + moduleName); + } + }*/ return new BaseApplication(this); } } diff --git a/net-http-server/src/main/java/org/xbib/net/http/server/ldap/LdapContextFactory.java b/net-http-server/src/main/java/org/xbib/net/http/server/ldap/LdapContextFactory.java index 3d8c47b..c87ac6c 100644 --- a/net-http-server/src/main/java/org/xbib/net/http/server/ldap/LdapContextFactory.java +++ b/net-http-server/src/main/java/org/xbib/net/http/server/ldap/LdapContextFactory.java @@ -1,8 +1,6 @@ package org.xbib.net.http.server.ldap; import java.io.IOException; -import java.security.PrivilegedActionException; -import java.security.PrivilegedExceptionAction; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; @@ -12,7 +10,6 @@ import javax.naming.directory.InitialDirContext; import javax.naming.ldap.InitialLdapContext; import javax.naming.ldap.StartTlsRequest; import javax.naming.ldap.StartTlsResponse; -import javax.security.auth.Subject; import javax.security.auth.login.Configuration; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; @@ -135,15 +132,13 @@ public class LdapContextFactory { try { LoginContext lc = new LoginContext(getClass().getName(), new CallbackHandlerImpl(principal, credentials)); lc.login(); - initialDirContext = Subject.doAs(lc.getSubject(), (PrivilegedExceptionAction) () -> { - Properties env = new Properties(); - env.put(Context.INITIAL_CONTEXT_FACTORY, factory); - env.put(Context.PROVIDER_URL, providerUrl); - env.put(Context.REFERRAL, referral); - logger.log(Level.FINE, "new initial LDAP context: " + env); - return new InitialLdapContext(env, null); - }); - } catch (LoginException | PrivilegedActionException e) { + Properties env = new Properties(); + env.put(Context.INITIAL_CONTEXT_FACTORY, factory); + env.put(Context.PROVIDER_URL, providerUrl); + env.put(Context.REFERRAL, referral); + logger.log(Level.FINE, "new initial LDAP context: " + env); + initialDirContext = new InitialLdapContext(env, null); + } catch (LoginException e) { NamingException namingException = new NamingException(e.getMessage()); namingException.initCause(e); throw namingException; diff --git a/net-http-server/src/main/java/org/xbib/net/http/server/resource/HtmlTemplateResource.java b/net-http-server/src/main/java/org/xbib/net/http/server/resource/HtmlTemplateResource.java index c084d0a..fa416ab 100644 --- a/net-http-server/src/main/java/org/xbib/net/http/server/resource/HtmlTemplateResource.java +++ b/net-http-server/src/main/java/org/xbib/net/http/server/resource/HtmlTemplateResource.java @@ -54,7 +54,7 @@ public class HtmlTemplateResource implements HttpServerResource { this.templateResourceHandler = templateResourceHandler; this.application = httpRouterContext.getAttributes().get(Application.class, "application"); Objects.requireNonNull(application); - this.shouldNegotiateLocale = application.getSettings().getAsBoolean("negotiateLocale", false); + this.shouldNegotiateLocale = application.shouldNegotiateLocale(); this.responseBuilder = httpRouterContext.getAttributes().get(HttpResponseBuilder.class, "responsebuilder"); Objects.requireNonNull(responseBuilder); Path root = templateResourceHandler.getRoot(); @@ -64,17 +64,18 @@ public class HtmlTemplateResource implements HttpServerResource { } this.resourcePath = httpRouterContext.getRequestBuilder().getRequestPath().substring(1); this.path = !resourcePath.isEmpty() ? root.resolve(resourcePath) : root; + String indexFileName = templateResourceHandler.getIndexFileName(); logger.log(Level.FINEST, "class = " + getClass().getName() + " root = " + root + " resource path = " + resourcePath + " path = " + path + - " index file name = " + templateResourceHandler.getIndexFileName()); + " index file name = " + indexFileName); this.name = path.getFileName().toString(); this.baseName = AbstractResourceHandler.basename(name); this.suffix = AbstractResourceHandler.suffix(name); if (Files.isDirectory(path)) { - if (getIndexFileName() != null) { - Path indexPath = path.resolve(templateResourceHandler.getIndexFileName()); + if (indexFileName != null) { + Path indexPath = path.resolve(indexFileName); logger.log(Level.FINEST, "resolved to index path = " + indexPath); if (Files.exists(indexPath)) { logger.log(Level.FINEST, "index path exists"); @@ -191,11 +192,14 @@ public class HtmlTemplateResource implements HttpServerResource { } public String url(HttpRequest request, String rel, boolean absolute) { - String webPrefix = application.getSettings().get("web.prefix", "/"); - if (!webPrefix.endsWith("/")) { - webPrefix = webPrefix + "/"; + String prefix = application.getPrefix(); + if (prefix == null) { + prefix = "/"; } - URL url = request.getBaseURL().resolve(webPrefix).resolve(rel); + if (!prefix.endsWith("/")) { + prefix = prefix + "/"; + } + URL url = request.getBaseURL().resolve(prefix).resolve(rel); return absolute ? url.toExternalForm() : toOrigin(url); } diff --git a/net-http-server/src/main/java/org/xbib/net/http/server/resource/negotiate/LocaleNegotiator.java b/net-http-server/src/main/java/org/xbib/net/http/server/resource/negotiate/LocaleNegotiator.java index 77251da..efe795a 100644 --- a/net-http-server/src/main/java/org/xbib/net/http/server/resource/negotiate/LocaleNegotiator.java +++ b/net-http-server/src/main/java/org/xbib/net/http/server/resource/negotiate/LocaleNegotiator.java @@ -21,9 +21,9 @@ public class LocaleNegotiator { } lang = lang.trim(); if ((pos = lang.indexOf('-')) == -1) { - locale = new Locale(lang, Locale.getDefault().getCountry()); + locale = Locale.of(lang, Locale.getDefault().getCountry()); } else { - locale = new Locale(lang.substring(0, pos), lang.substring(pos + 1)); + locale = Locale.of(lang.substring(0, pos), lang.substring(pos + 1)); } } } diff --git a/net-http-server/src/main/java/org/xbib/net/http/server/route/BaseHttpRoute.java b/net-http-server/src/main/java/org/xbib/net/http/server/route/BaseHttpRoute.java index ca903da..48ae5df 100644 --- a/net-http-server/src/main/java/org/xbib/net/http/server/route/BaseHttpRoute.java +++ b/net-http-server/src/main/java/org/xbib/net/http/server/route/BaseHttpRoute.java @@ -59,16 +59,17 @@ public class BaseHttpRoute implements HttpRoute { } @Override - public String getPrefix() { + public final String getPrefix() { return prefix; } @Override - public String getPath() { + public final String getPath() { return path; } - public String getEffectivePath() { + @Override + public final String getEffectivePath() { String path = getPath(); if (getPrefix() != null && !getPrefix().isEmpty()) { path = path.replaceFirst(getPrefix(), ""); diff --git a/net-http-server/src/main/java/org/xbib/net/http/server/route/BaseHttpRouterBuilder.java b/net-http-server/src/main/java/org/xbib/net/http/server/route/BaseHttpRouterBuilder.java index 4b892f6..25085d0 100644 --- a/net-http-server/src/main/java/org/xbib/net/http/server/route/BaseHttpRouterBuilder.java +++ b/net-http-server/src/main/java/org/xbib/net/http/server/route/BaseHttpRouterBuilder.java @@ -1,5 +1,6 @@ package org.xbib.net.http.server.route; +import java.security.KeyStoreException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -7,8 +8,17 @@ import java.util.Map; import java.util.Objects; import java.util.logging.Level; import java.util.logging.Logger; + +import org.xbib.net.URL; +import org.xbib.net.http.HttpAddress; +import org.xbib.net.http.HttpMethod; +import org.xbib.net.http.HttpVersion; import org.xbib.net.http.server.HttpHandler; +import org.xbib.net.http.server.HttpServiceBuilder; +import org.xbib.net.http.server.domain.BaseHttpDomain; import org.xbib.net.http.server.domain.HttpDomain; +import org.xbib.net.http.server.domain.HttpDomainBuilder; +import org.xbib.net.http.server.domain.HttpSecurityDomain; import org.xbib.net.http.server.handler.BadRequestHandler; import org.xbib.net.http.server.handler.ForbiddenHandler; import org.xbib.net.http.server.handler.InternalServerErrorHandler; @@ -16,7 +26,11 @@ import org.xbib.net.http.server.handler.NotFoundHandler; import org.xbib.net.http.server.handler.NotImplementedHandler; import org.xbib.net.http.server.handler.UnauthorizedHandler; import org.xbib.net.http.server.handler.VersionNotSupportedHandler; +import org.xbib.net.http.server.service.BaseHttpService; import org.xbib.net.http.server.service.HttpService; +import org.xbib.settings.Settings; + +import javax.net.ssl.SSLException; public class BaseHttpRouterBuilder implements HttpRouterBuilder { @@ -31,16 +45,17 @@ public class BaseHttpRouterBuilder implements HttpRouterBuilder { protected HttpRouteResolver httpRouteResolver; protected BaseHttpRouterBuilder() { - prefix = ""; - domains = new ArrayList<>(); - handlers = new HashMap<>(); - handlers.put(400, new BadRequestHandler()); - handlers.put(401, new UnauthorizedHandler()); - handlers.put(403, new ForbiddenHandler()); - handlers.put(404, new NotFoundHandler()); - handlers.put(500, new InternalServerErrorHandler()); - handlers.put(501, new NotImplementedHandler()); - handlers.put(505, new VersionNotSupportedHandler()); + this.prefix = ""; + this.domains = new ArrayList<>(); + this.handlers = new HashMap<>(); + // default handlers + this.handlers.put(400, new BadRequestHandler()); + this.handlers.put(401, new UnauthorizedHandler()); + this.handlers.put(403, new ForbiddenHandler()); + this.handlers.put(404, new NotFoundHandler()); + this.handlers.put(500, new InternalServerErrorHandler()); + this.handlers.put(501, new NotImplementedHandler()); + this.handlers.put(505, new VersionNotSupportedHandler()); } @Override @@ -55,7 +70,9 @@ public class BaseHttpRouterBuilder implements HttpRouterBuilder { @Override public BaseHttpRouterBuilder setHandler(Integer code, HttpHandler httpHandler) { - handlers.put(code, httpHandler); + if (httpHandler != null) { + handlers.put(code, httpHandler); + } return this; } @@ -71,6 +88,31 @@ public class BaseHttpRouterBuilder implements HttpRouterBuilder { return this; } + @Override + public HttpRouterBuilder fromSettings(Settings settings) { + fromSettings(settings, null); + return this; + } + @Override + public HttpRouterBuilder fromSettings(Settings settings, + Map securityDomainMap) { + // global prefix + if (settings.containsSetting("prefix")) { + setPrefix(settings.get("prefix")); + } + // global handlers + for (Map.Entry entry : settings.getGroups("handler").entrySet()) { + String codeString = entry.getKey(); + Settings handlerSettings = entry.getValue(); + setHandler(Integer.parseInt(codeString), createHttpHandler(handlerSettings)); + } + // handler domains + for (Map.Entry entry : settings.getGroups("domain").entrySet()) { + addDomain(createHttpDomain(entry.getValue(), securityDomainMap)); + } + return this; + } + @Override public BaseHttpRouter build() { if (domains.isEmpty()) { @@ -95,4 +137,79 @@ public class BaseHttpRouterBuilder implements HttpRouterBuilder { } return new BaseHttpRouter(this); } + + private HttpDomain createHttpDomain(Settings settings, + Map securityDomainMap) { + if (settings.getAsBoolean("enabled", true)) { + try { + HttpDomainBuilder httpDomainBuilder = BaseHttpDomain.builder(); + httpDomainBuilder.setHttpAddress(createHttpAddress(settings)); + for (String name : settings.getAsArray("name")) { + httpDomainBuilder.addName(name); + } + for (Map.Entry entry : settings.getGroups("service").entrySet()) { + httpDomainBuilder.addService(createHttpService(securityDomainMap, prefix, entry.getKey(), entry.getValue())); + } + return httpDomainBuilder.build(); + } catch (Exception e) { + logger.log(Level.WARNING, e.getMessage(), e); + throw new IllegalArgumentException("class not found or not loadable: " + e.getMessage()); + } + } else { + logger.log(Level.WARNING, "disabled: " + settings.getAsMap()); + } + return null; + } + + private HttpAddress createHttpAddress(Settings settings) throws KeyStoreException, SSLException { + HttpAddress.Builder httpAddressBuilder = HttpAddress.builder(); + if (settings.containsSetting("url")) { + URL url = URL.create(settings.get("url")); + httpAddressBuilder.setHost(url.getHost()); + httpAddressBuilder.setPort(url.getPort()); + httpAddressBuilder.setSecure("https".equals(url.getScheme()) || "h2".equals(url.getScheme())); + httpAddressBuilder.setVersion(url.getScheme().startsWith("http") ? HttpVersion.HTTP_1_1 : HttpVersion.HTTP_2_0); + } else { + httpAddressBuilder.setHost(settings.get("host", "localhost")); + boolean isSecure = settings.getAsBoolean("secure", false); + httpAddressBuilder.setSecure(isSecure); + httpAddressBuilder.setPort(settings.getAsInt("port", isSecure ? 443 : 80)); + httpAddressBuilder.setVersion(HttpVersion.valueOf(settings.get("version", "HTTP_1_1"))); + } + return httpAddressBuilder.build(); + } + + private HttpService createHttpService(Map securityDomainMap, + String prefix, + String path, + Settings settings) { + HttpServiceBuilder httpServiceBuilder = BaseHttpService.builder(); + if (settings.containsSetting("securitydomain")) { + if (securityDomainMap != null) { + httpServiceBuilder.setSecurityDomain(securityDomainMap.get(settings.get("securitydomain"))); + } + } + httpServiceBuilder.setPrefix(prefix); + httpServiceBuilder.setPath(path); + httpServiceBuilder.setMethod(HttpMethod.valueOf(settings.get("method", "GET"))); + httpServiceBuilder.setHandler(createHttpHandler(settings)); + return httpServiceBuilder.build(); + } + + private HttpHandler createHttpHandler(Settings settings) { + if (settings.getAsBoolean("enabled", true)) { + try { + String className = settings.get("class"); + @SuppressWarnings("unchecked") + Class clazz = (Class) Class.forName(className, true, getClass().getClassLoader()); + return clazz.getConstructor().newInstance(); + } catch (Exception e) { + logger.log(Level.WARNING, e.getMessage(), e); + throw new IllegalArgumentException("class not found or not loadable: " + e.getMessage()); + } + } else { + logger.log(Level.WARNING, "disabled: " + settings.getAsMap()); + } + return null; + } } diff --git a/net-http-server/src/main/java/org/xbib/net/http/server/route/HttpRouterBuilder.java b/net-http-server/src/main/java/org/xbib/net/http/server/route/HttpRouterBuilder.java index cce96f1..2e14fe6 100644 --- a/net-http-server/src/main/java/org/xbib/net/http/server/route/HttpRouterBuilder.java +++ b/net-http-server/src/main/java/org/xbib/net/http/server/route/HttpRouterBuilder.java @@ -2,7 +2,11 @@ package org.xbib.net.http.server.route; import org.xbib.net.http.server.HttpHandler; import org.xbib.net.http.server.domain.HttpDomain; +import org.xbib.net.http.server.domain.HttpSecurityDomain; import org.xbib.net.http.server.service.HttpService; +import org.xbib.settings.Settings; + +import java.util.Map; public interface HttpRouterBuilder { @@ -14,5 +18,10 @@ public interface HttpRouterBuilder { HttpRouterBuilder setRouteResolver(HttpRouteResolver httpRouteResolver); + HttpRouterBuilder fromSettings(Settings settings); + + HttpRouterBuilder fromSettings(Settings settings, + Map securityDomainMap); + HttpRouter build(); } diff --git a/net-http-server/src/main/java/org/xbib/net/http/server/session/BaseSession.java b/net-http-server/src/main/java/org/xbib/net/http/server/session/BaseSession.java index afa22a8..e53f39b 100644 --- a/net-http-server/src/main/java/org/xbib/net/http/server/session/BaseSession.java +++ b/net-http-server/src/main/java/org/xbib/net/http/server/session/BaseSession.java @@ -131,7 +131,7 @@ public class BaseSession implements Session { @SuppressWarnings("unchecked") @Override - public Object put(String key, Object value) { + public final Object put(String key, Object value) { Object v = value; if (key.startsWith(CACHE_PREFIX)) { if (value instanceof Map) { @@ -147,7 +147,7 @@ public class BaseSession implements Session { @SuppressWarnings({"unchecked", "rawtypes"}) @Override - public void putAll(Map map) { + public final void putAll(Map map) { if (map == null) { throw new NullPointerException("unexpected null map for putAll"); } diff --git a/net-http-server/src/test/java/module-info.java b/net-http-server/src/test/java/module-info.java index e8ba566..57b2990 100644 --- a/net-http-server/src/test/java/module-info.java +++ b/net-http-server/src/test/java/module-info.java @@ -3,6 +3,8 @@ module org.xbib.net.http.server.test { requires org.xbib.net; requires org.xbib.net.http; requires org.xbib.net.http.server; + requires org.xbib.datastructures.json.tiny; + requires org.xbib.settings.api; exports org.xbib.net.http.server.test.base; exports org.xbib.net.http.server.test.ldap; exports org.xbib.net.http.server.test.session; diff --git a/net-http-server/src/test/java/org/xbib/net/http/server/test/base/BaseHttpRouteResolverTest.java b/net-http-server/src/test/java/org/xbib/net/http/server/test/base/BaseHttpRouteResolverTest.java index 69b2383..372b2d6 100644 --- a/net-http-server/src/test/java/org/xbib/net/http/server/test/base/BaseHttpRouteResolverTest.java +++ b/net-http-server/src/test/java/org/xbib/net/http/server/test/base/BaseHttpRouteResolverTest.java @@ -14,6 +14,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals; public class BaseHttpRouteResolverTest { + public BaseHttpRouteResolverTest() { + } + @Test public void testEmptyRouteResolver() { BaseHttpRouteResolver.Builder builder = BaseHttpRouteResolver.builder(); diff --git a/net-http-server/src/test/java/org/xbib/net/http/server/test/base/RouterBuilderTest.java b/net-http-server/src/test/java/org/xbib/net/http/server/test/base/RouterBuilderTest.java new file mode 100644 index 0000000..a695aab --- /dev/null +++ b/net-http-server/src/test/java/org/xbib/net/http/server/test/base/RouterBuilderTest.java @@ -0,0 +1,21 @@ +package org.xbib.net.http.server.test.base; + +import org.junit.jupiter.api.Test; +import org.xbib.net.http.server.route.BaseHttpRouter; +import org.xbib.net.http.server.route.HttpRouter; +import org.xbib.settings.Settings; + +public class RouterBuilderTest { + + public RouterBuilderTest() { + } + + @Test + 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 + Settings settings = Settings.emptySettings(); + HttpRouter httpRouter = BaseHttpRouter.builder() + .fromSettings(settings) + .build(); + } +} diff --git a/net-http-server/src/test/java/org/xbib/net/http/server/test/ldap/LdapRealmTest.java b/net-http-server/src/test/java/org/xbib/net/http/server/test/ldap/LdapRealmTest.java index 8ad88b9..5284589 100644 --- a/net-http-server/src/test/java/org/xbib/net/http/server/test/ldap/LdapRealmTest.java +++ b/net-http-server/src/test/java/org/xbib/net/http/server/test/ldap/LdapRealmTest.java @@ -20,6 +20,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue; public class LdapRealmTest { + public LdapRealmTest() { + } @Disabled @Test diff --git a/net-http-server/src/test/java/org/xbib/net/http/server/test/ldap/LdapTest.java b/net-http-server/src/test/java/org/xbib/net/http/server/test/ldap/LdapTest.java index b31b86b..26900ea 100644 --- a/net-http-server/src/test/java/org/xbib/net/http/server/test/ldap/LdapTest.java +++ b/net-http-server/src/test/java/org/xbib/net/http/server/test/ldap/LdapTest.java @@ -13,6 +13,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue; public class LdapTest { + public LdapTest() { + } + @Disabled @Test public void testLdap() { diff --git a/net-http-server/src/test/java/org/xbib/net/http/server/test/session/JsonSessionTest.java b/net-http-server/src/test/java/org/xbib/net/http/server/test/session/JsonSessionTest.java index bf480a6..bd32ad4 100644 --- a/net-http-server/src/test/java/org/xbib/net/http/server/test/session/JsonSessionTest.java +++ b/net-http-server/src/test/java/org/xbib/net/http/server/test/session/JsonSessionTest.java @@ -15,6 +15,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals; public class JsonSessionTest { + public JsonSessionTest() { + } + @Test void testJsonSession() throws IOException { Codec sessionCodec = newSessionCodec(); diff --git a/net-http-server/src/test/java/org/xbib/net/http/server/test/userprofile/JsonUserProfileTest.java b/net-http-server/src/test/java/org/xbib/net/http/server/test/userprofile/JsonUserProfileTest.java index 8c809f3..dd61fe8 100644 --- a/net-http-server/src/test/java/org/xbib/net/http/server/test/userprofile/JsonUserProfileTest.java +++ b/net-http-server/src/test/java/org/xbib/net/http/server/test/userprofile/JsonUserProfileTest.java @@ -1,6 +1,7 @@ package org.xbib.net.http.server.test.userprofile; import org.junit.jupiter.api.Test; +import org.xbib.datastructures.json.tiny.JsonBuilder; import org.xbib.net.UserProfile; import org.xbib.net.http.server.persist.Codec; import org.xbib.net.http.server.auth.FileJsonUserProfileCodec; @@ -12,6 +13,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; public class JsonUserProfileTest { + public JsonUserProfileTest() { + } @Test void testJsonUserProfile() throws IOException { diff --git a/net-http-template-groovy/src/main/java/org/xbib/net/http/template/groovy/DefaultMarkupTemplate.java b/net-http-template-groovy/src/main/java/org/xbib/net/http/template/groovy/DefaultMarkupTemplate.java index 785c208..9d67b1f 100644 --- a/net-http-template-groovy/src/main/java/org/xbib/net/http/template/groovy/DefaultMarkupTemplate.java +++ b/net-http-template-groovy/src/main/java/org/xbib/net/http/template/groovy/DefaultMarkupTemplate.java @@ -115,16 +115,19 @@ public abstract class DefaultMarkupTemplate extends BaseTemplate { } public String url(String rel, boolean absolute) { - String webPrefix = application.getSettings().get("web.prefix", "/"); - if (!webPrefix.endsWith("/")) { - webPrefix = webPrefix + "/"; + String prefix = application.getPrefix(); + if (prefix == null) { + prefix = "/"; + } + if (!prefix.endsWith("/")) { + prefix = prefix + "/"; } if (request != null) { - URL url = request.getBaseURL().resolve(webPrefix).resolve(rel); + URL url = request.getBaseURL().resolve(prefix).resolve(rel); return absolute ? url.toExternalForm() : toOrigin(url); } else { - logger.log(Level.WARNING, "request is null, returning " + webPrefix + rel); - return webPrefix + rel; + logger.log(Level.WARNING, "request is null, returning " + prefix + rel); + return prefix + rel; } } diff --git a/net-http-template-groovy/src/main/java/org/xbib/net/http/template/groovy/GroovyMarkupTemplateHandler.java b/net-http-template-groovy/src/main/java/org/xbib/net/http/template/groovy/GroovyMarkupTemplateHandler.java index 14afb1c..dd414ae 100644 --- a/net-http-template-groovy/src/main/java/org/xbib/net/http/template/groovy/GroovyMarkupTemplateHandler.java +++ b/net-http-template-groovy/src/main/java/org/xbib/net/http/template/groovy/GroovyMarkupTemplateHandler.java @@ -72,7 +72,7 @@ public class GroovyMarkupTemplateHandler implements HttpHandler { } } - protected TemplateConfiguration createConfiguration(Class templateClass, + protected final TemplateConfiguration createConfiguration(Class templateClass, Locale locale, boolean autoEscape, boolean autoIndent, diff --git a/net-http/src/main/java/org/xbib/net/http/HttpHeaders.java b/net-http/src/main/java/org/xbib/net/http/HttpHeaders.java index 626c536..b601c32 100644 --- a/net-http/src/main/java/org/xbib/net/http/HttpHeaders.java +++ b/net-http/src/main/java/org/xbib/net/http/HttpHeaders.java @@ -7,8 +7,6 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; -/** - */ public class HttpHeaders implements Headers { private final List> list; diff --git a/net-http/src/main/java/org/xbib/net/http/cookie/DefaultCookie.java b/net-http/src/main/java/org/xbib/net/http/cookie/DefaultCookie.java index 31a92a0..fa7d0fa 100644 --- a/net-http/src/main/java/org/xbib/net/http/cookie/DefaultCookie.java +++ b/net-http/src/main/java/org/xbib/net/http/cookie/DefaultCookie.java @@ -35,7 +35,7 @@ public class DefaultCookie implements Cookie { throw new IllegalArgumentException("empty name"); } if (value != null) { - setValue(value); + this.value = Objects.requireNonNull(value, "value"); } }