X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=support%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fxml%2FClasspathUriResolver.java;h=cad0cb2f388fb3ddab48b81545f6621b229eb8df;hb=c59a5c77753484df1a1aed3214f5f34d9692c42c;hp=ba2d875c3aeb591e2e13829dc47cd88c4bb780cf;hpb=32a62ca2c752e33a7873ac868a7a1f289caedcd4;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 ba2d875c..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 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. @@ -13,48 +13,90 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.wamblee.xml; +import org.w3c.dom.ls.DOMImplementationLS; +import org.w3c.dom.ls.LSInput; +import org.w3c.dom.ls.LSResourceResolver; +import org.wamblee.io.ClassPathResource; +import org.wamblee.io.InputResource; + import java.io.IOException; +import java.io.InputStream; import javax.xml.transform.Source; import javax.xml.transform.TransformerException; import javax.xml.transform.URIResolver; import javax.xml.transform.stream.StreamSource; -import org.wamblee.io.ClassPathResource; -import org.wamblee.io.InputResource; - /** * URI resolver that resolves stylesheets through the classpath. */ -public class ClasspathUriResolver implements URIResolver { - +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; } /* * (non-Javadoc) * * @see javax.xml.transform.URIResolver#resolve(java.lang.String, - * java.lang.String) + * java.lang.String) */ public Source resolve(String aHref, String aBase) - throws TransformerException { - InputResource xslt = new ClassPathResource(aHref); + throws TransformerException { + + InputResource xslt = resolveImpl(aHref); + try { return new StreamSource(xslt.getInputStream()); } catch (IOException e) { throw new TransformerException( - "Could not get XSLT style sheet in classpath '" + aHref - + "'", e); + "Could not get XSLT style sheet in classpath '" + aHref + "'", + e); + } + } + + 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 = resolveImpl(aSystemId).getInputStream(); + DOMImplementationLS impl = DomUtils.getDomImplementationLS(); + LSInput input = impl.createLSInput(); + input.setPublicId(aPublicId); + input.setSystemId(aSystemId); + input.setByteStream(xslt); + return input; + } catch (IOException e) { + return null; } + + } }