Skip to content
Snippets Groups Projects
Commit 68c404ca authored by Andreas Romeyke's avatar Andreas Romeyke
Browse files

- add catalog files

- refactoring, extracted callDefaultCatalogResolver()
parent 6e3a32a3
No related branches found
No related tags found
No related merge requests found
package org.slub.rosetta.dps.repository.plugin;
import org.apache.xerces.util.XMLCatalogResolver;
import org.w3c.dom.ls.LSInput;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import javax.xml.catalog.CatalogException;
import javax.xml.catalog.CatalogFeatures;
import javax.xml.catalog.CatalogResolver;
import javax.xml.transform.Source;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import static javax.xml.catalog.CatalogManager.catalogResolver;
class ValidationCatalogResolver implements CatalogResolver {
private final String[] catalogs = {
"/etc/xml/catalog",
"/usr/share/xml/docbook/schema/dtd/catalog.xml",
/* TODO */
};
private final HashMap<String, String> public2res = new HashMap<>() {
// TODO: add support for catalog.xml files.
{
......@@ -29,6 +33,18 @@ class ValidationCatalogResolver implements CatalogResolver {
};
private final HashSet<String> allowedDtds = new HashSet<>(Arrays.asList("-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.1 20151215//EN"));
private InputSource callDefaultCatalogResolver (String publicId, String systemId) {
InputSource result = null;
try {
XMLCatalogResolver cr = new XMLCatalogResolver();
cr.setPreferPublic(true);
cr.setCatalogList(catalogs);
result = cr.resolveEntity(publicId, systemId);
} catch (IOException | CatalogException | SAXException e) {
System.out.println("No mapping found for publicId=" + publicId + ", systemId=" + systemId + ", " + e.getMessage());
}
return result;
}
@Override
public InputSource resolveEntity(String publicId, String systemId) {
System.out.println("======");
......@@ -36,18 +52,12 @@ class ValidationCatalogResolver implements CatalogResolver {
/* TODO: only allow catalog calls to defined ressources */
if (allowedDtds.contains(publicId)) {
System.out.println("fallback to CatalogResolver");
//CatalogFeatures f = CatalogFeatures.builder().with(CatalogFeatures.Feature.RESOLVE, "continue").build();
var strippedSystemId = systemId;
if (!systemId.startsWith("http://")) {
strippedSystemId = "file:/etc/xml/" + systemId.substring(systemId.lastIndexOf("/") + 1);
}
System.out.println("\tusing URI=" + strippedSystemId);
try {
CatalogResolver cr = catalogResolver(CatalogFeatures.defaults(), URI.create(strippedSystemId));
return cr.resolveEntity(publicId, systemId);
} catch (CatalogException e) {
System.out.println("No local mapping found for publicId=" + publicId + ", systemId=" + systemId + ", " + e.getMessage());
}
return callDefaultCatalogResolver(publicId, systemId);
}
if (public2res.containsKey(publicId)) {
System.out.println("\tressource=" + public2res.get(publicId));
......@@ -59,12 +69,7 @@ class ValidationCatalogResolver implements CatalogResolver {
}
System.out.println("\tnot implemented (no fallback, no mapping)");
if (systemId.startsWith("http://")) {
try {
CatalogResolver cr = catalogResolver(CatalogFeatures.defaults(), URI.create(systemId));
return cr.resolveEntity(publicId, systemId);
} catch (CatalogException e) {
System.out.println("No mapping found for publicId=" + publicId + ", systemId=" + systemId + ", " + e.getMessage());
}
return callDefaultCatalogResolver(publicId, systemId);
}
return null;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment