test_class.declarator: DEFAULT_SOURCE = "zipkin"
test_class.modifier: private static final
test_class.original_string: private static final String DEFAULT_SOURCE = "zipkin";
test_class.type: String
test_class.var_name: DEFAULT_SOURCE
test_class.declarator: mockTraceHandler =
        MockReportableEntityHandlerFactory.getMockTraceHandler()
test_class.modifier: private
test_class.original_string: private ReportableEntityHandler<Span, String> mockTraceHandler =
        MockReportableEntityHandlerFactory.getMockTraceHandler();
test_class.type: ReportableEntityHandler<Span, String>
test_class.var_name: mockTraceHandler
test_class.declarator: mockTraceSpanLogsHandler =
        MockReportableEntityHandlerFactory.getMockTraceSpanLogsHandler()
test_class.modifier: private
test_class.original_string: private ReportableEntityHandler<SpanLogs, String> mockTraceSpanLogsHandler =
        MockReportableEntityHandlerFactory.getMockTraceSpanLogsHandler();
test_class.type: ReportableEntityHandler<SpanLogs, String>
test_class.var_name: mockTraceSpanLogsHandler
test_class.declarator: mockWavefrontSender = EasyMock.createMock(WavefrontSender.class)
test_class.modifier: private
test_class.original_string: private WavefrontSender mockWavefrontSender = EasyMock.createMock(WavefrontSender.class);
test_class.type: WavefrontSender
test_class.var_name: mockWavefrontSender
test_class.declarator: startTime = System.currentTimeMillis()
test_class.modifier: private
test_class.original_string: private long startTime = System.currentTimeMillis();
test_class.type: long
test_class.var_name: startTime
test_class.declarator: PREPROCESSED_APPLICATION_TAG_VALUE = "preprocessedApplication"
test_class.modifier: private final
test_class.original_string: private final String PREPROCESSED_APPLICATION_TAG_VALUE = "preprocessedApplication";
test_class.type: String
test_class.var_name: PREPROCESSED_APPLICATION_TAG_VALUE
test_class.declarator: PREPROCESSED_SERVICE_TAG_VALUE = "preprocessedService"
test_class.modifier: private final
test_class.original_string: private final String PREPROCESSED_SERVICE_TAG_VALUE = "preprocessedService";
test_class.type: String
test_class.var_name: PREPROCESSED_SERVICE_TAG_VALUE
test_class.declarator: PREPROCESSED_CLUSTER_TAG_VALUE = "preprocessedCluster"
test_class.modifier: private final
test_class.original_string: private final String PREPROCESSED_CLUSTER_TAG_VALUE = "preprocessedCluster";
test_class.type: String
test_class.var_name: PREPROCESSED_CLUSTER_TAG_VALUE
test_class.declarator: PREPROCESSED_SHARD_TAG_VALUE = "preprocessedShard"
test_class.modifier: private final
test_class.original_string: private final String PREPROCESSED_SHARD_TAG_VALUE = "preprocessedShard";
test_class.type: String
test_class.var_name: PREPROCESSED_SHARD_TAG_VALUE
test_class.declarator: PREPROCESSED_SOURCE_VALUE = "preprocessedSource"
test_class.modifier: private final
test_class.original_string: private final String PREPROCESSED_SOURCE_VALUE = "preprocessedSource";
test_class.type: String
test_class.var_name: PREPROCESSED_SOURCE_VALUE
test_class.file: proxy/src/test/java/com/wavefront/agent/listeners/tracing/ZipkinPortUnificationHandlerTest.java
test_class.identifier: ZipkinPortUnificationHandlerTest
test_case.body: @Test
    public void testZipkinCustomSource() throws Exception {
      ZipkinPortUnificationHandler handler = new ZipkinPortUnificationHandler("9411",
          new NoopHealthCheckManager(), mockTraceHandler, mockTraceSpanLogsHandler, null,
          () -> false, () -> false, null, new SpanSampler(new RateSampler(1.0D), false), null, null);
  
      // take care of mocks.
      // Reset mock
      reset(mockTraceHandler, mockTraceSpanLogsHandler);
  
      // Set Expectation
      mockTraceHandler.report(Span.newBuilder().setCustomer("dummy").setStartMillis(startTime).
          setDuration(9).
          setName("getservice").
          setSource("customZipkinSource").
          setSpanId("00000000-0000-0000-2822-889fe47043bd").
          setTraceId("00000000-0000-0000-2822-889fe47043bd").
          // Note: Order of annotations list matters for this unit test.
          setAnnotations(ImmutableList.of(
              new Annotation("zipkinSpanId", "2822889fe47043bd"),
              new Annotation("zipkinTraceId", "2822889fe47043bd"),
              new Annotation("span.kind", "server"),
              new Annotation("service", "frontend"),
              new Annotation("http.method", "GET"),
              new Annotation("http.status_code", "200"),
              new Annotation("http.url", "none+h1c://localhost:8881/"),
              new Annotation("application", "Zipkin"),
              new Annotation("cluster", "none"),
              new Annotation("shard", "none"),
              new Annotation("ipv4", "10.0.0.1"))).
          build());
      expectLastCall();
  
      Endpoint localEndpoint1 = Endpoint.newBuilder().serviceName("frontend").ip("10.0.0.1").build();
      zipkin2.Span spanServer1 = zipkin2.Span.newBuilder().
          traceId("2822889fe47043bd").
          id("2822889fe47043bd").
          kind(zipkin2.Span.Kind.SERVER).
          name("getservice").
          timestamp(startTime * 1000).
          duration(9 * 1000).
          localEndpoint(localEndpoint1).
          putTag("http.method", "GET").
          putTag("http.url", "none+h1c://localhost:8881/").
          putTag("http.status_code", "200").
          putTag("source", "customZipkinSource").
          build();
  
      List<zipkin2.Span> zipkinSpanList = ImmutableList.of(spanServer1);
  
      SpanBytesEncoder encoder = SpanBytesEncoder.values()[1];
      ByteBuf content = Unpooled.copiedBuffer(encoder.encodeList(zipkinSpanList));
  
      replay(mockTraceHandler, mockTraceSpanLogsHandler);
  
      ChannelHandlerContext mockCtx = createNiceMock(ChannelHandlerContext.class);
      doMockLifecycle(mockCtx);
      FullHttpRequest httpRequest = new DefaultFullHttpRequest(
          HttpVersion.HTTP_1_1,
          HttpMethod.POST,
          "http://localhost:9411/api/v1/spans",
          content,
          true
      );
      handler.handleHttpMessage(mockCtx, httpRequest);
      verify(mockTraceHandler, mockTraceSpanLogsHandler);
    }
