public static final Object fromCompactExternalId(String compactExternalId, CycAccess access)
          throws IOException {
    if ((compactExternalId == null) || ("".equals(compactExternalId))) {
      throw new IllegalArgumentException(compactExternalId + "is not a valid compact external id.");
    }
    // @todo support CompactHLIDConverter.converter() once we can simply identify
    // if a compact external id is a String or Number
    Object result = compactExternalIdToCycObjectCache.get(compactExternalId);
    if (result != null) {
      return result;
    }
    if (CompactHLIDConverter.converter().isNumberCompactHLId(compactExternalId)) {
      Number num = (Number) CompactHLIDConverter.converter().fromCompactHLId(compactExternalId);
      result = CycObjectFactory.makeCycNumber(num);
    } else {
      result = access.converseObject("(find-cycl-object-by-compact-hl-external-id-string " + DefaultCycObject.stringApiValue(compactExternalId) + ")");
    }
    compactExternalIdToCycObjectCache.put(compactExternalId, result);
    return result;
  }