From 68c404cab39f691c58f35ac61e4a946ff9dcbf18 Mon Sep 17 00:00:00 2001 From: Andreas Romeyke <andreas.romeyke@slub-dresden.de> Date: Mon, 20 Feb 2023 13:15:04 +0100 Subject: [PATCH] - add catalog files - refactoring, extracted callDefaultCatalogResolver() --- .../plugin/ValidationCatalogResolver.java | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/java/org/slub/rosetta/dps/repository/plugin/ValidationCatalogResolver.java b/java/org/slub/rosetta/dps/repository/plugin/ValidationCatalogResolver.java index 98be53e..b3a36cc 100644 --- a/java/org/slub/rosetta/dps/repository/plugin/ValidationCatalogResolver.java +++ b/java/org/slub/rosetta/dps/repository/plugin/ValidationCatalogResolver.java @@ -1,21 +1,25 @@ 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; } -- GitLab