diff --git a/spring-boot-test-autoconfigure/pom.xml b/spring-boot-test-autoconfigure/pom.xml
index 98afb6168a3..ed71b691e2a 100644
--- a/spring-boot-test-autoconfigure/pom.xml
+++ b/spring-boot-test-autoconfigure/pom.xml
@@ -128,6 +128,11 @@
true
+
+ org.springframework.boot
+ spring-boot-junit-runners
+ test
+
ch.qos.logback
logback-classic
diff --git a/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/client/RestClientExcludeFilter.java b/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/client/RestClientExcludeFilter.java
index 8e7b8dcd6c2..6b6c305fab6 100644
--- a/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/client/RestClientExcludeFilter.java
+++ b/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/client/RestClientExcludeFilter.java
@@ -21,8 +21,6 @@ import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;
-import com.fasterxml.jackson.databind.Module;
-
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.boot.jackson.JsonComponent;
import org.springframework.boot.test.autoconfigure.filter.AnnotationCustomizableTypeExcludeFilter;
@@ -30,6 +28,7 @@ import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.core.annotation.AnnotatedElementUtils;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
+import org.springframework.util.ClassUtils;
/**
* {@link TypeExcludeFilter} for {@link RestClientTest @RestClientTest}.
@@ -38,12 +37,24 @@ import org.springframework.core.type.classreading.MetadataReaderFactory;
*/
class RestClientExcludeFilter extends AnnotationCustomizableTypeExcludeFilter {
+ private static final String DATABIND_MODULE_CLASS_NAME = "com.fasterxml.jackson.databind.Module";
+
private static final Set> DEFAULT_INCLUDES;
static {
Set> includes = new LinkedHashSet>();
- includes.add(Module.class);
- includes.add(JsonComponent.class);
+ if (ClassUtils.isPresent("com.fasterxml.jackson.databind.Module",
+ RestClientExcludeFilter.class.getClassLoader())) {
+ try {
+ includes.add(Class.forName(DATABIND_MODULE_CLASS_NAME, true,
+ RestClientExcludeFilter.class.getClassLoader()));
+ }
+ catch (ClassNotFoundException ex) {
+ throw new IllegalStateException(
+ "Failed to load " + DATABIND_MODULE_CLASS_NAME, ex);
+ }
+ includes.add(JsonComponent.class);
+ }
DEFAULT_INCLUDES = Collections.unmodifiableSet(includes);
}
diff --git a/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/client/RestClientTestWithoutJacksonIntegrationTests.java b/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/client/RestClientTestWithoutJacksonIntegrationTests.java
new file mode 100644
index 00000000000..4937b8ac2a2
--- /dev/null
+++ b/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/client/RestClientTestWithoutJacksonIntegrationTests.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2012-2016 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.test.autoconfigure.web.client;
+
+import org.junit.Test;
+import org.junit.runner.JUnitCore;
+import org.junit.runner.Result;
+import org.junit.runner.RunWith;
+
+import org.springframework.boot.junit.runner.classpath.ClassPathExclusions;
+import org.springframework.boot.junit.runner.classpath.ModifiedClassPathRunner;
+import org.springframework.util.ClassUtils;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Tests for {@link RestClientTest} without Jackson.
+ *
+ * @author Andy Wilkinson
+ */
+@RunWith(ModifiedClassPathRunner.class)
+@ClassPathExclusions("jackson-*.jar")
+public class RestClientTestWithoutJacksonIntegrationTests {
+
+ @Test
+ public void restClientTestCanBeUsedWhenJacksonIsNotOnTheClassPath() {
+ assertThat(ClassUtils.isPresent("com.fasterxml.jackson.databind.Module",
+ getClass().getClassLoader())).isFalse();
+ Result result = JUnitCore
+ .runClasses(RestClientTestWithComponentIntegrationTests.class);
+ assertThat(result.getFailureCount()).isEqualTo(0);
+ assertThat(result.getRunCount()).isGreaterThan(0);
+ }
+
+}