SimpleStubFactory has to be more precise about supports()
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package org.springframework.grpc.sample;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
|
||||
import org.junit.jupiter.api.Nested;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -8,9 +9,11 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.context.TestConfiguration;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.grpc.client.BlockingStubFactory;
|
||||
import org.springframework.grpc.client.BlockingV2StubFactory;
|
||||
import org.springframework.grpc.client.FutureStubFactory;
|
||||
import org.springframework.grpc.client.ImportGrpcClients;
|
||||
import org.springframework.grpc.client.SimpleStubFactory;
|
||||
import org.springframework.grpc.sample.proto.SimpleGrpc;
|
||||
import org.springframework.grpc.test.AutoConfigureInProcessTransport;
|
||||
|
||||
@@ -83,7 +86,7 @@ public class GrpcClientApplicationTests {
|
||||
@Nested
|
||||
@SpringBootTest(properties = "spring.grpc.client.default-channel.address=0.0.0.0:9090")
|
||||
@AutoConfigureInProcessTransport
|
||||
class BLockingV2AutowiredClients {
|
||||
class BlockingV2AutowiredClients {
|
||||
|
||||
@Autowired
|
||||
private ApplicationContext context;
|
||||
@@ -130,4 +133,50 @@ public class GrpcClientApplicationTests {
|
||||
|
||||
}
|
||||
|
||||
@Nested
|
||||
@SpringBootTest(properties = "spring.grpc.client.default-channel.address=0.0.0.0:9090")
|
||||
@AutoConfigureInProcessTransport
|
||||
class AllStubAutowiredClients {
|
||||
|
||||
@Autowired
|
||||
private ApplicationContext context;
|
||||
|
||||
@Autowired
|
||||
private SimpleGrpc.SimpleBlockingStub simpleBlockingStub;
|
||||
|
||||
@Autowired
|
||||
private SimpleGrpc.SimpleBlockingV2Stub simpleBlockingV2Stub;
|
||||
|
||||
@Autowired
|
||||
private SimpleGrpc.SimpleFutureStub simpleFutureStub;
|
||||
|
||||
@Autowired
|
||||
private SimpleGrpc.SimpleStub simpleStub;
|
||||
|
||||
@Test
|
||||
void stubsCreatedWithRightName() {
|
||||
assertNotNull(context.getBeansOfType(SimpleGrpc.SimpleBlockingStub.class).get("simpleBlockingStub"));
|
||||
assertNotNull(context.getBeansOfType(SimpleGrpc.SimpleBlockingV2Stub.class).get("simpleBlockingV2Stub"));
|
||||
assertNotNull(context.getBeansOfType(SimpleGrpc.SimpleFutureStub.class).get("simpleFutureStub"));
|
||||
assertNotNull(context.getBeansOfType(SimpleGrpc.SimpleStub.class).get("simpleStub"));
|
||||
assertThat(context.getBeanNamesForType(AbstractStub.class)).hasSize(4);
|
||||
|
||||
assertNotNull(simpleBlockingStub);
|
||||
assertNotNull(simpleBlockingV2Stub);
|
||||
assertNotNull(simpleFutureStub);
|
||||
assertNotNull(simpleStub);
|
||||
}
|
||||
|
||||
@TestConfiguration
|
||||
@ImportGrpcClients.Container(value = {
|
||||
@ImportGrpcClients(basePackageClasses = SimpleGrpc.class, factory = BlockingStubFactory.class),
|
||||
@ImportGrpcClients(basePackageClasses = SimpleGrpc.class, factory = BlockingV2StubFactory.class),
|
||||
@ImportGrpcClients(basePackageClasses = SimpleGrpc.class, factory = FutureStubFactory.class),
|
||||
@ImportGrpcClients(basePackageClasses = SimpleGrpc.class, factory = SimpleStubFactory.class), })
|
||||
static class TestConfig {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package org.springframework.grpc.client;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
|
||||
import io.grpc.stub.AbstractStub;
|
||||
@@ -23,8 +25,12 @@ public class SimpleStubFactory extends AbstractStubFactory<AbstractStub<?>> {
|
||||
|
||||
public static boolean supports(Class<?> type) {
|
||||
Class<?> factory = type.getEnclosingClass();
|
||||
return AbstractStubFactory.supports(AbstractStub.class, type) && factory != null
|
||||
&& ReflectionUtils.findMethod(factory, "newStub", (Class<?>[]) null) != null;
|
||||
return AbstractStubFactory.supports(AbstractStub.class, type) && factory != null && hasMethod(factory, type);
|
||||
}
|
||||
|
||||
private static boolean hasMethod(Class<?> factory, Class<?> type) {
|
||||
Method method = ReflectionUtils.findMethod(factory, "newStub", (Class<?>[]) null);
|
||||
return method != null && method.getReturnType().isAssignableFrom(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user