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; package org.slub.rosetta.dps.repository.plugin;
import org.apache.xerces.util.XMLCatalogResolver;
import org.w3c.dom.ls.LSInput; import org.w3c.dom.ls.LSInput;
import org.xml.sax.InputSource; import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import javax.xml.catalog.CatalogException; import javax.xml.catalog.CatalogException;
import javax.xml.catalog.CatalogFeatures;
import javax.xml.catalog.CatalogResolver; import javax.xml.catalog.CatalogResolver;
import javax.xml.transform.Source; import javax.xml.transform.Source;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.URI;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import static javax.xml.catalog.CatalogManager.catalogResolver;
class ValidationCatalogResolver implements 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<>() { private final HashMap<String, String> public2res = new HashMap<>() {
// TODO: add support for catalog.xml files. // TODO: add support for catalog.xml files.
{ {
...@@ -29,6 +33,18 @@ class ValidationCatalogResolver implements CatalogResolver { ...@@ -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 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 @Override
public InputSource resolveEntity(String publicId, String systemId) { public InputSource resolveEntity(String publicId, String systemId) {
System.out.println("======"); System.out.println("======");
...@@ -36,18 +52,12 @@ class ValidationCatalogResolver implements CatalogResolver { ...@@ -36,18 +52,12 @@ class ValidationCatalogResolver implements CatalogResolver {
/* TODO: only allow catalog calls to defined ressources */ /* TODO: only allow catalog calls to defined ressources */
if (allowedDtds.contains(publicId)) { if (allowedDtds.contains(publicId)) {
System.out.println("fallback to CatalogResolver"); System.out.println("fallback to CatalogResolver");
//CatalogFeatures f = CatalogFeatures.builder().with(CatalogFeatures.Feature.RESOLVE, "continue").build();
var strippedSystemId = systemId; var strippedSystemId = systemId;
if (!systemId.startsWith("http://")) { if (!systemId.startsWith("http://")) {
strippedSystemId = "file:/etc/xml/" + systemId.substring(systemId.lastIndexOf("/") + 1); strippedSystemId = "file:/etc/xml/" + systemId.substring(systemId.lastIndexOf("/") + 1);
} }
System.out.println("\tusing URI=" + strippedSystemId); System.out.println("\tusing URI=" + strippedSystemId);
try { return callDefaultCatalogResolver(publicId, systemId);
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());
}
} }
if (public2res.containsKey(publicId)) { if (public2res.containsKey(publicId)) {
System.out.println("\tressource=" + public2res.get(publicId)); System.out.println("\tressource=" + public2res.get(publicId));
...@@ -59,12 +69,7 @@ class ValidationCatalogResolver implements CatalogResolver { ...@@ -59,12 +69,7 @@ class ValidationCatalogResolver implements CatalogResolver {
} }
System.out.println("\tnot implemented (no fallback, no mapping)"); System.out.println("\tnot implemented (no fallback, no mapping)");
if (systemId.startsWith("http://")) { if (systemId.startsWith("http://")) {
try { return callDefaultCatalogResolver(publicId, systemId);
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 null; return null;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment