code: @Override
    public Stub createSoapClient(SoapServiceDescriptor soapServiceDescriptor)
        throws ServiceException {
      try {
        if (soapServiceDescriptor instanceof AxisCompatible) {
          AxisCompatible axisCompatibleService = (AxisCompatible) soapServiceDescriptor;
          EngineConfiguration engineConfiguration =
              engineConfigurationFactory.getClientEngineConfig();
          Service locator = (Service) axisCompatibleService.getLocatorClass()
              .getConstructor(new Class[] {EngineConfiguration.class})
              .newInstance(new Object[] {engineConfiguration});
          return (Stub) locator.getClass().getMethod("getPort", Class.class)
              .invoke(locator, soapServiceDescriptor.getInterfaceClass());
        }
        throw new ServiceException(
            "Service [" + soapServiceDescriptor + "] not compatible with Axis", null);
      } catch (SecurityException e) {
        throw new ServiceException("Unexpected Exception.", e);
      } catch (NoSuchMethodException e) {
        throw new ServiceException("Unexpected Exception.", e);
      } catch (IllegalArgumentException e) {
        throw new ServiceException("Unexpected Exception.", e);
      } catch (IllegalAccessException e) {
        throw new ServiceException("Unexpected Exception.", e);
      } catch (InvocationTargetException e) {
        throw new ServiceException("Unexpected Exception.", e);
      } catch (ClassNotFoundException e) {
        throw new ServiceException("Unexpected Exception.", e);
      } catch (InstantiationException e) {
        throw new ServiceException("Unexpected Exception.", e);
      }
    }
docs: Creates a SOAP client using a SOAP service descriptor.
  
  @param soapServiceDescriptor the descriptor to use for creating a client
  @return the SOAP client for this descriptor
  @throws ServiceException thrown if the SOAP client cannot be created