/**
   * Returns the URI mapping in the catalog for the given external identifier or <code>null</code>
   * if no mapping exists. If the system identifier is an URN in the <code>publicid</code> namespace
   * it is converted into a public identifier by URN "unwrapping" as specified in the XML Catalogs
   * specification.
   *
   * @param systemId the system identifier to locate in the catalog
   * @return the mapped URI or <code>null</code> if no mapping was found in the catalog
   * @throws IOException if an i/o error occurred while reading the catalog
   */
  public final synchronized String resolveSystem(String systemId) throws IOException {

    if (fCatalogsChanged) {
      parseCatalogs();
      fCatalogsChanged = false;
    }
    return (fCatalog != null) ? fCatalog.resolveSystem(systemId) : null;
  }