GH-932 Fix registration of AWSTypesMessageConverter for functional spring applications

Resolves #932
This commit is contained in:
Oleg Zhurakousky
2022-11-10 12:13:57 +01:00
parent b33a106c48
commit 13c79f5283
10 changed files with 55 additions and 244 deletions

View File

@@ -16,10 +16,13 @@
package org.springframework.cloud.function.adapter.aws;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cloud.function.json.JacksonMapper;
import org.springframework.cloud.function.json.JsonMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.converter.MessageConverter;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.util.CollectionUtils;
/**
*
@@ -27,11 +30,18 @@ import org.springframework.messaging.converter.MessageConverter;
* @since 3.2
*
*/
@Configuration(proxyBeanMethods = false)
public class AWSCompanionAutoConfiguration {
public class AWSCompanionAutoConfiguration implements ApplicationContextInitializer<GenericApplicationContext> {
@Bean
public MessageConverter awsTypesConverter(JsonMapper jsonMapper) {
return new AWSTypesMessageConverter(jsonMapper);
@Override
public void initialize(GenericApplicationContext applicationContext) {
applicationContext.registerBean("awsTypesMessageConverter", AWSTypesMessageConverter.class,
() -> {
if (CollectionUtils.isEmpty(applicationContext.getBeansOfType(JsonMapper.class).values())) {
return new AWSTypesMessageConverter(new JacksonMapper(new ObjectMapper()));
}
else {
return new AWSTypesMessageConverter(applicationContext.getBean(JsonMapper.class));
}
});
}
}

View File

@@ -55,11 +55,11 @@ class AWSTypesMessageConverter extends JsonMessageConverter {
@Override
protected boolean canConvertFrom(Message<?> message, @Nullable Class<?> targetClass) {
if (message.getHeaders().containsKey(AWSLambdaUtils.AWS_API_GATEWAY) && ((boolean) message.getHeaders().get(AWSLambdaUtils.AWS_API_GATEWAY))) {
return true;
if (message.getHeaders().containsKey(AWSLambdaUtils.AWS_API_GATEWAY)) {
return ((boolean) message.getHeaders().get(AWSLambdaUtils.AWS_API_GATEWAY));
}
if (message.getHeaders().containsKey(AWSLambdaUtils.AWS_EVENT) && ((boolean) message.getHeaders().get(AWSLambdaUtils.AWS_EVENT))) {
return true;
if (message.getHeaders().containsKey(AWSLambdaUtils.AWS_EVENT)) {
return ((boolean) message.getHeaders().get(AWSLambdaUtils.AWS_EVENT));
}
return false;
}

View File

@@ -1,4 +1,4 @@
org.springframework.context.ApplicationContextInitializer=\
org.springframework.cloud.function.adapter.aws.CustomRuntimeInitializer
org.springframework.cloud.function.adapter.aws.CustomRuntimeInitializer,org.springframework.cloud.function.adapter.aws.AWSCompanionAutoConfiguration
org.springframework.boot.env.EnvironmentPostProcessor=\
org.springframework.cloud.function.adapter.aws.CustomRuntimeEnvironmentPostProcessor