code: @Override
    public RemoteCallReturn invokeSoapCall(SoapCall<Stub> soapCall) {
      Stub stub = soapCall.getSoapClient();
      RemoteCallReturn.Builder builder = new RemoteCallReturn.Builder();
      synchronized (stub) {
        Object result = null;
        try {
          result = invoke(soapCall);
        } catch (InvocationTargetException e) {
          builder.withException(e.getTargetException());
        } catch (Exception e) {
          builder.withException(e);
        } finally {
          MessageContext messageContext = stub._getCall().getMessageContext();
          RequestInfo.Builder requestInfoBuilder = new RequestInfo.Builder()
                  .withMethodName(stub._getCall().getOperationName().getLocalPart())
                  .withServiceName(stub._getService().getServiceName().getLocalPart())
                  .withUrl(stub._getCall().getTargetEndpointAddress());
          requestInfoXPathSet.parseMessage(requestInfoBuilder, messageContext.getRequestMessage());
          builder.withRequestInfo(requestInfoBuilder
                  .build());
          ResponseInfo.Builder responseInfoBuilder = new ResponseInfo.Builder();
          responseInfoXPathSet.parseMessage(responseInfoBuilder, messageContext.getResponseMessage());
          builder.withResponseInfo(responseInfoBuilder.build());
        }
  
        return builder.withReturnValue(result).build();
      }
    }
docs: Invoke a SOAP call.
  
  @param soapCall the call to make to a SOAP web service
  @return information about the SOAP response