test_case.class_method_signature: ZipkinPortUnificationHandlerTest.testZipkinCustomSource()
test_case.full_signature: @Test public void testZipkinCustomSource()
test_case.identifier: testZipkinCustomSource
test_case.invocations: reset report build setAnnotations setTraceId setSpanId setSource setName setDuration setStartMillis setCustomer newBuilder of expectLastCall build ip serviceName newBuilder build putTag putTag putTag putTag localEndpoint duration timestamp name kind id traceId newBuilder of values copiedBuffer encodeList replay createNiceMock doMockLifecycle handleHttpMessage verify
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testZipkinCustomSource()
focal_class.declarator: logger = Logger.getLogger(
        ZipkinPortUnificationHandler.class.getCanonicalName())
focal_class.modifier: private static final
focal_class.original_string: private static final Logger logger = Logger.getLogger(
        ZipkinPortUnificationHandler.class.getCanonicalName());
focal_class.type: Logger
focal_class.var_name: logger
focal_class.declarator: spanHandler
focal_class.modifier: private final
focal_class.original_string: private final ReportableEntityHandler<Span, String> spanHandler;
focal_class.type: ReportableEntityHandler<Span, String>
focal_class.var_name: spanHandler
focal_class.declarator: spanLogsHandler
focal_class.modifier: private final
focal_class.original_string: private final ReportableEntityHandler<SpanLogs, String> spanLogsHandler;
focal_class.type: ReportableEntityHandler<SpanLogs, String>
focal_class.var_name: spanLogsHandler
focal_class.declarator: wfSender
focal_class.modifier: @Nullable
    private final
focal_class.original_string: @Nullable
    private final WavefrontSender wfSender;
focal_class.type: WavefrontSender
focal_class.var_name: wfSender
focal_class.declarator: wfInternalReporter
focal_class.modifier: @Nullable
    private final
