GH-578 Fix FunctionRegistration lookup
The root of the issue was in implementation of equals() and hashCode() of FunctionInvocationWrapper Resolves #578
This commit is contained in:
@@ -20,7 +20,6 @@ import java.util.Collections;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.springframework.cloud.function.context.FunctionRegistration;
|
import org.springframework.cloud.function.context.FunctionRegistration;
|
||||||
import org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry.FunctionInvocationWrapper;
|
|
||||||
import org.springframework.cloud.function.context.config.RoutingFunction;
|
import org.springframework.cloud.function.context.config.RoutingFunction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -33,9 +32,12 @@ public interface FunctionInspector {
|
|||||||
|
|
||||||
default boolean isMessage(Object function) {
|
default boolean isMessage(Object function) {
|
||||||
FunctionRegistration<?> registration = getRegistration(function);
|
FunctionRegistration<?> registration = getRegistration(function);
|
||||||
if (registration != null && registration.getTarget() instanceof FunctionInvocationWrapper
|
// if (registration != null && registration.getTarget() instanceof FunctionInvocationWrapper
|
||||||
&& ((FunctionInvocationWrapper) registration.getTarget()).getTarget() instanceof RoutingFunction) {
|
// && ((FunctionInvocationWrapper) registration.getTarget()).getTarget() instanceof RoutingFunction) {
|
||||||
// we always want to give routing function as much information as possible
|
// // we always want to give routing function as much information as possible
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
if (registration != null && registration.getTarget() instanceof RoutingFunction) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return registration == null ? false : registration.getType().isMessage();
|
return registration == null ? false : registration.getType().isMessage();
|
||||||
|
|||||||
@@ -427,6 +427,16 @@ public class SimpleFunctionRegistry implements FunctionRegistry, FunctionInspect
|
|||||||
this.headersField.setAccessible(true);
|
this.headersField.setAccessible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return this.target.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
return this.target.equals(o);
|
||||||
|
}
|
||||||
|
|
||||||
public String getFunctionDefinition() {
|
public String getFunctionDefinition() {
|
||||||
return this.functionDefinition;
|
return this.functionDefinition;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -92,6 +92,12 @@ public class RoutingFunctionTests {
|
|||||||
.contentType(MediaType.TEXT_PLAIN)
|
.contentType(MediaType.TEXT_PLAIN)
|
||||||
.header("spring.cloud.function.definition", "echo")
|
.header("spring.cloud.function.definition", "echo")
|
||||||
.body("{\"name\":\"Bob\",\"age\":25}"), String.class);
|
.body("{\"name\":\"Bob\",\"age\":25}"), String.class);
|
||||||
|
postForEntity = this.rest
|
||||||
|
.exchange(RequestEntity.post(new URI("/functions/" + RoutingFunction.FUNCTION_NAME))
|
||||||
|
.contentType(MediaType.TEXT_PLAIN)
|
||||||
|
.header("spring.cloud.function.definition", "echo")
|
||||||
|
.body("{\"name\":\"Bob\",\"age\":25}"), String.class);
|
||||||
|
|
||||||
assertThat(postForEntity.getBody()).isEqualTo("{\"name\":\"Bob\",\"age\":25}");
|
assertThat(postForEntity.getBody()).isEqualTo("{\"name\":\"Bob\",\"age\":25}");
|
||||||
assertThat(postForEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
assertThat(postForEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user