diff --git a/spring-cloud-contract-wiremock/pom.xml b/spring-cloud-contract-wiremock/pom.xml
index 8ecbb4c9af..638136d8b0 100644
--- a/spring-cloud-contract-wiremock/pom.xml
+++ b/spring-cloud-contract-wiremock/pom.xml
@@ -35,6 +35,11 @@
spring-boot-starter-undertow
true
+
+ org.springframework.boot
+ spring-boot-starter-jetty
+ true
+
org.springframework
spring-web
diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/SpringBootHttpServerFactory.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/SpringBootHttpServerFactory.java
index 2ccf160be9..b2e692bff4 100644
--- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/SpringBootHttpServerFactory.java
+++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/SpringBootHttpServerFactory.java
@@ -19,6 +19,10 @@ package org.springframework.cloud.contract.wiremock;
import javax.servlet.ServletContext;
import org.apache.catalina.connector.Connector;
+import org.eclipse.jetty.server.ConnectionFactory;
+import org.eclipse.jetty.server.HttpConfiguration;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanPostProcessor;
@@ -37,11 +41,14 @@ import org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfigurat
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.Ssl;
+import org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory;
+import org.springframework.boot.context.embedded.jetty.JettyServerCustomizer;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.undertow.UndertowBuilderCustomizer;
import org.springframework.boot.context.embedded.undertow.UndertowEmbeddedServletContainerFactory;
import org.springframework.boot.context.event.ApplicationPreparedEvent;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.cloud.contract.wiremock.ContainerConfiguration.JettyContainerConfiguration;
import org.springframework.cloud.contract.wiremock.ContainerConfiguration.TomcatContainerConfiguration;
import org.springframework.cloud.contract.wiremock.ContainerConfiguration.UndertowContainerConfiguration;
import org.springframework.context.ApplicationListener;
@@ -190,9 +197,10 @@ class SpringBootHttpServer
}
@Configuration
-@Import({ TomcatContainerConfiguration.class, UndertowContainerConfiguration.class, ServerPropertiesAutoConfiguration.class, BeanPostProcessorsRegistrar.class,
- ConfigurationPropertiesAutoConfiguration.class, JacksonAutoConfiguration.class,
- HttpMessageConvertersAutoConfiguration.class,
+@Import({ TomcatContainerConfiguration.class, JettyContainerConfiguration.class,
+ UndertowContainerConfiguration.class, ServerPropertiesAutoConfiguration.class,
+ BeanPostProcessorsRegistrar.class, ConfigurationPropertiesAutoConfiguration.class,
+ JacksonAutoConfiguration.class, HttpMessageConvertersAutoConfiguration.class,
PropertyPlaceholderAutoConfiguration.class })
class WiremockServerConfiguration {
@@ -245,7 +253,7 @@ class ContainerConfiguration {
@Configuration
@ConditionalOnMissingBean(EmbeddedServletContainerFactory.class)
- @ConditionalOnClass({TomcatEmbeddedServletContainerFactory.class, Connector.class})
+ @ConditionalOnClass({ TomcatEmbeddedServletContainerFactory.class, Connector.class })
static class TomcatContainerConfiguration {
@Autowired
private Options options;
@@ -270,7 +278,7 @@ class ContainerConfiguration {
@Configuration
@ConditionalOnMissingBean(EmbeddedServletContainerFactory.class)
- @ConditionalOnClass({UndertowEmbeddedServletContainerFactory.class, Builder.class})
+ @ConditionalOnClass({ UndertowEmbeddedServletContainerFactory.class, Builder.class })
static class UndertowContainerConfiguration {
@Autowired
private Options options;
@@ -290,4 +298,42 @@ class ContainerConfiguration {
}
}
+ @Configuration
+ @ConditionalOnMissingBean(EmbeddedServletContainerFactory.class)
+ @ConditionalOnClass({ JettyEmbeddedServletContainerFactory.class,
+ ServerConnector.class })
+ static class JettyContainerConfiguration {
+ @Autowired
+ private Options options;
+
+ @Bean
+ public EmbeddedServletContainerFactory servletContainer() {
+ final JettyEmbeddedServletContainerFactory jetty = new JettyEmbeddedServletContainerFactory();
+ if (this.options.httpsSettings().enabled()) {
+ jetty.addServerCustomizers(new JettyServerCustomizer() {
+ @Override
+ public void customize(Server server) {
+ server.addConnector(createStandardConnector(server));
+ }
+ });
+ }
+ return jetty;
+ }
+
+ private org.eclipse.jetty.server.Connector createStandardConnector(
+ Server server) {
+ ServerConnector connector = new ServerConnector(server, -1, -1);
+ connector.setHost("localhost");
+ connector.setPort(options.portNumber());
+ for (ConnectionFactory connectionFactory : connector
+ .getConnectionFactories()) {
+ if (connectionFactory instanceof HttpConfiguration.ConnectionFactory) {
+ ((HttpConfiguration.ConnectionFactory) connectionFactory)
+ .getHttpConfiguration().setSendServerVersion(false);
+ }
+ }
+ return connector;
+ }
+ }
+
}