Skip to content

Commit

Permalink
Allow HttpConfiguration to Jetty server (#27)
Browse files Browse the repository at this point in the history
  • Loading branch information
ohadza committed Mar 16, 2021
1 parent b6ccf19 commit cfbd7c9
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 14 deletions.
4 changes: 4 additions & 0 deletions src/main/java/io/logz/guice/jersey/JerseyServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
import com.google.inject.servlet.GuiceServletContextListener;
import io.logz.guice.jersey.configuration.JerseyConfiguration;
import io.logz.guice.jersey.configuration.ServerConnectorConfiguration;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.HandlerCollection;
Expand All @@ -18,6 +20,7 @@
import org.slf4j.LoggerFactory;

import javax.servlet.DispatcherType;
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.function.Supplier;
Expand Down Expand Up @@ -57,6 +60,7 @@ private void configureServer() {
connector.setName(configuration.getName());
connector.setHost(configuration.getHost());
connector.setPort(configuration.getPort());
connector.setConnectionFactories(Collections.singleton(new HttpConnectionFactory(configuration.getHttpConfiguration())));
server.addConnector(connector);
});

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.logz.guice.jersey.configuration;

import org.eclipse.jetty.server.HttpConfiguration;
import org.glassfish.jersey.server.ResourceConfig;

import java.util.ArrayList;
Expand Down Expand Up @@ -34,17 +35,22 @@ public JerseyConfigurationBuilder withResourceConfig(ResourceConfig resourceConf
}

public JerseyConfigurationBuilder addPort(int port) {
connectors.add(new ServerConnectorConfiguration(port));
connectors.add(ServerConnectorConfiguration.builder(port).build());
return this;
}

public JerseyConfigurationBuilder addConnectorConfig(ServerConnectorConfiguration connectorConfig) {
connectors.add(connectorConfig);
return this;
}

public JerseyConfigurationBuilder addHost(String host, int port) {
connectors.add(new ServerConnectorConfiguration(host, port));
connectors.add(ServerConnectorConfiguration.builder(port).withHost(host).build());
return this;
}

public JerseyConfigurationBuilder addNamedHost(String name, String host, int port) {
connectors.add(new ServerConnectorConfiguration(name, host, port));
connectors.add(ServerConnectorConfiguration.builder(port).withName(name).withHost(host).build());
return this;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,21 @@
package io.logz.guice.jersey.configuration;

import org.eclipse.jetty.server.HttpConfiguration;

import java.util.Objects;

public class ServerConnectorConfiguration {

private static final String ALL_INTERFACES_HOST = "0.0.0.0";

private String name;
private String host;
private int port;
private HttpConfiguration httpConfiguration;

ServerConnectorConfiguration(int port) {
this(ALL_INTERFACES_HOST, port);
}

ServerConnectorConfiguration(String host, int port) {
this(String.format("%s-%s", host, port), host, port);
}

ServerConnectorConfiguration(String name, String host, int port) {
private ServerConnectorConfiguration(String name, String host, int port, HttpConfiguration httpConfiguration) {
this.name = Objects.requireNonNull(name);
this.host = Objects.requireNonNull(host);
this.port = validatePort(port);
this.httpConfiguration = Objects.requireNonNull(httpConfiguration);
}

public String getName() {
Expand All @@ -36,6 +30,10 @@ public int getPort() {
return port;
}

public HttpConfiguration getHttpConfiguration() {
return httpConfiguration;
}

private int validatePort(int port) {
if (port < 0) {
throw new RuntimeException("Port must be greater then zero");
Expand Down Expand Up @@ -64,4 +62,47 @@ public int hashCode() {
return result;
}

public static Builder builder(int port) {
return new Builder(port);
}

public static class Builder {

private static final String ALL_INTERFACES_HOST = "0.0.0.0";

private String name;
private String host;
private int port;
private HttpConfiguration httpConfiguration;

public Builder(int port) {
this.port = port;
this.host = ALL_INTERFACES_HOST;
this.name = null;
this.httpConfiguration = new HttpConfiguration();
}

public Builder withName(String name) {
this.name = name;
return this;
}

public Builder withHost(String host) {
this.host = host;
return this;
}

public Builder withHttpConfiguration(HttpConfiguration httpConfiguration) {
this.httpConfiguration = httpConfiguration;
return this;
}

public ServerConnectorConfiguration build() {
if (name == null) {
name = String.format("%s-%s", host, port);
}
return new ServerConnectorConfiguration(name, host, port, httpConfiguration);
}
}

}
23 changes: 23 additions & 0 deletions src/test/java/io/logz/guice/jersey/JerseyServerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@

import io.logz.guice.jersey.configuration.JerseyConfiguration;
import io.logz.guice.jersey.configuration.JerseyConfigurationBuilder;
import io.logz.guice.jersey.configuration.ServerConnectorConfiguration;
import io.logz.guice.jersey.resources.PingResource;
import io.logz.guice.jersey.resources.TestResource;
import io.logz.guice.jersey.resources.recursive.FooResource;
import io.logz.guice.jersey.supplier.JerseyServerSupplier;
import me.alexpanov.net.FreePortFinder;
import org.assertj.core.internal.bytebuddy.utility.RandomString;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.StatisticsHandler;
import org.glassfish.jersey.server.ResourceConfig;
Expand Down Expand Up @@ -34,6 +37,26 @@ public void testBasicConfiguration() throws Exception {
});
}

@Test
public void testMaxHeaderRequestSize() throws Exception {
int port = FreePortFinder.findFreeLocalPort();
HttpConfiguration httpConfiguration = new HttpConfiguration();
httpConfiguration.setRequestHeaderSize(16384);

ServerConnectorConfiguration connectorConfiguration =
ServerConnectorConfiguration.builder(port).withHttpConfiguration(httpConfiguration).build();

JerseyConfigurationBuilder connectorConfigurationBuilder = JerseyConfiguration.builder()
.addConnectorConfig(connectorConfiguration)
.addResourceClass(TestResource.class);

JerseyServerSupplier.createServerAndTest(connectorConfigurationBuilder, Server::new, target -> {
String response = target.path(TestResource.PATH).request()
.header("test", RandomString.make(16384 / Character.BYTES)).get().readEntity(String.class);
assertEquals(TestResource.MESSAGE, response);
}, port);
}

@Test
public void testPackageScanningConfiguration() throws Exception {
JerseyConfigurationBuilder configurationBuilder = JerseyConfiguration.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,14 @@ public static void createServerAndTest(JerseyConfigurationBuilder configurationB
Tester tester) throws Exception {
int port = FreePortFinder.findFreeLocalPort();
configurationBuilder.addPort(port);

createServerAndTest(configurationBuilder, jettyServerCreator, tester, port);
}

public static void createServerAndTest(JerseyConfigurationBuilder configurationBuilder,
JettyServerCreator jettyServerCreator,
Tester tester,
int port) throws Exception {
JerseyConfiguration configuration = configurationBuilder.build();

JerseyServer server = createServer(configuration, jettyServerCreator);
Expand Down

0 comments on commit cfbd7c9

Please sign in to comment.