
nu.validator.xml.LocalCacheEntityResolver Maven / Gradle / Ivy
package nu.validator.xml;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Map;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
/**
* @version $Id$
* @author hsivonen
*/
public class LocalCacheEntityResolver implements EntityResolver {
private Map pathMap;
private EntityResolver delegate;
private boolean allowRnc = false;
/**
* The map must be safe for concurrent reads.
*
* @param pathMap
* @param delegate
*/
public LocalCacheEntityResolver(Map pathMap, EntityResolver delegate) {
this.pathMap = pathMap;
this.delegate = delegate;
}
/**
* @see org.xml.sax.EntityResolver#resolveEntity(java.lang.String,
* java.lang.String)
*/
@Override
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException {
String path = pathMap.get(systemId);
if(path != null) {
File f = new File(path);
if (f.exists()) {
TypedInputSource is = new TypedInputSource();
is.setByteStream(new FileInputStream(f));
is.setSystemId(systemId);
is.setPublicId(publicId);
if(systemId.endsWith(".rnc")) {
is.setType("application/relax-ng-compact-syntax");
if(!allowRnc) {
throw new IOException("Not an XML resource: " + systemId);
}
} else if(systemId.endsWith(".dtd")) {
is.setType("application/xml-dtd");
} else if(systemId.endsWith(".ent")) {
is.setType("application/xml-external-parsed-entity");
} else {
is.setType("application/xml");
}
return is;
}
}
return delegate.resolveEntity(publicId, systemId);
}
/**
* @return Returns the allowRnc.
*/
public boolean isAllowRnc() {
return allowRnc;
}
/**
* @param allowRnc The allowRnc to set.
*/
public void setAllowRnc(boolean allowRnc) {
this.allowRnc = allowRnc;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy