code: @Override
    public Object invoke(Object proxy, final Method method, final Object[] args)
        throws Throwable {
      try {
        return getClass().getMethod(method.getName(), method.getParameterTypes())
            .invoke(this, args);
      } catch (NoSuchMethodException e) {
        // Ignore and let the SOAP client handler take over.
      }
      setHeaders();
      RemoteCallReturn remoteCallReturn = callSoapClient(
          createSoapCall(soapClientHandler.getSoapClientMethod(soapClient, method), args));
      logSoapCall(remoteCallReturn);
      return unwrapRemoteCallReturn(remoteCallReturn);
    }
docs: Wraps the underlying SOAP RPC such that first the method, by its name,
  is applied to the runtime class. If no such method exists, it is assumed
  that the call is meant for the SOAP client. In this case, the SOAP client
  handler will invoke the SOAP client method with provided arguments.
  
  @param proxy the proxy class that invoke was called on
  @param method the method to apply to the proxy class or the underlying SOAP
  client
  @param args the method arguments
  @return the return from the {@code SoapServiceClient} or a
  {@link RemoteCallReturn} object containing the result from the SOAP call
  @see InvocationHandler#invoke(Object, Method, Object[])
  @throws Throwable thrown if the SOAP call passed into this method results
  in an exception. The exception thrown will be not be wrapped - it will
  adhere to the "throws" clause of the passed in {@code Method}.