From 7dd986442b2926df14999bc36528d08ed474d8f3 Mon Sep 17 00:00:00 2001 From: pb Date: Thu, 22 May 2014 22:03:53 +0000 Subject: [PATCH] First part of Tomcat 7 compatibility. * Added Juli to classpath for ecdc Tomcat start script. "ant start" works. * Fixed error in web-sci.xml, added surrounding tags tp taglib tags. * Removed jd.sclt transformer (no longer maintained, latest release from 2003 * Removed XML factory implementation configuration using system wide environment variables (affecting and probably conflicting with other webapps in the container). Alternative configuration facility not yet implemented, using container fallback (which is saxon at the moment for xslt processor). CCM is currently execting in TC 7 for the public site, content-center doesn't work in TC 7 for now (but in TC6 as previously). git-svn-id: https://svn.libreccm.org/ccm/trunk@2644 8810af33-2d31-482b-a856-94f89814c4df --- .../{lib => etc/libsNolongerInUse}/jdxslt.jar | Bin .../com/arsdigita/templating/XSLTemplate.java | 9 +- .../JavaPropertyLoader.java.nolongerInUse | 85 -------------- ccm-core/src/com/arsdigita/xml/Document.java | 19 +-- ccm-core/src/com/arsdigita/xml/Element.java | 18 ++- .../src/com/arsdigita/xml/FactoriesSetup.java | 63 +++++----- ccm-core/src/com/arsdigita/xml/XML.java | 26 ++++- ccm-core/src/com/arsdigita/xml/XMLConfig.java | 108 ++++++++++++------ .../util/TransformerExceptionContainer.java | 3 - tools-ng/ecdc/scriptlib/build-runtime.xml | 6 +- 10 files changed, 167 insertions(+), 170 deletions(-) rename ccm-core/{lib => etc/libsNolongerInUse}/jdxslt.jar (100%) delete mode 100755 ccm-core/src/com/arsdigita/util/config/JavaPropertyLoader.java.nolongerInUse diff --git a/ccm-core/lib/jdxslt.jar b/ccm-core/etc/libsNolongerInUse/jdxslt.jar similarity index 100% rename from ccm-core/lib/jdxslt.jar rename to ccm-core/etc/libsNolongerInUse/jdxslt.jar diff --git a/ccm-core/src/com/arsdigita/templating/XSLTemplate.java b/ccm-core/src/com/arsdigita/templating/XSLTemplate.java index cf97aeaea..5913163dc 100755 --- a/ccm-core/src/com/arsdigita/templating/XSLTemplate.java +++ b/ccm-core/src/com/arsdigita/templating/XSLTemplate.java @@ -50,8 +50,8 @@ import org.apache.log4j.Logger; import org.w3c.dom.Document; /** - * A class for loading, caching and generally managing XSL templates - * and transformers. + * A class for loading, caching and generally managing XSL templates and + * transformers. * * @author Dan Berrange * @version $Id: XSLTemplate.java 1942 2009-05-29 07:53:23Z terry $ @@ -317,8 +317,10 @@ public final class XSLTemplate { * critical, because XSL files should always use * relative imports, which implies all imported files * will be in the same URL space. + * * @param os the output stream to write the ZIP to * @param base the base directory in which the files will extract + * @throws java.io.IOException */ public void toZIP(OutputStream os, String base) @@ -358,14 +360,17 @@ public final class XSLTemplate { private static class Log4JErrorListener implements ErrorListener { + @Override public void warning(TransformerException e) throws TransformerException { log(Level.WARN, e); } + @Override public void error(TransformerException e) throws TransformerException { log(Level.ERROR, e); } + @Override public void fatalError(TransformerException e) throws TransformerException { log(Level.FATAL, e); diff --git a/ccm-core/src/com/arsdigita/util/config/JavaPropertyLoader.java.nolongerInUse b/ccm-core/src/com/arsdigita/util/config/JavaPropertyLoader.java.nolongerInUse deleted file mode 100755 index f5267d02a..000000000 --- a/ccm-core/src/com/arsdigita/util/config/JavaPropertyLoader.java.nolongerInUse +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2003-2004 Red Hat Inc. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -package com.arsdigita.util.config; - -import com.arsdigita.util.Assert; -import com.arsdigita.util.JavaPropertyReader; -import com.arsdigita.util.parameter.Parameter; -import com.arsdigita.util.parameter.ParameterLoader; -import com.arsdigita.util.parameter.ParameterValue; -import java.util.Properties; -import org.apache.log4j.Logger; - -/** - * @deprecated Use {@link com.arsdigita.util.JavaPropertyReader} - * instead - */ -public class JavaPropertyLoader extends JavaPropertyReader - implements ParameterLoader { - public final static String versionId = - "$Id: JavaPropertyLoader.java 287 2005-02-22 00:29:02Z sskracic $" + - "$Author: sskracic $" + - "$DateTime: 2004/08/16 18:10:38 $"; - - private static final Logger s_log = Logger.getLogger - (JavaPropertyLoader.class); - - private final Properties m_props; - - /** - * Constructs a parameter loader that uses props. - * - * @param props The Properties object that stores - * property values; it cannot be null - */ - public JavaPropertyLoader(final Properties props) { - super(props); - - m_props = props; - } - - public final ParameterValue load(final Parameter param) { - if (s_log.isDebugEnabled()) { - s_log.debug("Loading " + param + " from " + this); - } - - Assert.exists(param, Parameter.class); - - final String key = param.getName(); - - if (m_props.containsKey(key)) { - final ParameterValue value = new ParameterValue(); - - value.setObject(param.read(this, value.getErrors())); - - return value; - } else { - return null; - } - } - - /** - * Returns a String representation of this object. - * - * @return super.toString() + ":" + properties.size() - */ - public String toString() { - return super.toString() + ":" + m_props.size(); - } -} diff --git a/ccm-core/src/com/arsdigita/xml/Document.java b/ccm-core/src/com/arsdigita/xml/Document.java index bca552e3f..5c24efdcd 100755 --- a/ccm-core/src/com/arsdigita/xml/Document.java +++ b/ccm-core/src/com/arsdigita/xml/Document.java @@ -48,15 +48,11 @@ import java.io.UnsupportedEncodingException; * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * * @author Patrick McNeill - * @version ACS 4.5a * @since ACS 4.5a + * @version $Id: Document.java 287 2005-02-22 00:29:02Z sskracic $ */ public class Document { - public static final String versionId = - "$Id: Document.java 287 2005-02-22 00:29:02Z sskracic $" - + " by $Author: sskracic $, " - + "$DateTime: 2004/08/16 18:10:38 $"; private static final Logger s_log = Logger.getLogger(Document.class.getName()); /** @@ -121,6 +117,7 @@ public class Document { s_builder.setNamespaceAware(true); s_db = new ThreadLocal() { + @Override public Object initialValue() { try { return s_builder.newDocumentBuilder(); @@ -140,6 +137,8 @@ public class Document { /** * Creates a new Document class with no root element. + * + * @throws javax.xml.parsers.ParserConfigurationException */ public Document() throws ParserConfigurationException { DocumentBuilder db = (DocumentBuilder) s_db.get(); @@ -165,6 +164,7 @@ public class Document { * Creates a new Document class with the given root element. * * @param rootNode the element to use as the root node + * @throws javax.xml.parsers.ParserConfigurationException */ public Document(Element rootNode) throws ParserConfigurationException { DocumentBuilder db = (DocumentBuilder) s_db.get(); @@ -179,8 +179,12 @@ public class Document { } /** - * Creates a document from the passed in string that should - * be properly formatted XML + * Creates a document from the passed in string that should + * be properly formatted XML + * + * @param xmlString + * @throws javax.xml.parsers.ParserConfigurationException + * @throws org.xml.sax.SAXException */ public Document(String xmlString) throws ParserConfigurationException, org.xml.sax.SAXException { @@ -345,6 +349,7 @@ public class Document { * without additional indenting. * @return a String representation of this. */ + @Override public String toString() { return toString(m_document, false); } diff --git a/ccm-core/src/com/arsdigita/xml/Element.java b/ccm-core/src/com/arsdigita/xml/Element.java index 64bd8f21d..bf9819683 100755 --- a/ccm-core/src/com/arsdigita/xml/Element.java +++ b/ccm-core/src/com/arsdigita/xml/Element.java @@ -188,6 +188,9 @@ public class Element { /** * Copies the passed in element and all of its children to a new * Element. + * + * @param copyFrom + * @return */ public Element newChildElement(Element copyFrom) { Assert.exists(copyFrom, Element.class); @@ -205,7 +208,11 @@ public class Element { /** * Copies the passed in element and all of its children to a new - * Element using the passed-in name + * Element using the passed-in name. + * + * @param name + * @param copyFrom + * @return */ public Element newChildElement(String name, Element copyFrom) { if (m_doc == null) { @@ -221,7 +228,12 @@ public class Element { /** * Copies the passed in element and all of its children to a new - * Element using the passed-in name + * Element using the passed-in name. + * + * @param name + * @param uri + * @param copyFrom + * @return */ public Element newChildElement(String name, String uri, Element copyFrom) { if (m_doc == null) { @@ -324,6 +336,8 @@ public class Element { /** * Returns the concatenation of all the text in all child nodes * of the current element. + * + * @return */ public String getText() { StringBuilder result = new StringBuilder(); diff --git a/ccm-core/src/com/arsdigita/xml/FactoriesSetup.java b/ccm-core/src/com/arsdigita/xml/FactoriesSetup.java index a935c37ab..de6c552f6 100755 --- a/ccm-core/src/com/arsdigita/xml/FactoriesSetup.java +++ b/ccm-core/src/com/arsdigita/xml/FactoriesSetup.java @@ -59,6 +59,30 @@ import org.apache.log4j.Logger; * modified by * @author pboy */ + + +// ///////////////////////////////////////////////////////////////////////////// +// +// NOTE: The ServiceProviderInterface as implementet by the JaxP factory +// class newInstance() follow a specific search order as explained above. +// The META-INF directory MUST be found via ContextClasspathLoader, i.e. must +// be located in WEB-INF/classes/META-INF or in a jar-file at WEB-INF/lib (or +// in one of the locations searched by common class loader which is not useful) +// Therefore is is not possible to switch a factory implementation after +// deployment at runtime or webapp startup, because both locations are not meant +// to be changed after deployment of an application. +// The alternative instantiation using newInstance(ImplementationClass, +// LoaderClass) is no replacement, because developers may use newInstance() +// anyway and probably get an unintended implementation. +// +// Therefore we must engage a quick'nd dirty way to achieve the goal and mess +// around with the WEB-INF/classes directory, until a better solution will be +// available. +// +// ///////////////////////////////////////////////////////////////////////////// + + + public class FactoriesSetup { private static final Logger s_log = Logger.getLogger @@ -71,12 +95,12 @@ public class FactoriesSetup { * method which modifies the system.property. */ public static void setupFactories() { - setupFactory("javax.xml.parsers.DocumentBuilderFactory", - XMLConfig.getConfig().getDOMBuilderFactoryClassname()); - setupFactory("javax.xml.parsers.SAXParserFactory", - XMLConfig.getConfig().getSAXParserFactoryClassname()); - setupFactory("javax.xml.transform.TransformerFactory", - XMLConfig.getConfig().getXSLTransformerFactoryClassname()); + // setupFactory("javax.xml.parsers.DocumentBuilderFactory", + // XMLConfig.getConfig().getDOMBuilderFactoryClassname()); + // setupFactory("javax.xml.parsers.SAXParserFactory", + // XMLConfig.getConfig().getSAXParserFactoryClassname()); + // setupFactory("javax.xml.transform.TransformerFactory", + // XMLConfig.getConfig().getXSLTransformerFactoryClassname()); } /* ************ internal worker methods section ************ */ @@ -97,8 +121,8 @@ public class FactoriesSetup { if (s_log.isInfoEnabled()) { s_log.info("Setting " + name + " to " + impl); } - System.setProperty(name, - impl); + // System.setProperty(name, + // impl); } else { if (s_log.isInfoEnabled()) { s_log.info("Leaving " + name + " as " + @@ -106,28 +130,5 @@ public class FactoriesSetup { } } } - /** - * Actually unfinished work. - * - * ToDo: Use an alternative Factory constructor of javax.xml. ... (e.g. - * DocumentBuilderFactory) which directly accepts a classname and a - * class loader, so we do not depend on a system wide configuration. - * - * @param impl the value of the class name of the factory to use - */ -// static void setupDomBuilderFactory( String implClass) { -// if (implClass != null) { - // if (s_log.isInfoEnabled()) { - // s_log.info("Setting " + name + " to " + impl); - // } - // System.setProperty(name, - // impl); -// } else { - // if (s_log.isInfoEnabled()) { - // s_log.info("Leaving " + name + " as " + - // System.getProperty(name)); - // } -// } -// } } diff --git a/ccm-core/src/com/arsdigita/xml/XML.java b/ccm-core/src/com/arsdigita/xml/XML.java index 5e9cb9d99..8d049781c 100755 --- a/ccm-core/src/com/arsdigita/xml/XML.java +++ b/ccm-core/src/com/arsdigita/xml/XML.java @@ -42,7 +42,7 @@ import org.xml.sax.helpers.DefaultHandler; import org.apache.log4j.Logger; /** - * Provides a set of helper methods for dealing with XML, + * Provides a set of static helper methods for dealing with XML, * including file parsing & object -> string serialization */ public class XML { @@ -51,13 +51,16 @@ public class XML { // private static XMLConfig s_config; - private static Map s_formatters = new HashMap(); + private static final Map s_formatters = new HashMap(); static { s_log.debug("Static initalizer starting..."); s_formatters.put(Date.class, new DateTimeFormatter()); s_log.debug("Static initalizer finished."); } + /** + * Constructor. All methods are static, no initialization required. + */ private XML() {} /** @@ -74,6 +77,8 @@ public class XML { /** * Registers a formatter for serializing objects of a * class to a String suitable for XML output. + * @param klass + * @param formatter */ public static void registerFormatter(Class klass, Formatter formatter) { @@ -82,6 +87,7 @@ public class XML { /** * Unregisters a formatter against a class. + * @param klass */ public static void unregisterFormatter(Class klass) { s_formatters.remove(klass); @@ -98,6 +104,7 @@ public class XML { /** * Looks for the best matching formatter. + * * @param klass the class to find a formatter for * @return the formatter, or null if non is registered */ @@ -115,7 +122,10 @@ public class XML { * matching registered Formatter implementation. Looks * for a formatter registered against the object's * class first, then its superclass, etc. If no formatter - * is found, uses the toString() method + * is found, uses the toString() method. + * + * @param value + * @return */ public static String format(Object value) { if (value == null) { @@ -219,11 +229,14 @@ public class XML { /** * Prints the skeleton structure of the element to the supplied print * writer. + * @param element + * @param writer **/ public static void toSkeleton(final Element element, final PrintWriter writer) { XML.traverse(element, 0, new Action() { + @Override public void apply(Element elem, int level) { final String padding = " "; for (int ii=0; ii + + --> @@ -92,7 +94,7 @@ - +