focal_class.original_string: @Nullable
    private final WavefrontInternalReporter wfInternalReporter;
focal_class.type: WavefrontInternalReporter
focal_class.var_name: wfInternalReporter
focal_class.declarator: traceDisabled
focal_class.modifier: private final
focal_class.original_string: private final Supplier<Boolean> traceDisabled;
focal_class.type: Supplier<Boolean>
focal_class.var_name: traceDisabled
focal_class.declarator: spanLogsDisabled
focal_class.modifier: private final
focal_class.original_string: private final Supplier<Boolean> spanLogsDisabled;
focal_class.type: Supplier<Boolean>
focal_class.var_name: spanLogsDisabled
focal_class.declarator: preprocessorSupplier
focal_class.modifier: private final
focal_class.original_string: private final Supplier<ReportableEntityPreprocessor> preprocessorSupplier;
focal_class.type: Supplier<ReportableEntityPreprocessor>
focal_class.var_name: preprocessorSupplier
focal_class.declarator: sampler
focal_class.modifier: private final
focal_class.original_string: private final SpanSampler sampler;
focal_class.type: SpanSampler
focal_class.var_name: sampler
focal_class.declarator: discardedBatches
focal_class.modifier: private final
focal_class.original_string: private final Counter discardedBatches;
focal_class.type: Counter
focal_class.var_name: discardedBatches
focal_class.declarator: processedBatches
focal_class.modifier: private final
focal_class.original_string: private final Counter processedBatches;
focal_class.type: Counter
focal_class.var_name: processedBatches
focal_class.declarator: failedBatches
focal_class.modifier: private final
focal_class.original_string: private final Counter failedBatches;
focal_class.type: Counter
focal_class.var_name: failedBatches
focal_class.declarator: discardedSpansBySampler
focal_class.modifier: private final
focal_class.original_string: private final Counter discardedSpansBySampler;
focal_class.type: Counter
focal_class.var_name: discardedSpansBySampler
focal_class.declarator: receivedSpansTotal
focal_class.modifier: private final
focal_class.original_string: private final Counter receivedSpansTotal;
focal_class.type: Counter
focal_class.var_name: receivedSpansTotal
focal_class.declarator: discardedTraces
focal_class.modifier: private final
focal_class.original_string: private final Counter discardedTraces;
focal_class.type: Counter
focal_class.var_name: discardedTraces
focal_class.declarator: discoveredHeartbeatMetrics
focal_class.modifier: private final
focal_class.original_string: private final Set<Pair<Map<String, String>, String>> discoveredHeartbeatMetrics;
focal_class.type: Set<Pair<Map<String, String>, String>>
focal_class.var_name: discoveredHeartbeatMetrics
focal_class.declarator: scheduledExecutorService
focal_class.modifier: private final
focal_class.original_string: private final ScheduledExecutorService scheduledExecutorService;
focal_class.type: ScheduledExecutorService
focal_class.var_name: scheduledExecutorService
focal_class.declarator: ZIPKIN_VALID_PATHS = ImmutableSet.of("/api/v1/spans/", "/api/v2/spans/")
focal_class.modifier: private final static
focal_class.original_string: private final static Set<String> ZIPKIN_VALID_PATHS = ImmutableSet.of("/api/v1/spans/", "/api/v2/spans/");
focal_class.type: Set<String>
focal_class.var_name: ZIPKIN_VALID_PATHS
focal_class.declarator: ZIPKIN_VALID_HTTP_METHOD = "POST"
focal_class.modifier: private final static
focal_class.original_string: private final static String ZIPKIN_VALID_HTTP_METHOD = "POST";
focal_class.type: String
focal_class.var_name: ZIPKIN_VALID_HTTP_METHOD
focal_class.declarator: ZIPKIN_COMPONENT = "zipkin"
focal_class.modifier: private final static
focal_class.original_string: private final static String ZIPKIN_COMPONENT = "zipkin";
focal_class.type: String
focal_class.var_name: ZIPKIN_COMPONENT
focal_class.declarator: DEFAULT_SOURCE = "zipkin"
focal_class.modifier: private final static
focal_class.original_string: private final static String DEFAULT_SOURCE = "zipkin";
focal_class.type: String
focal_class.var_name: DEFAULT_SOURCE
focal_class.declarator: DEFAULT_SERVICE = "defaultService"
focal_class.modifier: private final static
focal_class.original_string: private final static String DEFAULT_SERVICE = "defaultService";
focal_class.type: String
focal_class.var_name: DEFAULT_SERVICE
focal_class.declarator: DEFAULT_SPAN_NAME = "defaultOperation"
focal_class.modifier: private final static
focal_class.original_string: private final static String DEFAULT_SPAN_NAME = "defaultOperation";
focal_class.type: String
focal_class.var_name: DEFAULT_SPAN_NAME
focal_class.declarator: SPAN_TAG_ERROR = "error"
focal_class.modifier: private final static
focal_class.original_string: private final static String SPAN_TAG_ERROR = "error";
focal_class.type: String
focal_class.var_name: SPAN_TAG_ERROR
focal_class.declarator: proxyLevelApplicationName
focal_class.modifier: private final
focal_class.original_string: private final String proxyLevelApplicationName;
focal_class.type: String
focal_class.var_name: proxyLevelApplicationName
focal_class.declarator: traceDerivedCustomTagKeys
focal_class.modifier: private final
focal_class.original_string: private final Set<String> traceDerivedCustomTagKeys;
focal_class.type: Set<String>
focal_class.var_name: traceDerivedCustomTagKeys
focal_class.declarator: ZIPKIN_DATA_LOGGER = Logger.getLogger("ZipkinDataLogger")
focal_class.modifier: private static final
focal_class.original_string: private static final Logger ZIPKIN_DATA_LOGGER = Logger.getLogger("ZipkinDataLogger");
focal_class.type: Logger
focal_class.var_name: ZIPKIN_DATA_LOGGER
focal_class.file: proxy/src/main/java/com/wavefront/agent/listeners/tracing/ZipkinPortUnificationHandler.java
focal_class.identifier: ZipkinPortUnificationHandler
focal_class.interfaces: implements Runnable, Closeable
focal_class.class_method_signature: ZipkinPortUnificationHandler.ZipkinPortUnificationHandler(String handle,
                                        final HealthCheckManager healthCheckManager,
                                        ReportableEntityHandlerFactory handlerFactory,
                                        @Nullable WavefrontSender wfSender,
                                        Supplier<Boolean> traceDisabled,
                                        Supplier<Boolean> spanLogsDisabled,
                                        @Nullable Supplier<ReportableEntityPreprocessor> preprocessor,
                                        SpanSampler sampler,
                                        @Nullable String traceZipkinApplicationName,
                                        Set<String> traceDerivedCustomTagKeys)
