diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootStreamHandler.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootStreamHandler.java index c33f14158..3230e1e7f 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootStreamHandler.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootStreamHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2017 the original author or authors. + * Copyright 2017-1018 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. @@ -28,18 +28,18 @@ import com.amazonaws.services.lambda.runtime.RequestStreamHandler; import com.fasterxml.jackson.databind.ObjectMapper; import org.reactivestreams.Publisher; - import org.springframework.beans.factory.annotation.Autowired; import reactor.core.publisher.Flux; /** * @author Dave Syer + * @author Oleg Zhurakousky */ public class SpringBootStreamHandler extends SpringFunctionInitializer implements RequestStreamHandler { - @Autowired + @Autowired(required=false) private ObjectMapper mapper; public SpringBootStreamHandler() { @@ -50,6 +50,14 @@ public class SpringBootStreamHandler extends SpringFunctionInitializer super(configurationClass); } + @Override + protected void initialize() { + super.initialize(); + if (this.mapper == null) { + this.mapper = new ObjectMapper(); + } + } + @Override public void handleRequest(InputStream input, OutputStream output, Context context) throws IOException { diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/SpringBootStreamHandlerTests.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/SpringBootStreamHandlerTests.java index 58cc82553..4027e5c98 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/SpringBootStreamHandlerTests.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/SpringBootStreamHandlerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2017 the original author or authors. + * Copyright 2016-2018 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. @@ -32,15 +32,25 @@ import static org.assertj.core.api.Assertions.assertThat; /** * @author Dave Syer - * + * @author Oleg Zhurakousky */ public class SpringBootStreamHandlerTests { private SpringBootStreamHandler handler; @Test - public void functionBean() throws Exception { - handler = new SpringBootStreamHandler(FunctionConfig.class); + public void functionBeanWithJacksonConfig() throws Exception { + handler = new SpringBootStreamHandler(FunctionConfigWithJackson.class); + handler.initialize(); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + handler.handleRequest(new ByteArrayInputStream("{\"value\":\"foo\"}".getBytes()), + output, null); + assertThat(output.toString()).isEqualTo("{\"value\":\"FOO\"}"); + } + + @Test + public void functionBeanWithoutJacksonConfig() throws Exception { + handler = new SpringBootStreamHandler(FunctionConfigWithoutJackson.class); handler.initialize(); ByteArrayOutputStream output = new ByteArrayOutputStream(); handler.handleRequest(new ByteArrayInputStream("{\"value\":\"foo\"}".getBytes()), @@ -51,7 +61,16 @@ public class SpringBootStreamHandlerTests { @Configuration @Import({ ContextFunctionCatalogAutoConfiguration.class, JacksonAutoConfiguration.class }) - protected static class FunctionConfig { + protected static class FunctionConfigWithJackson { + @Bean + public Function function() { + return foo -> new Bar(foo.getValue().toUpperCase()); + } + } + + @Configuration + @Import({ ContextFunctionCatalogAutoConfiguration.class}) + protected static class FunctionConfigWithoutJackson { @Bean public Function function() { return foo -> new Bar(foo.getValue().toUpperCase());