code: public static EndpointCaller initializeEndpointCaller(Properties properties) {
          EndpointCaller ec;
          try {
              LOG.debug("Initializing endpoint caller. Checking whether '{}' is in classpath.",
                      TRACING_ENDPOINT_CALLER_CLASSNAME);
              Class<?> tracingEndpointCallerClass = Class.forName(TRACING_ENDPOINT_CALLER_CLASSNAME);
              Constructor<?> tracingEndpointCallerConstructor = tracingEndpointCallerClass
                      .getConstructor(Properties.class);
              ec = (EndpointCaller) tracingEndpointCallerConstructor.newInstance(properties);
              LOG.debug("Using '{}' instance as endpoint caller object.", TRACING_ENDPOINT_CALLER_CLASSNAME);
          } catch (Exception e) {
              ec = new BasicEndpointCaller(properties);
              LOG.debug("Using '{}' instance as endpoint caller object.", BasicEndpointCaller.class.getName());
          }
          return ec;
      }
docs: If the TracingEndpointCaller class is in a classpath - use it, otherwise use BasicEndpointCaller.
  
  @param properties properties argument for endpoint caller
  @return endpoint caller instance