Author: uschindler
Date: Mon Aug 18 16:01:35 2014
New Revision: 1618644

URL: http://svn.apache.org/r1618644
Log:
Add Dominik's suggestion to DocumentBuilderFactories. I also removed the 
setXIncludeAware(false) in XMLHelper, because it causes the same problem and is 
disabled by default.

Modified:
    poi/trunk/src/java/org/apache/poi/util/XMLHelper.java
    poi/trunk/src/ooxml/java/org/apache/poi/util/DocumentHelper.java
    poi/trunk/src/ooxml/java/org/apache/poi/util/SAXHelper.java

Modified: poi/trunk/src/java/org/apache/poi/util/XMLHelper.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/XMLHelper.java?rev=1618644&r1=1618643&r2=1618644&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/util/XMLHelper.java (original)
+++ poi/trunk/src/java/org/apache/poi/util/XMLHelper.java Mon Aug 18 16:01:35 
2014
@@ -19,7 +19,6 @@ package org.apache.poi.util;
 
 import javax.xml.XMLConstants;
 import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
 
 /**
  * Helper methods for working with javax.xml classes.
@@ -27,22 +26,31 @@ import javax.xml.parsers.ParserConfigura
  */
 public final class XMLHelper
 {
+    private static POILogger logger = POILogFactory.getLogger(XMLHelper.class);
+    
     /**
      * Creates a new DocumentBuilderFactory, with sensible defaults
      */
     public static DocumentBuilderFactory getDocumentBuilderFactory() {
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        factory.setExpandEntityReferences(false);
+        trySetSAXFeature(factory, XMLConstants.FEATURE_SECURE_PROCESSING, 
true);
+        trySetSAXFeature(factory, 
"http://xml.org/sax/features/external-general-entities";, false);
+        trySetSAXFeature(factory, 
"http://xml.org/sax/features/external-parameter-entities";, false);
+        trySetSAXFeature(factory, 
"http://apache.org/xml/features/nonvalidating/load-external-dtd";, false);
+        trySetSAXFeature(factory, 
"http://apache.org/xml/features/nonvalidating/load-dtd-grammar";, false);
+        return factory;
+    }
+    
+    private static void trySetSAXFeature(DocumentBuilderFactory 
documentBuilderFactory, String feature, boolean enabled) {
         try {
-            DocumentBuilderFactory factory = 
DocumentBuilderFactory.newInstance();
-            factory.setXIncludeAware(false);
-            factory.setExpandEntityReferences(false);
-            factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
-            
factory.setFeature("http://xml.org/sax/features/external-general-entities";, 
false);
-            
factory.setFeature("http://xml.org/sax/features/external-parameter-entities";, 
false);
-            
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd";,
 false);
-            
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar";,
 false);
-            return factory;
-        } catch (ParserConfigurationException e) {
-            throw new RuntimeException("Broken XML Setup", e);
+            documentBuilderFactory.setFeature(feature, enabled);
+        } catch (Exception e) {
+            logger.log(POILogger.WARN, "SAX Feature unsupported", feature, e);
+        } catch (AbstractMethodError ame) {
+            logger.log(POILogger.WARN, "Cannot set SAX feature because 
outdated XML parser in classpath", feature, ame);
         }
     }
+    
+
 }

Modified: poi/trunk/src/ooxml/java/org/apache/poi/util/DocumentHelper.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/util/DocumentHelper.java?rev=1618644&r1=1618643&r2=1618644&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/util/DocumentHelper.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/util/DocumentHelper.java Mon Aug 18 
16:01:35 2014
@@ -61,9 +61,12 @@ public final class DocumentHelper {
         try {
             documentBuilderFactory.setFeature(feature, enabled);
         } catch (Exception e) {
-            logger.log(POILogger.INFO, "SAX Feature unsupported", feature, e);
+            logger.log(POILogger.WARN, "SAX Feature unsupported", feature, e);
+        } catch (AbstractMethodError ame) {
+            logger.log(POILogger.WARN, "Cannot set SAX feature because 
outdated XML parser in classpath", feature, ame);
         }
     }
+    
     private static void trySetXercesSecurityManager(DocumentBuilderFactory 
documentBuilderFactory) {
         // Try built-in JVM one first, standalone if not
         for (String securityManagerClassName : new String[] {
@@ -78,7 +81,7 @@ public final class DocumentHelper {
                 // Stop once one can be setup without error
                 return;
             } catch (Exception e) {
-                logger.log(POILogger.INFO, "SAX Security Manager could not be 
setup", e);
+                logger.log(POILogger.WARN, "SAX Security Manager could not be 
setup", e);
             }
         }
     }

Modified: poi/trunk/src/ooxml/java/org/apache/poi/util/SAXHelper.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/util/SAXHelper.java?rev=1618644&r1=1618643&r2=1618644&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/util/SAXHelper.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/util/SAXHelper.java Mon Aug 18 
16:01:35 2014
@@ -69,7 +69,9 @@ public final class SAXHelper {
         try {
             xmlReader.setFeature(feature, enabled);
         } catch (Exception e) {
-            logger.log(POILogger.INFO, "SAX Feature unsupported", feature, e);
+            logger.log(POILogger.WARN, "SAX Feature unsupported", feature, e);
+        } catch (AbstractMethodError ame) {
+            logger.log(POILogger.WARN, "Cannot set SAX feature because 
outdated XML parser in classpath", feature, ame);
         }
     }
     
@@ -87,7 +89,7 @@ public final class SAXHelper {
                 // Stop once one can be setup without error
                 return;
             } catch (Exception e) {
-                logger.log(POILogger.INFO, "SAX Security Manager could not be 
setup", e);
+                logger.log(POILogger.WARN, "SAX Security Manager could not be 
setup", e);
             }
         }
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to