Uploaded image for project: 'Red Hat Fuse'
  1. Red Hat Fuse
  2. ENTESB-9320

NoSuchMethodError When Configuring camel-zipkin in Spring XML DSL with Managed Dependencies

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • fuse-7.2
    • fuse-7.0, fuse-7.0.1
    • Camel
    • None
    • % %
    • Hide

      Reproducer attached.

      1. Download and set up a zipkin server on localhost (I just used the jar distro from github)
      2. Build and run the attached springboot example with as-is pom.xml
      3. Observe the logging for the NoSuchMethodError described above
      4. Stop the example app and uncomment the exclusions under the camel-zipkin dependency and the explicit inclusion of zipkin 2.4.5
      5. Rebuild the app and run
      6. Now spans are correctly reported

      (Note this also was encountered when configuring the deprecated collector vs. reporter component)

      Show
      Reproducer attached. 1. Download and set up a zipkin server on localhost (I just used the jar distro from github) 2. Build and run the attached springboot example with as-is pom.xml 3. Observe the logging for the NoSuchMethodError described above 4. Stop the example app and uncomment the exclusions under the camel-zipkin dependency and the explicit inclusion of zipkin 2.4.5 5. Rebuild the app and run 6. Now spans are correctly reported (Note this also was encountered when configuring the deprecated collector vs. reporter component)

    Description

      When configuring the camel-zipkin components via Spring DSL as indicated in the documented example:

        <!-- configure how to reporter spans to a Zipkin collector
                (the dependency is io.zipkin.reporter2:zipkin-reporter-spring-beans) -->
        <bean id="http" class="zipkin2.reporter.beans.AsyncReporterFactoryBean">
          <property name="sender">
            <bean id="sender" class="zipkin2.reporter.beans.OkHttpSenderFactoryBean">
              <property name="endpoint" value="http://localhost:9411/api/v2/spans"/>
            </bean>
          </property>
          <!-- wait up to half a second for any in-flight spans on close -->
          <property name="closeTimeout" value="500"/>
        </bean>
      
        <!-- setup zipkin tracer -->
        <bean id="zipkinTracer" class="org.apache.camel.zipkin.ZipkinTracer">
          <property name="serviceName" value="dude"/>
          <property name="spanReporter" ref="http"/>
        </bean>
      

      a NoSuchMethodError is encountered when trying to report the span to the configured server:

      java.lang.NoSuchMethodError: zipkin.Span.traceIdString()Ljava/lang/String;
      	at com.github.kristofa.brave.internal.V2SpanConverter.newBuilder(V2SpanConverter.java:309)
      	at com.github.kristofa.brave.internal.V2SpanConverter$Builders.<init>(V2SpanConverter.java:48)
      	at com.github.kristofa.brave.internal.V2SpanConverter.fromSpan(V2SpanConverter.java:34)
      	at com.github.kristofa.brave.Recorder$Default.flush(Recorder.java:104)
      	at com.github.kristofa.brave.Recorder$Default.finish(Recorder.java:86)
      	at com.github.kristofa.brave.AnnotationSubmitter.submitEndAnnotation(AnnotationSubmitter.java:87)
      	at com.github.kristofa.brave.ServerTracer.setServerSend(ServerTracer.java:217)
      	at com.github.kristofa.brave.ServerResponseInterceptor.handle(ServerResponseInterceptor.java:35)
      	at org.apache.camel.zipkin.ZipkinTracer.serverResponse(ZipkinTracer.java:676)
      	at org.apache.camel.zipkin.ZipkinTracer.access$700(ZipkinTracer.java:103)
      	at org.apache.camel.zipkin.ZipkinTracer$ZipkinRoutePolicy$1.onAfterRoute(ZipkinTracer.java:769)
      	at org.apache.camel.util.UnitOfWorkHelper.afterRouteSynchronizations(UnitOfWorkHelper.java:154)
      	at org.apache.camel.impl.DefaultUnitOfWork.afterRoute(DefaultUnitOfWork.java:287)
      	at org.apache.camel.processor.CamelInternalProcessor$RouteLifecycleAdvice.after(CamelInternalProcessor.java:322)
      	at org.apache.camel.processor.CamelInternalProcessor$InternalCallback.done(CamelInternalProcessor.java:251)
      	at org.apache.camel.processor.Pipeline.process(Pipeline.java:127)
      	at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201)
      	at org.apache.camel.component.jetty.CamelContinuationServlet.doService(CamelContinuationServlet.java:205)
      	at org.apache.camel.http.common.CamelServlet.service(CamelServlet.java:78)
      	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
      	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:865)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1655)
      	at org.eclipse.jetty.servlets.MultiPartFilter.doFilter(MultiPartFilter.java:150)
      	at org.apache.camel.component.jetty.CamelFilterWrapper.doFilter(CamelFilterWrapper.java:43)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
      	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
      	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
      	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
      	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
      	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
      	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
      	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
      	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
      	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
      	at org.eclipse.jetty.server.Server.handle(Server.java:531)
      	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:352)
      	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
      	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:281)
      	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)
      	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
      	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:760)
      	at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:678)
      	at java.lang.Thread.run(Thread.java:748)
      

      This appears to be due to the inclusion of the older io.zipkin.java/zipkin1.19.2 dependency, which does not have a method signature matching the one requested by the brave V2SpanConverter.

      Exclusion of the 1.19.2 dependency and explicit inclusion of a later version (Iused 2.4.5) seems to resolve the issue and spans are correctly reported.

      Attachments

        Activity

          People

            acosenti Andrea Cosentino
            rhn-support-dhawkins Duane Hawkins
            Jan Bouska Jan Bouska
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: