2009-07-01 4 views
0

나는 이미 사용자 지정 URIResolver ('servlet-context :'URIs ')를 설정 한 Java에서 XSLT Transformer를 가지고 있습니다. 실제로 PDF 로의 Apache FOP 렌더링입니다.TransformerFactory에서 둘 이상의 URIResolver가 필요합니까?

이제 다른 URIResolver (캐싱 DTD를위한 CatalogResolver)를 추가로 사용해야합니다.

두 URI 중 하나를 호출하는 자체 URIResolver를 작성해야합니까, 아니면 더 좋은 방법이 있습니까?

답변

1

URIResolver은 참조를 확인할 수없는 경우 null을 반환해야합니다. 이것에 의해, 기본의 리절버를 시험 할 수가 있습니다.

리졸버를 구성 할 때 다른 하나의 파라미터로 URIResolver을 생성하면 리졸버 체인을 사용할 수 있습니다.

TransformerFactory tf; 
tf.setURIResolver(new SomeOtherResolver()); 
tf.setURIResolver(new MyResolver(tf.getURIResolver()); 

public class MyResolver implements URIResolver { 
    public MyResolver(URIResolver nextInLine) { 
     this.nextInLine = nextInLine; 
    } 
    private URIResolver nextInLine; 
    public Source resolve(String href, String base) throws TransformerException { 
     ...try to solve and return Source object... 
     return nextInLine; // instead of returning null on failure, return nextInLine 
    } 
} 

대안은 목록으로 리졸버의 체인을 설정할 수 리졸버를 작성하는 것이며, 비 null 응답이 반환 될 때까지 호출 유지하고, 그 다음을 반환합니다.

관련 문제