focal_class.full_signature: public  ZipkinPortUnificationHandler(String handle,
                                        final HealthCheckManager healthCheckManager,
                                        ReportableEntityHandlerFactory handlerFactory,
                                        @Nullable WavefrontSender wfSender,
                                        Supplier<Boolean> traceDisabled,
                                        Supplier<Boolean> spanLogsDisabled,
                                        @Nullable Supplier<ReportableEntityPreprocessor> preprocessor,
                                        SpanSampler sampler,
                                        @Nullable String traceZipkinApplicationName,
                                        Set<String> traceDerivedCustomTagKeys)
focal_class.identifier: ZipkinPortUnificationHandler
focal_class.modifiers: public
focal_class.parameters: (String handle,
                                        final HealthCheckManager healthCheckManager,
                                        ReportableEntityHandlerFactory handlerFactory,
                                        @Nullable WavefrontSender wfSender,
                                        Supplier<Boolean> traceDisabled,
                                        Supplier<Boolean> spanLogsDisabled,
                                        @Nullable Supplier<ReportableEntityPreprocessor> preprocessor,
                                        SpanSampler sampler,
                                        @Nullable String traceZipkinApplicationName,
                                        Set<String> traceDerivedCustomTagKeys)
focal_class.signature:  ZipkinPortUnificationHandler(String handle,
                                        final HealthCheckManager healthCheckManager,
                                        ReportableEntityHandlerFactory handlerFactory,
                                        @Nullable WavefrontSender wfSender,
                                        Supplier<Boolean> traceDisabled,
                                        Supplier<Boolean> spanLogsDisabled,
                                        @Nullable Supplier<ReportableEntityPreprocessor> preprocessor,
                                        SpanSampler sampler,
                                        @Nullable String traceZipkinApplicationName,
                                        Set<String> traceDerivedCustomTagKeys)
