X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=support%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fxml%2FClasspathUriResolver.java;fp=support%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fxml%2FClasspathUriResolver.java;h=cad0cb2f388fb3ddab48b81545f6621b229eb8df;hb=2136b85d7bde33a277d1dfd58b048ee6e5f5db8b;hp=6ee7389e4014256d03c67acaa1a7d260e4971f7a;hpb=df850821cf26ca07ef2474d4d2cabb61e9104291;p=utils diff --git a/support/general/src/main/java/org/wamblee/xml/ClasspathUriResolver.java b/support/general/src/main/java/org/wamblee/xml/ClasspathUriResolver.java index 6ee7389e..cad0cb2f 100644 --- a/support/general/src/main/java/org/wamblee/xml/ClasspathUriResolver.java +++ b/support/general/src/main/java/org/wamblee/xml/ClasspathUriResolver.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2010 the original author or authors. + * Copyright 2005-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,12 +33,23 @@ import javax.xml.transform.stream.StreamSource; * URI resolver that resolves stylesheets through the classpath. */ public class ClasspathUriResolver implements URIResolver, LSResourceResolver { + + private String base; + /** * Constructs the resolver. * */ public ClasspathUriResolver() { - // Empty. + base = null; + } + + /** + * Location in the classpath relative to which resolution takes place. + * @param aBase Base. + */ + public ClasspathUriResolver(String aBase) { + base = aBase; } /* @@ -49,7 +60,8 @@ public class ClasspathUriResolver implements URIResolver, LSResourceResolver { */ public Source resolve(String aHref, String aBase) throws TransformerException { - InputResource xslt = new ClassPathResource(aHref); + + InputResource xslt = resolveImpl(aHref); try { return new StreamSource(xslt.getInputStream()); @@ -60,12 +72,20 @@ public class ClasspathUriResolver implements URIResolver, LSResourceResolver { } } + private InputResource resolveImpl(String aHref) { + String systemId = aHref; + if ( base != null ) { + systemId = base + "/" + aHref; + } + InputResource xslt = new ClassPathResource(systemId); + return xslt; + } + @Override public LSInput resolveResource(String aType, String aNamespaceURI, String aPublicId, String aSystemId, String aBaseURI) { try { - InputStream xslt = new ClassPathResource(aSystemId) - .getInputStream(); + InputStream xslt = resolveImpl(aSystemId).getInputStream(); DOMImplementationLS impl = DomUtils.getDomImplementationLS(); LSInput input = impl.createLSInput(); input.setPublicId(aPublicId);