From 96a67c29787d1fd04807cc6c2eb8d197bb8ea70a Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 8 Feb 2018 13:41:00 +0000 Subject: [PATCH] CCM NG: - URIResolver for XSLT Themes now works (and with that xsl:import etc. in the XSL files) - Fixed ambiguous URL patterns in Images git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5261 8810af33-2d31-482b-a856-94f89814c4df --- .../src/main/resources/log4j2.xml | 9 +++++--- .../librecms/contentsection/rs/Images.java | 4 ++-- .../libreccm/theming/xslt/CcmUriResolver.java | 23 +++++++++++++++++-- .../theming/xslt/XsltThemeProcessor.java | 11 +++++---- .../resources/themes/ccm/category-page.xsl | 14 ++++++----- 5 files changed, 44 insertions(+), 17 deletions(-) diff --git a/ccm-bundle-devel-wildfly-web/src/main/resources/log4j2.xml b/ccm-bundle-devel-wildfly-web/src/main/resources/log4j2.xml index 4927cf628..ad3d929fb 100644 --- a/ccm-bundle-devel-wildfly-web/src/main/resources/log4j2.xml +++ b/ccm-bundle-devel-wildfly-web/src/main/resources/log4j2.xml @@ -80,6 +80,9 @@ + + @@ -93,10 +96,10 @@ level="debug"> + level="debug"> - + diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/rs/Images.java b/ccm-cms/src/main/java/org/librecms/contentsection/rs/Images.java index 8a8ee55ee..220e5bf06 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/rs/Images.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/rs/Images.java @@ -161,7 +161,7 @@ public class Images { * @return A {@link Response} containing the scaled image or an error value. */ @GET - @Path("/{path:.+}") + @Path("/{path:^(?!uuid).+$}") public Response getImage( @PathParam("content-section") final String sectionName, @@ -220,7 +220,7 @@ public class Images { * image. */ @GET - @Path("/{path:.*}/properties") + @Path("/{path:^(?!uuid).+$}/properties") public Response getImageProperties( @PathParam("content-section") final String sectionName, @PathParam("path") final String path) { diff --git a/ccm-core/src/main/java/org/libreccm/theming/xslt/CcmUriResolver.java b/ccm-core/src/main/java/org/libreccm/theming/xslt/CcmUriResolver.java index 23b388c65..3421fd416 100644 --- a/ccm-core/src/main/java/org/libreccm/theming/xslt/CcmUriResolver.java +++ b/ccm-core/src/main/java/org/libreccm/theming/xslt/CcmUriResolver.java @@ -18,12 +18,13 @@ */ package org.libreccm.theming.xslt; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.libreccm.theming.ThemeProvider; import org.libreccm.theming.ThemeVersion; import java.io.InputStream; import java.util.Objects; -import java.util.Optional; import javax.xml.transform.Source; import javax.xml.transform.TransformerException; @@ -36,6 +37,9 @@ import javax.xml.transform.stream.StreamSource; */ class CcmUriResolver implements URIResolver { + private static final Logger LOGGER = LogManager + .getLogger(CcmUriResolver.class); + private final String theme; private final ThemeVersion version; private final ThemeProvider themeProvider; @@ -48,6 +52,13 @@ class CcmUriResolver implements URIResolver { Objects.requireNonNull(version); Objects.requireNonNull(themeProvider); + LOGGER.debug("Creating new instance of {} with these parameters:", + getClass().getName()); + LOGGER.debug("\ttheme = {}", theme); + LOGGER.debug("\tversion = {}", Objects.toString(version)); + LOGGER.debug("\tthemeProvider = {}", + themeProvider.getClass().getName()); + this.theme = theme; this.version = version; this.themeProvider = themeProvider; @@ -57,12 +68,17 @@ class CcmUriResolver implements URIResolver { public Source resolve(final String href, final String base) throws TransformerException { + LOGGER.debug("Resolving href = \"{}\" using base = \"{}\"...", + href, + base); + final String path; if (base == null) { path = href; } else { - path = String.join("/", href, base); + path = String.join("/", base, href); } + LOGGER.debug("Using path \"{}\"...", path); final InputStream inputStream = themeProvider .getThemeFileAsStream(theme, version, path) @@ -76,6 +92,9 @@ class CcmUriResolver implements URIResolver { version, themeProvider.getClass().getName()))); + LOGGER.debug("Resolved href = \"{}\" with base \"{}\" successfully.", + href, + path); return new StreamSource(inputStream); } diff --git a/ccm-core/src/main/java/org/libreccm/theming/xslt/XsltThemeProcessor.java b/ccm-core/src/main/java/org/libreccm/theming/xslt/XsltThemeProcessor.java index 0746a55f7..cf5d407ee 100644 --- a/ccm-core/src/main/java/org/libreccm/theming/xslt/XsltThemeProcessor.java +++ b/ccm-core/src/main/java/org/libreccm/theming/xslt/XsltThemeProcessor.java @@ -137,7 +137,7 @@ public class XsltThemeProcessor implements ThemeProcessor { } catch (ParserConfigurationException ex) { throw new UnexpectedErrorException(ex); } - + final Document document; try { final InputStream xmlBytesStream = new ByteArrayInputStream( @@ -201,6 +201,9 @@ public class XsltThemeProcessor implements ThemeProcessor { final TransformerFactory transformerFactory = TransformerFactory .newInstance(TransformerFactoryImpl.class.getName(), getClass().getClassLoader()); + transformerFactory.setURIResolver(new CcmUriResolver(theme.getName(), + theme.getVersion(), + themeProvider)); final TransformerFactoryImpl transformerFactoryImpl = (TransformerFactoryImpl) transformerFactory; final Configuration configuration = transformerFactoryImpl @@ -215,9 +218,9 @@ public class XsltThemeProcessor implements ThemeProcessor { final Transformer transformer; try { transformer = transformerFactory.newTransformer(xslFileStreamSource); - transformer.setURIResolver(new CcmUriResolver(theme.getName(), - theme.getVersion(), - themeProvider)); +// transformer.setURIResolver(new CcmUriResolver(theme.getName(), +// theme.getVersion(), +// themeProvider)); transformer.setErrorListener(new ErrorListener() { @Override diff --git a/ccm-core/src/main/resources/themes/ccm/category-page.xsl b/ccm-core/src/main/resources/themes/ccm/category-page.xsl index 1da2b8e4d..fbcdc1a5b 100644 --- a/ccm-core/src/main/resources/themes/ccm/category-page.xsl +++ b/ccm-core/src/main/resources/themes/ccm/category-page.xsl @@ -4,10 +4,12 @@ xmlns:ccm="http://xmlns.libreccm.org" exclude-result-prefixes="ccm xsl"> + + + doctype-system="about:legacy-compat" + indent="yes" + encoding="utf-8"/> @@ -51,7 +53,8 @@ -