Skip to content

Commit 5e79ef6

Browse files
willtaylorjvmlet
authored andcommitted
Fix @GRpcService annotation detection (#38)
* updating to latest spring-boot version * Security overrides for spring-activator endpoint * extracting GreeterService to expose bug in finding beans with annotation * fixing server runner to correctly identify beans with annotation
1 parent dc6c1e0 commit 5e79ef6

File tree

6 files changed

+40
-15
lines changed

6 files changed

+40
-15
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
apply plugin: 'idea'
22
buildscript {
33
ext {
4-
springBootVersion = '1.4.5.RELEASE'
4+
springBootVersion = '1.5.2.RELEASE'
55
grpcVersion = '1.2.0'
66
}
77
repositories {

grpc-spring-boot-starter-demo/src/main/java/org/lognet/springboot/grpc/demo/DemoApp.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.lognet.springboot.grpc.GRpcService;
77
import org.springframework.boot.SpringApplication;
88
import org.springframework.boot.autoconfigure.SpringBootApplication;
9+
import org.springframework.context.annotation.Bean;
910

1011
import io.grpc.examples.GreeterGrpc;
1112
import io.grpc.examples.GreeterOuterClass;
@@ -19,15 +20,10 @@
1920
@SpringBootApplication
2021
public class DemoApp {
2122

22-
@GRpcService(interceptors = { LogInterceptor.class })
23-
public static class GreeterService extends GreeterGrpc.GreeterImplBase {
24-
@Override
25-
public void sayHello(GreeterOuterClass.HelloRequest request, StreamObserver<GreeterOuterClass.HelloReply> responseObserver) {
26-
final GreeterOuterClass.HelloReply.Builder replyBuilder = GreeterOuterClass.HelloReply.newBuilder().setMessage("Hello " + request.getName());
27-
responseObserver.onNext(replyBuilder.build());
28-
responseObserver.onCompleted();
29-
}
30-
}
23+
@Bean
24+
public GreeterService greeterService() {
25+
return new GreeterService();
26+
}
3127

3228
@GRpcService
3329
public static class CalculatorService extends CalculatorGrpc.CalculatorImplBase{
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.lognet.springboot.grpc.demo;
2+
3+
import io.grpc.examples.CalculatorGrpc;
4+
import io.grpc.examples.CalculatorOuterClass;
5+
import org.lognet.springboot.grpc.GRpcService;
6+
import org.springframework.boot.SpringApplication;
7+
import org.springframework.boot.autoconfigure.SpringBootApplication;
8+
9+
import io.grpc.examples.GreeterGrpc;
10+
import io.grpc.examples.GreeterOuterClass;
11+
import io.grpc.stub.StreamObserver;
12+
13+
@GRpcService(interceptors = { LogInterceptor.class })
14+
public class GreeterService extends GreeterGrpc.GreeterImplBase {
15+
@Override
16+
public void sayHello(GreeterOuterClass.HelloRequest request, StreamObserver<GreeterOuterClass.HelloReply> responseObserver) {
17+
final GreeterOuterClass.HelloReply.Builder replyBuilder = GreeterOuterClass.HelloReply.newBuilder().setMessage("Hello " + request.getName());
18+
responseObserver.onNext(replyBuilder.build());
19+
responseObserver.onCompleted();
20+
}
21+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
security.basic.enabled=false
2+
management.security.enabled=false

grpc-spring-boot-starter-demo/src/test/java/org/lognet/springboot/grpc/DemoAppTestAop.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.junit.Test;
44
import org.junit.runner.RunWith;
55
import org.lognet.springboot.grpc.demo.DemoApp;
6+
import org.lognet.springboot.grpc.demo.GreeterService;
67
import org.springframework.aop.support.AopUtils;
78
import org.springframework.beans.factory.annotation.Autowired;
89
import org.springframework.boot.test.context.SpringBootTest;
@@ -26,7 +27,7 @@ public class DemoAppTestAop {
2627

2728

2829
@Autowired
29-
private DemoApp.GreeterService greeterService;
30+
private GreeterService greeterService;
3031

3132
@Autowired
3233
private DemoApp.CalculatorService calculatorService;

grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/GRpcServerRunner.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.lang.annotation.Annotation;
1515
import java.util.Collection;
1616
import java.util.List;
17+
import java.util.Map;
1718
import java.util.Optional;
1819
import java.util.stream.Collectors;
1920
import java.util.stream.Stream;
@@ -118,15 +119,19 @@ public void destroy() throws Exception {
118119

119120
private <T> Stream<String> getBeanNamesByTypeWithAnnotation(Class<? extends Annotation> annotationType, Class<T> beanType) throws Exception{
120121

121-
122122
return Stream.of(applicationContext.getBeanNamesForType(beanType))
123123
.filter(name->{
124-
BeanDefinition beanDefinition = applicationContext.getBeanFactory().getBeanDefinition(name);
125-
if( beanDefinition.getSource() instanceof StandardMethodMetadata) {
124+
final BeanDefinition beanDefinition = applicationContext.getBeanFactory().getBeanDefinition(name);
125+
final Map<String, Object> beansWithAnnotation = applicationContext.getBeansWithAnnotation(annotationType);
126+
127+
if ( !beansWithAnnotation.isEmpty() ) {
128+
return beansWithAnnotation.containsKey(name);
129+
} else if( beanDefinition.getSource() instanceof StandardMethodMetadata) {
126130
StandardMethodMetadata metadata = (StandardMethodMetadata) beanDefinition.getSource();
127131
return metadata.isAnnotated(annotationType.getName());
128132
}
129-
return null!= applicationContext.getBeanFactory().findAnnotationOnBean(name,annotationType);
133+
134+
return false;
130135
});
131136
}
132137

0 commit comments

Comments
 (0)