Information

0
Story Points

Technologies

Decompiled Java File
package org.exolab.castor.xml.util;

import java.util.StringTokenizer;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.castor.core.util.AbstractProperties;
import org.castor.core.util.Messages;
import org.exolab.castor.xml.OutputFormat;
import org.exolab.castor.xml.Serializer;
import org.exolab.castor.xml.XMLSerializerFactory;
import org.xml.sax.Parser;
import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
import org.xml.sax.XMLReader;

public class XMLParserUtils {
   static final Log LOG = LogFactory.getFactory().getInstance(XMLParserUtils.class);
   private static final String VALIDATION = "http://xml.org/sax/features/validation";
   private static final String NAMESPACES = "http://xml.org/sax/features/namespaces";

   public static void setFeaturesOnXmlReader(String parserFeatures, String parserFeaturesToDisable, boolean validation, boolean namespaces, XMLReader xmlReader) {
      try {
         xmlReader.setFeature("http://xml.org/sax/features/validation", validation);
         xmlReader.setFeature("http://xml.org/sax/features/namespaces", namespaces);
         enableFeatures(parserFeatures, xmlReader);
         disableFeatures(parserFeaturesToDisable, xmlReader);
      } catch (SAXException var6) {
         LOG.error(Messages.format("conf.configurationError", var6));
      }

   }

   private static void enableFeatures(String features, XMLReader xmlReader) throws SAXNotRecognizedException, SAXNotSupportedException {
      if(features != null) {
         StringTokenizer token = new StringTokenizer(features, ", ");

         while(token.hasMoreTokens()) {
            xmlReader.setFeature(token.nextToken(), true);
         }
      }

   }

   private static void disableFeatures(String features, XMLReader xmlReader) throws SAXNotRecognizedException, SAXNotSupportedException {
      if(features != null) {
         StringTokenizer token = new StringTokenizer(features, ", ");

         while(token.hasMoreTokens()) {
            xmlReader.setFeature(token.nextToken(), false);
         }
      }

   }

   public static SAXParser getSAXParser(boolean validation, boolean namespaces) {
      SAXParser saxParser = null;
      SAXParserFactory factory = SAXParserFactory.newInstance();
      factory.setNamespaceAware(namespaces);
      factory.setValidating(validation);

      try {
         saxParser = factory.newSAXParser();
         if(LOG.isDebugEnabled()) {
            LOG.debug("Successfully instantiated a JAXP SAXParser instance.");
         }
      } catch (ParserConfigurationException var5) {
         LOG.error(Messages.format("conf.configurationError", var5));
      } catch (SAXException var6) {
         LOG.error(Messages.format("conf.configurationError", var6));
      }

      return saxParser;
   }

   public static XMLReader instantiateXMLReader(String className) {
      try {
         Class except = Class.forName(className);
         XMLReader xmlReader = (XMLReader)except.newInstance();
         if(LOG.isDebugEnabled()) {
            LOG.debug("Successfully instantiated " + className);
         }

         return xmlReader;
      } catch (Exception var3) {
         throw new RuntimeException(Messages.format("conf.failedInstantiateParser", className, var3));
      }
   }

   public static Parser instantiateParser(String className) {
      try {
         Class except = Class.forName(className);
         Parser parser = (Parser)except.newInstance();
         if(LOG.isDebugEnabled()) {
            LOG.debug("Successfully instantiated " + className);
         }

         return parser;
      } catch (Exception var3) {
         throw new RuntimeException(Messages.format("conf.failedInstantiateParser", className, var3));
      }
   }

   public static Parser getParser(AbstractProperties properties, String features) {
      Parser parser = null;
      Boolean validation = properties.getBoolean("org.exolab.castor.parser.validation");
      Boolean namespaces = properties.getBoolean("org.exolab.castor.parser.namespaces");
      String parserClassName = properties.getString("org.exolab.castor.parser");
      if(parserClassName == null || parserClassName.length() == 0) {
         SAXParser xmlReader = getSAXParser(validation.booleanValue(), namespaces.booleanValue());
         if(xmlReader != null) {
            try {
               parser = xmlReader.getParser();
            } catch (SAXException var8) {
               LOG.error(Messages.format("conf.configurationError", var8));
            }
         }
      }

      if(parser == null) {
         if(parserClassName == null || parserClassName.length() == 0 || parserClassName.equalsIgnoreCase("xerces")) {
            parserClassName = "org.apache.xerces.parsers.SAXParser";
         }

         parser = instantiateParser(parserClassName);
         if(parser instanceof XMLReader) {
            XMLReader xmlReader1 = (XMLReader)parser;
            setFeaturesOnXmlReader(properties.getString("org.exolab.castor.sax.features", features), properties.getString("org.exolab.castor.sax.features-to-disable", ""), validation.booleanValue(), namespaces.booleanValue(), xmlReader1);
         }
      }

      return parser;
   }

   public static Serializer getSerializer(AbstractProperties properties) {
      Serializer serializer = getSerializerFactory(properties.getString("org.exolab.castor.xml.serializer.factory")).getSerializer();
      serializer.setOutputFormat(getOutputFormat(properties));
      return serializer;
   }

   public static OutputFormat getOutputFormat(AbstractProperties properties) {
      boolean indent = properties.getBoolean("org.exolab.castor.indent", false);
      OutputFormat format = getSerializerFactory(properties.getString("org.exolab.castor.xml.serializer.factory")).getOutputFormat();
      format.setMethod("xml");
      format.setIndenting(indent);
      if(!indent) {
         format.setPreserveSpace(true);
      }

      return format;
   }

   public static XMLSerializerFactory getSerializerFactory(String serializerFactoryName) {
      try {
         XMLSerializerFactory serializerFactory = (XMLSerializerFactory)Class.forName(serializerFactoryName).newInstance();
         return serializerFactory;
      } catch (Exception var3) {
         throw new RuntimeException(Messages.format("conf.failedInstantiateSerializerFactory", serializerFactoryName, var3));
      }
   }
}
Page generated: Oct 19, 2017 2:35:07 PM