focal_class.class_method_signature: ZipkinPortUnificationHandler.ZipkinPortUnificationHandler(final String handle,
                                 final HealthCheckManager healthCheckManager,
                                 ReportableEntityHandler<Span, String> spanHandler,
                                 ReportableEntityHandler<SpanLogs, String> spanLogsHandler,
                                 @Nullable WavefrontSender wfSender,
                                 Supplier<Boolean> traceDisabled,
                                 Supplier<Boolean> spanLogsDisabled,
                                 @Nullable Supplier<ReportableEntityPreprocessor> preprocessor,
                                 SpanSampler sampler,
                                 @Nullable String traceZipkinApplicationName,
                                 Set<String> traceDerivedCustomTagKeys)
focal_class.full_signature: @VisibleForTesting  ZipkinPortUnificationHandler(final String handle,
                                 final HealthCheckManager healthCheckManager,
                                 ReportableEntityHandler<Span, String> spanHandler,
                                 ReportableEntityHandler<SpanLogs, String> spanLogsHandler,
                                 @Nullable WavefrontSender wfSender,
                                 Supplier<Boolean> traceDisabled,
                                 Supplier<Boolean> spanLogsDisabled,
                                 @Nullable Supplier<ReportableEntityPreprocessor> preprocessor,
                                 SpanSampler sampler,
                                 @Nullable String traceZipkinApplicationName,
                                 Set<String> traceDerivedCustomTagKeys)
focal_class.identifier: ZipkinPortUnificationHandler
focal_class.modifiers: @VisibleForTesting
focal_class.parameters: (final String handle,
                                 final HealthCheckManager healthCheckManager,
                                 ReportableEntityHandler<Span, String> spanHandler,
                                 ReportableEntityHandler<SpanLogs, String> spanLogsHandler,
                                 @Nullable WavefrontSender wfSender,
                                 Supplier<Boolean> traceDisabled,
                                 Supplier<Boolean> spanLogsDisabled,
                                 @Nullable Supplier<ReportableEntityPreprocessor> preprocessor,
                                 SpanSampler sampler,
                                 @Nullable String traceZipkinApplicationName,
                                 Set<String> traceDerivedCustomTagKeys)
focal_class.signature:  ZipkinPortUnificationHandler(final String handle,
                                 final HealthCheckManager healthCheckManager,
                                 ReportableEntityHandler<Span, String> spanHandler,
                                 ReportableEntityHandler<SpanLogs, String> spanLogsHandler,
                                 @Nullable WavefrontSender wfSender,
                                 Supplier<Boolean> traceDisabled,
                                 Supplier<Boolean> spanLogsDisabled,
                                 @Nullable Supplier<ReportableEntityPreprocessor> preprocessor,
                                 SpanSampler sampler,
                                 @Nullable String traceZipkinApplicationName,
                                 Set<String> traceDerivedCustomTagKeys)
focal_class.class_method_signature: ZipkinPortUnificationHandler.handleHttpMessage(final ChannelHandlerContext ctx,
                                     final FullHttpRequest request)
focal_class.full_signature: @Override protected void handleHttpMessage(final ChannelHandlerContext ctx,
                                     final FullHttpRequest request)
focal_class.identifier: handleHttpMessage
focal_class.modifiers: @Override protected
focal_class.parameters: (final ChannelHandlerContext ctx,
                                     final FullHttpRequest request)
focal_class.return: void
focal_class.signature: void handleHttpMessage(final ChannelHandlerContext ctx,
                                     final FullHttpRequest request)
