diff --git a/spring-cloud-function-compiler/src/main/java/org/springframework/cloud/function/compiler/config/FunctionProxyApplicationListener.java b/spring-cloud-function-compiler/src/main/java/org/springframework/cloud/function/compiler/config/FunctionProxyApplicationListener.java
index dc59431fa..8c22a38c4 100644
--- a/spring-cloud-function-compiler/src/main/java/org/springframework/cloud/function/compiler/config/FunctionProxyApplicationListener.java
+++ b/spring-cloud-function-compiler/src/main/java/org/springframework/cloud/function/compiler/config/FunctionProxyApplicationListener.java
@@ -20,6 +20,7 @@ import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.MutablePropertyValues;
+import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.config.ConstructorArgumentValues;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.RootBeanDefinition;
@@ -41,6 +42,8 @@ import org.springframework.context.support.StaticApplicationContext;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.util.Assert;
+import org.springframework.util.ClassUtils;
+import org.springframework.util.ReflectionUtils;
/**
* @author Mark Fisher
@@ -117,9 +120,7 @@ public class FunctionProxyApplicationListener
private void bind(ConfigurableApplicationContext context) {
ConfigurationPropertiesBindingPostProcessor post = new ConfigurationPropertiesBindingPostProcessor();
- post.setBeanFactory(new DefaultListableBeanFactory());
- post.setEnvironment(context.getEnvironment());
- post.setApplicationContext(new StaticApplicationContext());
+ maybeSetBeanFactory(context, post);
try {
post.afterPropertiesSet();
}
@@ -129,6 +130,23 @@ public class FunctionProxyApplicationListener
post.postProcessBeforeInitialization(this, getClass().getName());
}
+ private void maybeSetBeanFactory(ConfigurableApplicationContext context,
+ ConfigurationPropertiesBindingPostProcessor post) {
+ StaticApplicationContext other = new StaticApplicationContext();
+ other.setEnvironment(context.getEnvironment());
+ if (ReflectionUtils.findMethod(ConfigurationPropertiesBindingPostProcessor.class,
+ "setBeanFactory", BeanFactory.class) != null) {
+ post.setBeanFactory(new DefaultListableBeanFactory());
+ post.setEnvironment(context.getEnvironment());
+ }
+ else {
+ String name = "org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata";
+ other.registerSingleton(name, ClassUtils.resolveClassName(name, null));
+ other.setParent(context);
+ }
+ post.setApplicationContext(other);
+ }
+
private void registerByteCodeLoadingProxy(String name, String type, Resource resource,
DefaultListableBeanFactory beanFactory) {
Class> proxyClass = null;
diff --git a/spring-cloud-function-samples/function-sample-compiler/pom.xml b/spring-cloud-function-samples/function-sample-compiler/pom.xml
index 951703bdc..d19a15a35 100644
--- a/spring-cloud-function-samples/function-sample-compiler/pom.xml
+++ b/spring-cloud-function-samples/function-sample-compiler/pom.xml
@@ -13,14 +13,14 @@
org.springframework.boot
spring-boot-starter-parent
- 1.5.11.RELEASE
+ 2.0.2.RELEASE
1.8
1.0.0.BUILD-SNAPSHOT
- Ditmars.RELEASE
+ Elmhurst.RELEASE
3.1.2.RELEASE
1.0.10.RELEASE
diff --git a/spring-cloud-function-samples/function-sample-compiler/src/test/java/com/example/SampleCompiledConsumerTests.java b/spring-cloud-function-samples/function-sample-compiler/src/test/java/com/example/SampleCompiledConsumerTests.java
index 37dc3a411..aafbb9004 100644
--- a/spring-cloud-function-samples/function-sample-compiler/src/test/java/com/example/SampleCompiledConsumerTests.java
+++ b/spring-cloud-function-samples/function-sample-compiler/src/test/java/com/example/SampleCompiledConsumerTests.java
@@ -19,10 +19,10 @@ package com.example;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.springframework.boot.context.embedded.LocalServerPort;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.test.context.junit4.SpringRunner;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/spring-cloud-function-samples/function-sample-compiler/src/test/java/com/example/SampleCompiledFunctionTests.java b/spring-cloud-function-samples/function-sample-compiler/src/test/java/com/example/SampleCompiledFunctionTests.java
index 29435826c..06b48178d 100644
--- a/spring-cloud-function-samples/function-sample-compiler/src/test/java/com/example/SampleCompiledFunctionTests.java
+++ b/spring-cloud-function-samples/function-sample-compiler/src/test/java/com/example/SampleCompiledFunctionTests.java
@@ -19,10 +19,10 @@ package com.example;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.springframework.boot.context.embedded.LocalServerPort;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.test.context.junit4.SpringRunner;
import static org.assertj.core.api.Assertions.assertThat;
@@ -44,7 +44,7 @@ public class SampleCompiledFunctionTests {
public void lowercase() {
assertThat(new TestRestTemplate().postForObject(
"http://localhost:" + port + "/test", "it works", String.class))
- .isEqualTo("it works!!!");
+ .contains("it works!!!");
}
}