Oleg Zhurakousky
2022-06-07 16:51:51 +02:00
parent d3643f65db
commit 2d32f8d8ac
2 changed files with 28 additions and 3 deletions

View File

@@ -352,10 +352,15 @@ public final class FunctionTypeUtils {
type = getImmediateGenericType(type, 0); type = getImmediateGenericType(type, 0);
} }
if (type instanceof ParameterizedType && !Message.class.isAssignableFrom(TypeResolver.resolveRawClass(type, null))) { Class<?> resolveRawClass = FunctionTypeUtils.getRawType(type);
if (type instanceof ParameterizedType && !Message.class.isAssignableFrom(resolveRawClass)) {
type = getImmediateGenericType(type, 0); type = getImmediateGenericType(type, 0);
} }
return Message.class.isAssignableFrom(TypeResolver.resolveRawClass(type, null)); resolveRawClass = FunctionTypeUtils.getRawType(type);
if (resolveRawClass == null) {
return false;
}
return Message.class.isAssignableFrom(resolveRawClass);
} }
/** /**

View File

@@ -17,10 +17,13 @@
package org.springframework.cloud.function.context.catalog; package org.springframework.cloud.function.context.catalog;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType; import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier; import java.util.function.Supplier;
@@ -32,8 +35,10 @@ import reactor.util.function.Tuple2;
import reactor.util.function.Tuple3; import reactor.util.function.Tuple3;
import org.springframework.cloud.function.context.FunctionType; import org.springframework.cloud.function.context.FunctionType;
import org.springframework.core.MethodParameter;
import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.ParameterizedTypeReference;
import org.springframework.messaging.Message; import org.springframework.messaging.Message;
import org.springframework.util.ReflectionUtils;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@@ -43,7 +48,7 @@ import static org.assertj.core.api.Assertions.assertThat;
* *
*/ */
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class FunctionTypeUtilsTests { public class FunctionTypeUtilsTests<T> {
@Test @Test
public void testFunctionTypeFrom() throws Exception { public void testFunctionTypeFrom() throws Exception {
@@ -148,6 +153,21 @@ public class FunctionTypeUtilsTests {
assertThat(FunctionTypeUtils.isTypeCollection(new ParameterizedTypeReference<Flux<Message<List<String>>>>() { }.getType())).isFalse(); assertThat(FunctionTypeUtils.isTypeCollection(new ParameterizedTypeReference<Flux<Message<List<String>>>>() { }.getType())).isFalse();
} }
@Test
public void testNoNpeFromIsMessage() {
FunctionTypeUtilsTests<Date> testService = new FunctionTypeUtilsTests<>();
Method methodUnderTest =
ReflectionUtils.findMethod(testService.getClass(), "notAMessageMethod", AtomicReference.class);
MethodParameter methodParameter = MethodParameter.forExecutable(methodUnderTest, 0);
assertThat(FunctionTypeUtils.isMessage(methodParameter.getGenericParameterType())).isFalse();
}
void notAMessageMethod(AtomicReference<T> payload) {
}
private static Function<String, Integer> function() { private static Function<String, Integer> function() {
return null; return null;
} }