docs: @AroundInvoke
      public Object execute(InvocationContext context) throws Exception {
          String methodName = "execute";
  
          String classOperationName = OpenTracingService.getClassOperationName(context.getMethod());
          String methodOperationName = OpenTracingService.getMethodOperationName(context.getMethod());
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, methodName + " operation names", classOperationName, methodOperationName);
          }
  
          boolean process = true;
  
          if (!OpenTracingService.isTraced(classOperationName, methodOperationName)) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, methodName + " skipping untraced method");
              }
              process = false;
          }
  
          if (process && isHandledByFilter(context.getMethod())) {
              // This is already processed as part of the OpentracingContainerFilter
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, methodName + " skipping JAXRS method");
              }
              process = false;
          }
  
          if (process) {
  
              String operationName;
  
              if (OpenTracingService.hasExplicitOperationName(methodOperationName)) {
                  operationName = methodOperationName;
              } else {
                  // If the annotated method is not a JAX-RS endpoint, the default
                  // operation name of the new Span for the method is:
                  // <package name>.<class name>.<method name> [...]
                  // If operationName is specified on a class, that operationName will be used
                  // for all methods of the class unless a method explicitly overrides it with
                  // its own operationName."
                  // https://github.com/eclipse/microprofile-opentracing/blob/master/spec/src/main/asciidoc/microprofile-opentracing.asciidoc#321-the-traced-annotation
                  if (OpenTracingService.hasExplicitOperationName(classOperationName)) {
                      operationName = classOperationName;
                  } else {
                      operationName = context.getMethod().getDeclaringClass().getName() + "." + context.getMethod().getName();
                  }
  
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, methodName + " setting default operationName", operationName);
                  }
              }
  
              Tracer tracer = OpentracingTracerManager.getTracer();
  
              try (Scope scope = tracer.buildSpan(operationName).startActive(true)) {
                  try {
                      Object result = context.proceed();
                      return result;
                  } catch (Exception e) {
                      OpentracingService.addSpanErrorInfo(scope.span(), e);
                      throw e;
                  } catch (Error e) {
                      OpentracingService.addSpanErrorInfo(scope.span(), e);
                      throw e;
                  }
              }
          } else {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, methodName + " normal processing");
              }
              return context.proceed();
          }
      }