Removed unused type converters, cleaned up tests
This commit is contained in:
@@ -18,6 +18,7 @@ import org.springframework.messaging.support.MessageBuilder;
|
|||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.springframework.util.MimeType;
|
import org.springframework.util.MimeType;
|
||||||
|
import org.springframework.util.ObjectUtils;
|
||||||
|
|
||||||
import reactor.core.publisher.Flux;
|
import reactor.core.publisher.Flux;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
@@ -94,6 +95,9 @@ class FunctionTypeConversionHelper {
|
|||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
Object convertOutputIfNecessary(Object output, MimeType... acceptedOutputTypes) {
|
Object convertOutputIfNecessary(Object output, MimeType... acceptedOutputTypes) {
|
||||||
|
if (ObjectUtils.isEmpty(acceptedOutputTypes)) {
|
||||||
|
return output;
|
||||||
|
}
|
||||||
List<Object> convertedResults = new ArrayList<Object>();
|
List<Object> convertedResults = new ArrayList<Object>();
|
||||||
if (output instanceof Tuple2) {
|
if (output instanceof Tuple2) {
|
||||||
convertedResults.add(this.doConvert(((Tuple2)output).getT1(), acceptedOutputTypes[0]));
|
convertedResults.add(this.doConvert(((Tuple2)output).getT1(), acceptedOutputTypes[0]));
|
||||||
@@ -118,9 +122,7 @@ class FunctionTypeConversionHelper {
|
|||||||
convertedResults.add(this.doConvert(((Tuple8)output).getT8(), acceptedOutputTypes[7]));
|
convertedResults.add(this.doConvert(((Tuple8)output).getT8(), acceptedOutputTypes[7]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!CollectionUtils.isEmpty(convertedResults)) {
|
output = Tuples.fromArray(convertedResults.toArray());
|
||||||
output = Tuples.fromArray(convertedResults.toArray());
|
|
||||||
}
|
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -315,10 +315,7 @@ public class LazyFunctionRegistry implements FunctionRegistry, FunctionInspector
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ====
|
result = this.functionTypeConversionHelper.convertOutputIfNecessary(result, this.acceptedOutputTypes);
|
||||||
if (!ObjectUtils.isEmpty(this.acceptedOutputTypes)) {
|
|
||||||
result = this.functionTypeConversionHelper.convertOutputIfNecessary(result, this.acceptedOutputTypes);
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.wrapOutputToReactiveIfNecessary(result);
|
return this.wrapOutputToReactiveIfNecessary(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,11 +17,9 @@
|
|||||||
package org.springframework.cloud.function.context.config;
|
package org.springframework.cloud.function.context.config;
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
@@ -66,9 +64,6 @@ import org.springframework.context.annotation.Configuration;
|
|||||||
import org.springframework.context.annotation.FilterType;
|
import org.springframework.context.annotation.FilterType;
|
||||||
import org.springframework.core.annotation.AnnotatedElementUtils;
|
import org.springframework.core.annotation.AnnotatedElementUtils;
|
||||||
import org.springframework.core.convert.ConversionService;
|
import org.springframework.core.convert.ConversionService;
|
||||||
import org.springframework.core.convert.TypeDescriptor;
|
|
||||||
import org.springframework.core.convert.converter.ConditionalGenericConverter;
|
|
||||||
import org.springframework.core.convert.support.ConfigurableConversionService;
|
|
||||||
import org.springframework.core.convert.support.DefaultConversionService;
|
import org.springframework.core.convert.support.DefaultConversionService;
|
||||||
import org.springframework.core.type.StandardMethodMetadata;
|
import org.springframework.core.type.StandardMethodMetadata;
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
@@ -77,9 +72,7 @@ import org.springframework.messaging.converter.CompositeMessageConverter;
|
|||||||
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
|
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
|
||||||
import org.springframework.messaging.converter.MessageConverter;
|
import org.springframework.messaging.converter.MessageConverter;
|
||||||
import org.springframework.messaging.converter.StringMessageConverter;
|
import org.springframework.messaging.converter.StringMessageConverter;
|
||||||
import org.springframework.util.ClassUtils;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
@@ -116,94 +109,9 @@ public class ContextFunctionCatalogAutoConfiguration {
|
|||||||
messageConverters.add(new StringMessageConverter());
|
messageConverters.add(new StringMessageConverter());
|
||||||
messageConverter = new CompositeMessageConverter(messageConverters);
|
messageConverter = new CompositeMessageConverter(messageConverters);
|
||||||
}
|
}
|
||||||
if (conversionService != null) {
|
|
||||||
((ConfigurableConversionService)conversionService).addConverter(new MyConverter());
|
|
||||||
((ConfigurableConversionService)conversionService).addConverter(new ObjectToByteArrayConverter());
|
|
||||||
}
|
|
||||||
return new LazyFunctionRegistry(conversionService, messageConverter);
|
return new LazyFunctionRegistry(conversionService, messageConverter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class MyConverter implements ConditionalGenericConverter {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<ConvertiblePair> getConvertibleTypes() {
|
|
||||||
return Collections.singleton(new ConvertiblePair(byte[].class, String.class));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
|
|
||||||
return new String(((byte[])source), StandardCharsets.UTF_8);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
|
||||||
if (ClassUtils.isAssignable(sourceType.getType(), byte[].class) && ClassUtils.isAssignable(targetType.getType(), String.class)) {
|
|
||||||
// maybe
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class ObjectToByteArrayConverter implements ConditionalGenericConverter {
|
|
||||||
|
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<ConvertiblePair> getConvertibleTypes() {
|
|
||||||
return Collections.singleton(new ConvertiblePair(Object.class, byte[].class));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
|
|
||||||
try {
|
|
||||||
byte[] result = mapper.writeValueAsBytes(source);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
throw new IllegalStateException("Failwd to convert " + source + " to byte[]", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
|
||||||
if (ClassUtils.isAssignable(Object.class, sourceType.getType()) && ClassUtils.isAssignable(byte[].class, targetType.getType())) {
|
|
||||||
// maybe
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Person {
|
|
||||||
private String name;
|
|
||||||
private int id;
|
|
||||||
public Person() {
|
|
||||||
|
|
||||||
}
|
|
||||||
public Person(String name, int id) {
|
|
||||||
this.name = name;
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
public int getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
public void setId(int id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
public String toString() {
|
|
||||||
return "Person: " + name + "/" + id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean(RoutingFunction.FUNCTION_NAME)
|
@Bean(RoutingFunction.FUNCTION_NAME)
|
||||||
@ConditionalOnProperty(name = "spring.cloud.function.routing.enabled", havingValue = "true")
|
@ConditionalOnProperty(name = "spring.cloud.function.routing.enabled", havingValue = "true")
|
||||||
RoutingFunction gateway(FunctionCatalog functionCatalog, FunctionInspector functionInspector) {
|
RoutingFunction gateway(FunctionCatalog functionCatalog, FunctionInspector functionInspector) {
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
package org.springframework.cloud.function.context.catalog;
|
package org.springframework.cloud.function.context.catalog;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.IntBuffer;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -40,6 +39,8 @@ import org.springframework.messaging.converter.MessageConverter;
|
|||||||
import org.springframework.messaging.support.MessageBuilder;
|
import org.springframework.messaging.support.MessageBuilder;
|
||||||
import org.springframework.util.MimeTypeUtils;
|
import org.springframework.util.MimeTypeUtils;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
|
||||||
import reactor.core.publisher.Flux;
|
import reactor.core.publisher.Flux;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
import reactor.util.function.Tuple2;
|
import reactor.util.function.Tuple2;
|
||||||
@@ -250,10 +251,21 @@ public class LazyFunctionRegistryMultiInOutTests {
|
|||||||
MessageBuilder.withPayload(two.array()).setHeader(MessageHeaders.CONTENT_TYPE, "octet-stream/integer").build());
|
MessageBuilder.withPayload(two.array()).setHeader(MessageHeaders.CONTENT_TYPE, "octet-stream/integer").build());
|
||||||
|
|
||||||
Tuple2<Flux<Message<byte[]>>, Mono<Message<byte[]>>> result = multiTuMulti.apply(Tuples.of(firstFlux, secondFlux, thirdFlux));
|
Tuple2<Flux<Message<byte[]>>, Mono<Message<byte[]>>> result = multiTuMulti.apply(Tuples.of(firstFlux, secondFlux, thirdFlux));
|
||||||
result.getT1().subscribe(v -> System.out.println("=> 1: " + v));
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
result.getT2().subscribe(v -> System.out.println("=> 2: " + v));
|
result.getT1().subscribe(v -> {
|
||||||
|
try {
|
||||||
//Tuple2<Object, Object> d = multiTuMulti.apply(Tuples.of(firstFlux, secondFlux, thirdFlux));
|
System.out.println("=> 1: " + mapper.readValue(v.getPayload(), Person.class));
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
result.getT2().subscribe(v -> {
|
||||||
|
try {
|
||||||
|
System.out.println("=> 2: " + mapper.readValue(v.getPayload(), Long.class));
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user