/*
- * 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.
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* 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;
/**
* 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;
}
/*
*/
public Source resolve(String aHref, String aBase)
throws TransformerException {
- InputResource xslt = new ClassPathResource(aHref);
+
+ InputResource xslt = resolveImpl(aHref);
try {
return new StreamSource(xslt.getInputStream());
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;
+ }
+
+
+ }
+
}