focal_class.class_method_signature: ZipkinPortUnificationHandler.processZipkinSpans(List<zipkin2.Span> zipkinSpans)
focal_class.full_signature: private void processZipkinSpans(List<zipkin2.Span> zipkinSpans)
focal_class.identifier: processZipkinSpans
focal_class.modifiers: private
focal_class.parameters: (List<zipkin2.Span> zipkinSpans)
focal_class.return: void
focal_class.signature: void processZipkinSpans(List<zipkin2.Span> zipkinSpans)
focal_class.class_method_signature: ZipkinPortUnificationHandler.processZipkinSpan(zipkin2.Span zipkinSpan)
focal_class.full_signature: private void processZipkinSpan(zipkin2.Span zipkinSpan)
focal_class.identifier: processZipkinSpan
focal_class.modifiers: private
focal_class.parameters: (zipkin2.Span zipkinSpan)
focal_class.return: void
focal_class.signature: void processZipkinSpan(zipkin2.Span zipkinSpan)
focal_class.class_method_signature: ZipkinPortUnificationHandler.run()
focal_class.full_signature: @Override public void run()
focal_class.identifier: run
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void run()
focal_class.class_method_signature: ZipkinPortUnificationHandler.close()
focal_class.full_signature: @Override public void close()
focal_class.identifier: close
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void close()
focal_class.superclass: extends AbstractHttpOnlyHandler
focal_method.body: @Override
    protected void handleHttpMessage(final ChannelHandlerContext ctx,
                                     final FullHttpRequest request) throws URISyntaxException {
      URI uri = new URI(request.uri());
      String path = uri.getPath().endsWith("/") ? uri.getPath() : uri.getPath() + "/";
  
      // Validate Uri Path and HTTP method of incoming Zipkin spans.
      if (!ZIPKIN_VALID_PATHS.contains(path)) {
        writeHttpResponse(ctx, HttpResponseStatus.BAD_REQUEST, "Unsupported URL path.", request);
        logWarning("Requested URI path '" + path + "' is not supported.", null, ctx);
        return;
      }
      if (!request.method().toString().equalsIgnoreCase(ZIPKIN_VALID_HTTP_METHOD)) {
        writeHttpResponse(ctx, HttpResponseStatus.BAD_REQUEST, "Unsupported Http method.", request);
        logWarning("Requested http method '" + request.method().toString() +
            "' is not supported.", null, ctx);
        return;
      }
  
      HttpResponseStatus status;
      StringBuilder output = new StringBuilder();
  
      try {
        byte[] bytesArray = new byte[request.content().nioBuffer().remaining()];
        request.content().nioBuffer().get(bytesArray, 0, bytesArray.length);
        BytesDecoder<zipkin2.Span> decoder = SpanBytesDecoderDetector.decoderForListMessage(bytesArray);
        List<zipkin2.Span> zipkinSpanSink = new ArrayList<>();
        decoder.decodeList(bytesArray, zipkinSpanSink);
  
        // Handle case when tracing is disabled, ignore reported spans.
        if (isFeatureDisabled(traceDisabled, SPAN_DISABLED, discardedBatches, output)) {
          status = HttpResponseStatus.ACCEPTED;
          writeHttpResponse(ctx, status, output, request);
          discardedTraces.inc(zipkinSpanSink.size());
          receivedSpansTotal.inc(zipkinSpanSink.size());
          processedBatches.inc();
          return;
        }
        receivedSpansTotal.inc(zipkinSpanSink.size());
        processZipkinSpans(zipkinSpanSink);
        status = HttpResponseStatus.ACCEPTED;
        processedBatches.inc();
      } catch (Exception e) {
        failedBatches.inc();
        output.append(errorMessageWithRootCause(e));
        status = HttpResponseStatus.BAD_REQUEST;
        logger.log(Level.WARNING, "Zipkin batch processing failed", Throwables.getRootCause(e));
      }
      writeHttpResponse(ctx, status, output, request);
    }
focal_method.class_method_signature: ZipkinPortUnificationHandler.handleHttpMessage(final ChannelHandlerContext ctx,
                                     final FullHttpRequest request)
focal_method.full_signature: @Override protected void handleHttpMessage(final ChannelHandlerContext ctx,
                                     final FullHttpRequest request)
focal_method.identifier: handleHttpMessage
focal_method.invocations: uri endsWith getPath getPath getPath contains writeHttpResponse logWarning equalsIgnoreCase toString method writeHttpResponse logWarning toString method remaining nioBuffer content get nioBuffer content decoderForListMessage decodeList isFeatureDisabled writeHttpResponse inc size inc size inc inc size processZipkinSpans inc inc append errorMessageWithRootCause log getRootCause writeHttpResponse
focal_method.modifiers: @Override protected
focal_method.parameters: (final ChannelHandlerContext ctx,
                                     final FullHttpRequest request)
focal_method.return: void
focal_method.signature: void handleHttpMessage(final ChannelHandlerContext ctx,
                                     final FullHttpRequest request)