CatalogResolver

CatalogResolver (카탈로그 리졸버)

SAX EntityResolver, StAX XMLResolver, DOM LSResourceResolver, Transform URIResolver를 구현해 카탈로그로 외부 참조를 해석하는 인터페이스예요.

출처: Java API Reference

본문

public interface CatalogResolver
    extends EntityResolver, XMLResolver,
            URIResolver, LSResourceResolver

CatalogResolver는 카탈로그로 외부 참조를 해석하는 리졸버예요. SAX의 EntityResolver, StAX의 XMLResolver, 스키마 검증에서 쓰는 DOM LS의 LSResourceResolver, 그리고 Transform의 URIResolver를 함께 구현해요.

카탈로그 표준은 public·system 식별자 엔트리를 DTD 식별용으로, uri 엔트리를 스타일시트·스키마 같은 다른 자원용으로 구분했지만, Java API는 그런 구분을 하지 않아요. 그래서 이 리졸버는 system 식별자를 URI로 보고 카탈로그의 system과 uri 엔트리를 모두 검색해요.

검색은 현재 카탈로그에서 시작하고, 일치 항목을 찾으면 그만둬요. 현재 카탈로그에 없을 때만 delegate·next 카탈로그 같은 대체 카탈로그를 고려해요.

먼저 systemId로 system 계열 엔트리(system, rewriteSystem, systemSuffix)를 찾고, 없으면 prefer 속성에 따라 public 엔트리를 찾아요. 그래도 없으면 systemId 또는 href로 uri 계열 엔트리(uri, rewriteURI, uriSuffix)를 검색해요.

javax.xml.catalog.resolve가 strict로 지정된 경우에만 CatalogException을 던져요. checked exception을 직접 처리하고 싶다면 커스텀 리졸버로 감싸거나 Catalog 객체로 직접 구현하는 편이 좋아요.

더 알아보기

Java 공식 API