/**
   * @param contextURI
   * @param wsdlURI
   * @param userName
   * @param password
   * @return
   * @throws WSDLException
   */
  public Definition readWSDL(String contextURI, String wsdlURI, String userName, String password)
      throws WSDLException {
    try {
      if (verbose) {
        System.out.println(
            "Retrieving document at '"
                + wsdlURI
                + "'" //$NON-NLS-1$ //$NON-NLS-2$
                + (contextURI == null
                    ? "."
                    : ", relative to '"
                        + contextURI
                        + "'.")); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
      }

      URL contextURL = (contextURI != null) ? StringUtils.getURL(null, contextURI) : null;
      URL url = StringUtils.getURL(contextURL, wsdlURI);
      URLConnection urlConn = url.openConnection();
      URLHelper.setCredentials(urlConn, userName, password);

      InputStream inputStream = urlConn.getInputStream();
      InputSource inputSource = new InputSource(urlConn.getInputStream());
      inputSource.setSystemId(url.toString());
      Document doc = getDocument(inputSource, url.toString());

      inputStream.close();

      Definition def = readWSDL(url.toString(), doc);

      return def;
    } catch (WSDLException e) {
      throw e;
    } catch (RuntimeException e) {
      throw e;
    } catch (Exception e) {
      throw new WSDLException(
          WSDLException.OTHER_ERROR,
          "Unable to resolve imported document at '"
              + wsdlURI //$NON-NLS-1$
              + (contextURI == null
                  ? "'."
                  : "', relative to '"
                      + contextURI
                      + "'."), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
          e);
    }
  }