title: gRpc, client getting io.grpc.StatusRuntimeException: UNIMPLEMENTED: Method even when the message is received and deserialized by the server
body: <p>I'm new to gRpc, I'm trying to use it between a Java 11(Spring Boot 2) server  and a Java 8 (Spring Boot 1.5) client using gRpc 1.27.1 and protobuf 3.11.</p>
  <p>Here is my setup:</p>
  <p>I have data model library with just 1 proto definition file and maven files to generate java source code that is shared between the client and the server</p>
  <p>The <em>relevant</em> parts of the <code>pom.xml</code>:</p>
  <pre><code>
    &lt;properties&gt;
      &lt;maven.compiler.source&gt;1.8&lt;/maven.compiler.source&gt;
      &lt;maven.compiler.target&gt;1.8&lt;/maven.compiler.target&gt;
      &lt;grpcVersion&gt;1.27.1&lt;/grpcVersion&gt;
      &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;
    &lt;/properties&gt;
  &lt;dependencies&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;io.grpc&lt;/groupId&gt;
      &lt;artifactId&gt;grpc-protobuf&lt;/artifactId&gt;
      &lt;version&gt;${grpcVersion}&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;/dependencies&gt;
    &lt;build&gt;
      &lt;extensions&gt;
        &lt;extension&gt;
          &lt;groupId&gt;kr.motd.maven&lt;/groupId&gt;
          &lt;artifactId&gt;os-maven-plugin&lt;/artifactId&gt;
          &lt;version&gt;1.6.1&lt;/version&gt;
        &lt;/extension&gt;
      &lt;/extensions&gt;
      &lt;plugins&gt;
        &lt;plugin&gt;
          &lt;groupId&gt;org.xolstice.maven.plugins&lt;/groupId&gt;
          &lt;artifactId&gt;protobuf-maven-plugin&lt;/artifactId&gt;
          &lt;version&gt;0.6.1&lt;/version&gt;
          &lt;configuration&gt;
            &lt;protocArtifact&gt;
              com.google.protobuf:protoc:3.11.4:exe:${os.detected.classifier}
            &lt;/protocArtifact&gt;
            &lt;pluginId&gt;grpc-java&lt;/pluginId&gt;
            &lt;pluginArtifact&gt;
              io.grpc:protoc-gen-grpc-java:1.27.1:exe:${os.detected.classifier}
            &lt;/pluginArtifact&gt;
            &lt;clearOutputDirectory&gt;false&lt;/clearOutputDirectory&gt;
            &lt;outputDirectory&gt;${basedir}/src/main/java&lt;/outputDirectory&gt;
          &lt;/configuration&gt;
          &lt;executions&gt;
            &lt;execution&gt;
              &lt;goals&gt;
                &lt;goal&gt;compile&lt;/goal&gt;
                &lt;goal&gt;compile-custom&lt;/goal&gt;
              &lt;/goals&gt;
            &lt;/execution&gt;
          &lt;/executions&gt;
        &lt;/plugin&gt;
      &lt;/plugins&gt;
    &lt;/build&gt;
  </code></pre>
  <p>Snippets of server pom.xml:</p>
  <pre><code>    &lt;properties&gt;
          &lt;java.version&gt;11&lt;/java.version&gt;
          &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;
          &lt;grpcVersion&gt;1.27.1&lt;/grpcVersion&gt;
          &lt;local.repository.folder&gt;${pom.basedir}/lib/&lt;/local.repository.folder&gt;
      &lt;/properties&gt;
  </code></pre>
  <pre><code>        &lt;dependency&gt;
              &lt;!-- Java 9+ compatibility --&gt;
              &lt;groupId&gt;javax.annotation&lt;/groupId&gt;
              &lt;artifactId&gt;javax.annotation-api&lt;/artifactId&gt;
          &lt;/dependency&gt;
  
  
              &lt;dependency&gt;
                  &lt;groupId&gt;io.grpc&lt;/groupId&gt;
                  &lt;artifactId&gt;grpc-netty-shaded&lt;/artifactId&gt;
                  &lt;version&gt;${grpcVersion}&lt;/version&gt;
              &lt;/dependency&gt;
             &lt;dependency&gt;
                  &lt;groupId&gt;io.grpc&lt;/groupId&gt;
                  &lt;artifactId&gt;grpc-protobuf&lt;/artifactId&gt;
                  &lt;version&gt;${grpcVersion}&lt;/version&gt;
              &lt;/dependency&gt;
              &lt;dependency&gt;
                  &lt;groupId&gt;io.grpc&lt;/groupId&gt;
                  &lt;artifactId&gt;grpc-stub&lt;/artifactId&gt;
                  &lt;version&gt;${grpcVersion}&lt;/version&gt;
              &lt;/dependency&gt;
            
          &lt;dependency&gt;
              &lt;groupId&gt;net.devh&lt;/groupId&gt;
              &lt;artifactId&gt;grpc-spring-boot-starter&lt;/artifactId&gt;
              &lt;version&gt;2.7.0.RELEASE&lt;/version&gt;
          &lt;/dependency&gt;
          
  &lt;!-- For the server (only) --&gt;
          &lt;dependency&gt;
              &lt;groupId&gt;net.devh&lt;/groupId&gt;
              &lt;artifactId&gt;grpc-server-spring-boot-starter&lt;/artifactId&gt;
              &lt;version&gt;2.7.0.RELEASE&lt;/version&gt;
          &lt;/dependency&gt;
  
  </code></pre>
  <p>The relevant parts of the client project pom.xml:</p>
  <pre><code>  &lt;parent&gt;
      &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
      &lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt;
      &lt;version&gt;1.5.10.RELEASE&lt;/version&gt;
      &lt;relativePath /&gt; &lt;!-- lookup parent from repository --&gt;
    &lt;/parent&gt;
  
    &lt;properties&gt;
      &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;
      &lt;project.reporting.outputEncoding&gt;UTF-8&lt;/project.reporting.outputEncoding&gt;
      &lt;java.version&gt;1.8&lt;/java.version&gt;
      &lt;local.repository.folder&gt;${pom.basedir}/lib/&lt;/local.repository.folder&gt;
      &lt;grpcVersion&gt;1.27.1&lt;/grpcVersion&gt;
    &lt;/properties&gt;
  
  
    &lt;dependencies&gt;
  
  &lt;!-- This is the data model protobuf project --&gt;
      &lt;dependency&gt;
        &lt;groupId&gt;e2log&lt;/groupId&gt;
        &lt;artifactId&gt;nsub-api&lt;/artifactId&gt;
        &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
      &lt;/dependency&gt;
  
  &lt;!-- This is the service definition protobuf project --&gt;
      &lt;dependency&gt;
        &lt;groupId&gt;e2log&lt;/groupId&gt;
        &lt;artifactId&gt;e2log-api&lt;/artifactId&gt;
        &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
      &lt;/dependency&gt;
  
      &lt;dependency&gt;
        &lt;groupId&gt;io.grpc&lt;/groupId&gt;
        &lt;artifactId&gt;grpc-netty&lt;/artifactId&gt;
        &lt;version&gt;${grpcVersion}&lt;/version&gt;
      &lt;/dependency&gt;
      &lt;dependency&gt;
        &lt;groupId&gt;io.grpc&lt;/groupId&gt;
        &lt;artifactId&gt;grpc-protobuf&lt;/artifactId&gt;
        &lt;version&gt;${grpcVersion}&lt;/version&gt;
      &lt;/dependency&gt;
      &lt;dependency&gt;
        &lt;groupId&gt;io.grpc&lt;/groupId&gt;
        &lt;artifactId&gt;grpc-stub&lt;/artifactId&gt;
        &lt;version&gt;${grpcVersion}&lt;/version&gt;
      &lt;/dependency&gt;
  
  &lt;!-- There are a ton of other dependencies here that i am omitting for brevity--&gt;
  </code></pre>
  <p>My service has just one very simple rpc definition for now:</p>
  <pre><code>syntax = &quot;proto3&quot;;
  import &quot;E2logData.proto&quot;;
  option java_multiple_files = true;
  package e2log.nsub.bridge;
  
  service EventBridgeService {
      rpc RfqNotification( e2log.api.RfqNotificationEvent ) returns ( RfqNotificationResponse ) {}
  }
  
  message RfqNotificationResponse{
      bool relay_message = 1;
      e2log.api.RfqNotificationEvent request = 2;
  }
  </code></pre>
  <p>The relevant parts of the client implementation which is in a in class annotated as a Spring <code>@Component</code>:</p>
  <pre><code> // Connection with gRpc server
   @PostConstruct
    void init(){
      channel = nSubConnection();
      log.info(&quot;Established NSub gRpc connection for address={} with max-retries={}.&quot;, nsubServer, nSubMaxRetryAttempts);
      eventBridgeSvcBlockingStub = EventBridgeServiceGrpc.newBlockingStub(channel);
    }
    
  
    @VisibleForTesting
    ManagedChannel nSubConnection() {
      return ManagedChannelBuilder.forTarget(nsubServer )
                                  .enableRetry()
                                  .maxRetryAttempts(nSubMaxRetryAttempts)
                                  .usePlaintext() // for now until it works
                                  .build();
    }
  
  
  // Actual gRpc call
  @EventListener
    public void nSubBridge(RfqEvent event){
      val wireEvent = rfqEventMapper.map(event);
      val resp = eventBridgeSvcBlockingStub.rfqNotification( wireEvent);
     //
     System.err.println(resp);
    } 
  
  </code></pre>
  <p>Everything compiles and starts up just fine, when the client makes a call to the server, the server receives the call and prints out the received email address sent in the payload serialized as protbuf  by the client.
  However right after the message is printed out on the server I get an error from on the client side 1st, then an error on the server side.</p>
  <ol>
  <li>Client error:</li>
  </ol>
  <pre><code>ndler | Not auditing event RfqAwardedEvent for RFQ 1023-2020 action=false, user=true
  23:26:00.193 | ERROR | c.e.s.i.LoginServiceImpl | error in handleException :: UNIMPLEMENTED: Method e2log.nsub.bridge.EventBridgeService/RfqNotification is unimplemented
  io.grpc.StatusRuntimeException: UNIMPLEMENTED: Method e2log.nsub.bridge.EventBridgeService/RfqNotification is unimplemented
      at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:240)
      at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:221)
      at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:140)
      at e2log.nsub.bridge.EventBridgeServiceGrpc$EventBridgeServiceBlockingStub.rfqNotification(EventBridgeServiceGrpc.java:169)
      at com.e2log.rfq.event.RfqEventHandler.nSubBridge(RfqEventHandler.java:103)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
      at org.springframework.context.event.ApplicationListenerMethodAdapter.doInvoke(ApplicationListenerMethodAdapter.java:256)
      at org.springframework.context.event.ApplicationListenerMethodAdapter.processEvent(ApplicationListenerMethodAdapter.java:177)
      at org.springframework.context.event.ApplicationListenerMethodAdapter.onApplicationEvent(ApplicationListenerMethodAdapter.java:140)
      at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
      at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
      at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
      at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:393)
      at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:360)
      at com.e2log.service.impl.PreawardToAwardTransition.notifyLspAndShipper(PreawardToAwardTransition.java:124)
      at com.e2log.service.impl.PreawardToAwardTransition.preAwardedToAwarded(PreawardToAwardTransition.java:75)
      at com.e2log.service.impl.CustomerServiceImpl.customerPreAwardedtoAward(CustomerServiceImpl.java:545)
      at com.e2log.service.impl.CustomerServiceImpl$$FastClassBySpringCGLIB$$c32e4446.invoke(&lt;generated&gt;)
      at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
      at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:669)
      at com.e2log.service.impl.CustomerServiceImpl$$EnhancerBySpringCGLIB$$eee40a0b.customerPreAwardedtoAward(&lt;generated&gt;)
      at com.e2log.controller.CustomerController.customerPreAwardedtoAward(CustomerController.java:235)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
      at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
      at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
      at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
      at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
      at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
      at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
      at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
      at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
      at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
      at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:883)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:664)
      at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.springframework.web.filter.AbstractRequestLoggingFilter.doFilterInternal(AbstractRequestLoggingFilter.java:244)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at com.e2log.exception.BadRequestFilter.doFilterInternal(BadRequestFilter.java:43)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:110)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317)
      at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
      at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at com.e2log.security.AuthenticationFilter.doFilterInternal(AuthenticationFilter.java:57)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
      at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
      at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
      at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)
      at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at io.micrometer.spring.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:107)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:106)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
      at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
      at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
      at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
      at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
      at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
      at java.lang.Thread.run(Thread.java:748)
  </code></pre>
  <ol start="2">
  <li>Server error:</li>
  </ol>
  <pre><code>2020-03-26 16:47:57.218  INFO 90080 --- [           main] e2log.nsub.NSubApp                       : Started NSubApp in 4.789 seconds (JVM running for 5.212)
  test.eamil@mailinator.com
  2020-03-26 18:26:00.189 ERROR 90080 --- [ault-executor-0] io.grpc.internal.SerializingExecutor     : Exception while executing runnable io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed@2110c8d4
  
  java.lang.IllegalStateException: Stream was terminated by error, no further calls are allowed
      at com.google.common.base.Preconditions.checkState(Preconditions.java:511) ~[guava-28.1-android.jar:na]
      at io.grpc.stub.ServerCalls$ServerCallStreamObserverImpl.onNext(ServerCalls.java:345) ~[grpc-stub-1.27.1.jar:1.27.1]
      at e2log.nsub.bridge.impl.EventBridgeService.rfqNotification(EventBridgeService.java:24) ~[classes/:na]
      at e2log.nsub.bridge.EventBridgeServiceGrpc$MethodHandlers.invoke(EventBridgeServiceGrpc.java:217) ~[nsub-api-1.0-SNAPSHOT.jar:na]
      at io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:172) ~[grpc-stub-1.27.1.jar:1.27.1]
      at io.grpc.PartialForwardingServerCallListener.onHalfClose(PartialForwardingServerCallListener.java:35) ~[grpc-api-1.27.1.jar:1.27.1]
      at io.grpc.ForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:23) ~[grpc-api-1.27.1.jar:1.27.1]
      at io.grpc.ForwardingServerCallListener$SimpleForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:40) ~[grpc-api-1.27.1.jar:1.27.1]
      at io.grpc.PartialForwardingServerCallListener.onHalfClose(PartialForwardingServerCallListener.java:35) ~[grpc-api-1.27.1.jar:1.27.1]
      at io.grpc.ForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:23) ~[grpc-api-1.27.1.jar:1.27.1]
      at io.grpc.ForwardingServerCallListener$SimpleForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:40) ~[grpc-api-1.27.1.jar:1.27.1]
      at io.grpc.Contexts$ContextualizedServerCallListener.onHalfClose(Contexts.java:86) ~[grpc-api-1.27.1.jar:1.27.1]
      at io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:331) ~[grpc-core-1.27.1.jar:1.27.1]
      at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(ServerImpl.java:817) ~[grpc-core-1.27.1.jar:1.27.1]
      at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) ~[grpc-core-1.27.1.jar:1.27.1]
      at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123) ~[grpc-core-1.27.1.jar:1.27.1]
      at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
      at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
      at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
  
  </code></pre>
  <p>Any idea of what is going wrong with my client code or setup ?</p>