Author: fanningpj
Date: Sat Aug 18 17:06:41 2018
New Revision: 1838345

URL: http://svn.apache.org/viewvc?rev=1838345&view=rev
Log:
use XmlOptions for parser properties instead of system properties

Modified:
    xmlbeans/trunk/CHANGES.txt
    
xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/DocumentHelper.java
    xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/LoadSaveUtils.java
    xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/SAXHelper.java
    xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/StaxHelper.java
    
xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/XMLBeansConstants.java
    xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Locale.java
    
xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/StreamInstanceValidator.java
    xmlbeans/trunk/src/xmlpublic/org/apache/xmlbeans/XmlOptions.java
    xmlbeans/trunk/src/xmlpublic/org/apache/xmlbeans/XmlOptionsBean.java
    xmlbeans/trunk/test/src/dom/checkin/ParserTest.java
    xmlbeans/trunk/test/src/misc/common/ParsersBase.java
    xmlbeans/trunk/test/src/misc/detailed/CharEncodingTest.java

Modified: xmlbeans/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/CHANGES.txt?rev=1838345&r1=1838344&r2=1838345&view=diff
==============================================================================
--- xmlbeans/trunk/CHANGES.txt (original)
+++ xmlbeans/trunk/CHANGES.txt Sat Aug 18 17:06:41 2018
@@ -1,3 +1,8 @@
+Changes in V3.0.1 since V3.0.0
+
+* XMLBEANS-518: add support to XmlOptions to allow control over the XML parser 
settings that affect DTD loading
+and entity expansion
+
 Changes in V3.0.0 since V2.6.0
 
 * XMLBEANS-517: use safe XML parsers

Modified: 
xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/DocumentHelper.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/DocumentHelper.java?rev=1838345&r1=1838344&r2=1838345&view=diff
==============================================================================
--- 
xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/DocumentHelper.java 
(original)
+++ 
xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/DocumentHelper.java 
Sat Aug 18 17:06:41 2018
@@ -25,6 +25,7 @@ import javax.xml.parsers.DocumentBuilder
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.stream.events.Namespace;
 
+import org.apache.xmlbeans.XmlOptionsBean;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.xml.sax.ErrorHandler;
@@ -77,12 +78,13 @@ public final class DocumentHelper {
     /**
      * Creates a new document builder, with sensible defaults
      *
+     * @param xmlOptions
      * @throws IllegalStateException If creating the DocumentBuilder fails, 
e.g.
      *  due to {@link ParserConfigurationException}.
      */
-    public static synchronized DocumentBuilder newDocumentBuilder() {
+    public static synchronized DocumentBuilder 
newDocumentBuilder(XmlOptionsBean xmlOptions) {
         try {
-            DocumentBuilder documentBuilder = 
documentBuilderFactory.newDocumentBuilder();
+            DocumentBuilder documentBuilder = 
documentBuilderFactory(xmlOptions).newDocumentBuilder();
             
documentBuilder.setEntityResolver(SAXHelper.IGNORING_ENTITY_RESOLVER);
             documentBuilder.setErrorHandler(new DocHelperErrorHandler());
             return documentBuilder;
@@ -91,14 +93,15 @@ public final class DocumentHelper {
         }
     }
 
-    private static final DocumentBuilderFactory documentBuilderFactory = 
DocumentBuilderFactory.newInstance();
-    static {
+    private static final DocumentBuilderFactory 
documentBuilderFactory(XmlOptionsBean options) {
+        DocumentBuilderFactory documentBuilderFactory = 
DocumentBuilderFactory.newInstance();
         documentBuilderFactory.setNamespaceAware(true);
         documentBuilderFactory.setValidating(false);
         trySetFeature(documentBuilderFactory, 
XMLConstants.FEATURE_SECURE_PROCESSING, true);
-        trySetFeature(documentBuilderFactory, 
XMLBeansConstants.FEATURE_LOAD_DTD_GRAMMAR, 
XMLBeansConstants.isLoadDtdGrammar());
-        trySetFeature(documentBuilderFactory, 
XMLBeansConstants.FEATURE_LOAD_EXTERNAL_DTD, 
XMLBeansConstants.isLoadExternalDtd());
-        trySetXercesSecurityManager(documentBuilderFactory);
+        trySetFeature(documentBuilderFactory, 
XMLBeansConstants.FEATURE_LOAD_DTD_GRAMMAR, options.isLoadDTDGrammar());
+        trySetFeature(documentBuilderFactory, 
XMLBeansConstants.FEATURE_LOAD_EXTERNAL_DTD, options.isLoadExternalDTD());
+        trySetXercesSecurityManager(documentBuilderFactory, options);
+        return documentBuilderFactory;
     }
 
     private static void trySetFeature(DocumentBuilderFactory dbf, String 
feature, boolean enabled) {
@@ -111,7 +114,7 @@ public final class DocumentHelper {
         }
     }
     
-    private static void trySetXercesSecurityManager(DocumentBuilderFactory 
dbf) {
+    private static void trySetXercesSecurityManager(DocumentBuilderFactory 
dbf, XmlOptionsBean options) {
         // Try built-in JVM one first, standalone if not
         for (String securityManagerClassName : new String[]{
                 //"com.sun.org.apache.xerces.internal.util.SecurityManager",
@@ -120,8 +123,8 @@ public final class DocumentHelper {
             try {
                 Object mgr = 
Class.forName(securityManagerClassName).newInstance();
                 Method setLimit = 
mgr.getClass().getMethod("setEntityExpansionLimit", Integer.TYPE);
-                setLimit.invoke(mgr, 
XMLBeansConstants.getEntityExpansionLimit());
-                
dbf.setAttribute(XMLBeansConstants.XML_PROPERTY_SECURITY_MANAGER, mgr);
+                setLimit.invoke(mgr, options.getEntityExpansionLimit());
+                dbf.setAttribute(XMLBeansConstants.SECURITY_MANAGER, mgr);
                 // Stop once one can be setup without error
                 return;
             } catch (ClassNotFoundException e) {
@@ -132,7 +135,7 @@ public final class DocumentHelper {
         }
 
         // separate old version of Xerces not found => use the builtin way of 
setting the property
-        
dbf.setAttribute(XMLBeansConstants.XML_PROPERTY_ENTITY_EXPANSION_LIMIT, 
XMLBeansConstants.getEntityExpansionLimit());
+        dbf.setAttribute(XMLBeansConstants.ENTITY_EXPANSION_LIMIT, 
options.getEntityExpansionLimit());
     }
 
     /**
@@ -141,8 +144,8 @@ public final class DocumentHelper {
      * @param inp Stream to read the XML data from
      * @return the parsed Document 
      */
-    public static Document readDocument(InputStream inp) throws IOException, 
SAXException {
-        return newDocumentBuilder().parse(inp);
+    public static Document readDocument(XmlOptionsBean xmlOptions, InputStream 
inp) throws IOException, SAXException {
+        return newDocumentBuilder(xmlOptions).parse(inp);
     }
 
     /**
@@ -151,12 +154,12 @@ public final class DocumentHelper {
      * @param inp sax source to read the XML data from
      * @return the parsed Document 
      */
-    public static Document readDocument(InputSource inp) throws IOException, 
SAXException {
-        return newDocumentBuilder().parse(inp);
+    public static Document readDocument(XmlOptionsBean xmlOptions, InputSource 
inp) throws IOException, SAXException {
+        return newDocumentBuilder(xmlOptions).parse(inp);
     }
 
     // must only be used to create empty documents, do not use it for parsing!
-    private static final DocumentBuilder documentBuilderSingleton = 
newDocumentBuilder();
+    private static final DocumentBuilder documentBuilderSingleton = 
newDocumentBuilder(new XmlOptionsBean());
 
     /**
      * Creates a new DOM Document

Modified: 
xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/LoadSaveUtils.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/LoadSaveUtils.java?rev=1838345&r1=1838344&r2=1838345&view=diff
==============================================================================
--- 
xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/LoadSaveUtils.java 
(original)
+++ 
xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/LoadSaveUtils.java 
Sat Aug 18 17:06:41 2018
@@ -39,7 +39,7 @@ public class LoadSaveUtils
     public static Document xmlText2GenericDom(InputStream is, Document 
emptyDoc)
             throws SAXException, ParserConfigurationException, IOException
     {
-        SAXParser parser = SAXHelper.saxFactory.newSAXParser();
+        SAXParser parser = SAXHelper.saxFactory().newSAXParser();
 
         Sax2Dom handler = new Sax2Dom(emptyDoc);
 

Modified: 
xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/SAXHelper.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/SAXHelper.java?rev=1838345&r1=1838344&r2=1838345&view=diff
==============================================================================
--- xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/SAXHelper.java 
(original)
+++ xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/SAXHelper.java 
Sat Aug 18 17:06:41 2018
@@ -24,6 +24,7 @@ import javax.xml.XMLConstants;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParserFactory;
 
+import org.apache.xmlbeans.XmlOptionsBean;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -41,30 +42,34 @@ public final class SAXHelper {
     /**
      * Creates a new SAX XMLReader, with sensible defaults
      */
-    public static synchronized XMLReader newXMLReader() throws SAXException, 
ParserConfigurationException {
-        XMLReader xmlReader = saxFactory.newSAXParser().getXMLReader();
+    public static XMLReader newXMLReader(XmlOptionsBean options) throws 
SAXException, ParserConfigurationException {
+        XMLReader xmlReader = 
saxFactory(options).newSAXParser().getXMLReader();
         xmlReader.setEntityResolver(IGNORING_ENTITY_RESOLVER);
         trySetSAXFeature(xmlReader, XMLConstants.FEATURE_SECURE_PROCESSING);
-        trySetXercesSecurityManager(xmlReader);
+        trySetXercesSecurityManager(xmlReader, options);
         return xmlReader;
     }
     
-    static final EntityResolver IGNORING_ENTITY_RESOLVER = new 
EntityResolver() {
+    public static final EntityResolver IGNORING_ENTITY_RESOLVER = new 
EntityResolver() {
         @Override
         public InputSource resolveEntity(String publicId, String systemId)
                 throws SAXException, IOException {
             return new InputSource(new StringReader(""));
         }
     };
-    
-    static final SAXParserFactory saxFactory;
-    static {
-        saxFactory = SAXParserFactory.newInstance();
+
+    static SAXParserFactory saxFactory() {
+        return saxFactory(new XmlOptionsBean());
+    }
+
+    static SAXParserFactory saxFactory(XmlOptionsBean options) {
+        SAXParserFactory saxFactory = SAXParserFactory.newInstance();
         saxFactory.setValidating(false);
         saxFactory.setNamespaceAware(true);
         trySetSAXFeature(saxFactory, XMLConstants.FEATURE_SECURE_PROCESSING, 
true);
-        trySetSAXFeature(saxFactory, 
XMLBeansConstants.FEATURE_LOAD_DTD_GRAMMAR, 
XMLBeansConstants.isLoadDtdGrammar());
-        trySetSAXFeature(saxFactory, 
XMLBeansConstants.FEATURE_LOAD_EXTERNAL_DTD, 
XMLBeansConstants.isLoadExternalDtd());
+        trySetSAXFeature(saxFactory, 
XMLBeansConstants.FEATURE_LOAD_DTD_GRAMMAR, options.isLoadDTDGrammar());
+        trySetSAXFeature(saxFactory, 
XMLBeansConstants.FEATURE_LOAD_EXTERNAL_DTD, options.isLoadExternalDTD());
+        return saxFactory;
     }
 
     private static void trySetSAXFeature(SAXParserFactory spf, String feature, 
boolean flag) {
@@ -87,7 +92,7 @@ public final class SAXHelper {
         }
     }
     
-    private static void trySetXercesSecurityManager(XMLReader xmlReader) {
+    private static void trySetXercesSecurityManager(XMLReader xmlReader, 
XmlOptionsBean options) {
         // Try built-in JVM one first, standalone if not
         for (String securityManagerClassName : new String[] {
                 //"com.sun.org.apache.xerces.internal.util.SecurityManager",
@@ -96,8 +101,8 @@ public final class SAXHelper {
             try {
                 Object mgr = 
Class.forName(securityManagerClassName).newInstance();
                 Method setLimit = 
mgr.getClass().getMethod("setEntityExpansionLimit", Integer.TYPE);
-                setLimit.invoke(mgr, 
XMLBeansConstants.getEntityExpansionLimit());
-                
xmlReader.setProperty(XMLBeansConstants.XML_PROPERTY_SECURITY_MANAGER, mgr);
+                setLimit.invoke(mgr, options.getEntityExpansionLimit());
+                xmlReader.setProperty(XMLBeansConstants.SECURITY_MANAGER, mgr);
                 // Stop once one can be setup without error
                 return;
             } catch (Throwable e) {     // NOSONAR - also catch things like 
NoClassDefError here
@@ -111,7 +116,7 @@ public final class SAXHelper {
 
         // separate old version of Xerces not found => use the builtin way of 
setting the property
         try {
-            
xmlReader.setProperty(XMLBeansConstants.XML_PROPERTY_ENTITY_EXPANSION_LIMIT, 
XMLBeansConstants.getEntityExpansionLimit());
+            xmlReader.setProperty(XMLBeansConstants.ENTITY_EXPANSION_LIMIT, 
options.getEntityExpansionLimit());
         } catch (SAXException e) {     // NOSONAR - also catch things like 
NoClassDefError here
             // throttle the log somewhat as it can spam the log otherwise
             if(System.currentTimeMillis() > lastLog + 
TimeUnit.MINUTES.toMillis(5)) {

Modified: 
xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/StaxHelper.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/StaxHelper.java?rev=1838345&r1=1838344&r2=1838345&view=diff
==============================================================================
--- xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/StaxHelper.java 
(original)
+++ xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/StaxHelper.java 
Sat Aug 18 17:06:41 2018
@@ -19,6 +19,7 @@ import javax.xml.stream.XMLEventFactory;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLOutputFactory;
 
+import org.apache.xmlbeans.XmlOptionsBean;
 
 /**
  * Provides handy methods for working with StAX parsers and readers
@@ -31,19 +32,19 @@ public final class StaxHelper {
     /**
      * Creates a new StAX XMLInputFactory, with sensible defaults
      */
-    public static XMLInputFactory newXMLInputFactory() {
+    public static XMLInputFactory newXMLInputFactory(XmlOptionsBean options) {
         XMLInputFactory factory = XMLInputFactory.newFactory();
         trySetProperty(factory, XMLInputFactory.IS_NAMESPACE_AWARE, true);
         trySetProperty(factory, XMLInputFactory.IS_VALIDATING, false);
-        trySetProperty(factory, XMLInputFactory.SUPPORT_DTD, 
XMLBeansConstants.isLoadDtdGrammar());
-        trySetProperty(factory, 
XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, 
XMLBeansConstants.isLoadExternalDtd());
+        trySetProperty(factory, XMLInputFactory.SUPPORT_DTD, 
options.isLoadDTDGrammar());
+        trySetProperty(factory, 
XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, options.isLoadExternalDTD());
         return factory;
     }
 
     /**
      * Creates a new StAX XMLOutputFactory, with sensible defaults
      */
-    public static XMLOutputFactory newXMLOutputFactory() {
+    public static XMLOutputFactory newXMLOutputFactory(XmlOptionsBean options) 
{
         XMLOutputFactory factory = XMLOutputFactory.newFactory();
         trySetProperty(factory, XMLOutputFactory.IS_REPAIRING_NAMESPACES, 
true);
         return factory;
@@ -52,7 +53,7 @@ public final class StaxHelper {
     /**
      * Creates a new StAX XMLEventFactory, with sensible defaults
      */
-    public static XMLEventFactory newXMLEventFactory() {
+    public static XMLEventFactory newXMLEventFactory(XmlOptionsBean options) {
         return XMLEventFactory.newFactory();
     }
             

Modified: 
xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/XMLBeansConstants.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/XMLBeansConstants.java?rev=1838345&r1=1838344&r2=1838345&view=diff
==============================================================================
--- 
xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/XMLBeansConstants.java
 (original)
+++ 
xmlbeans/trunk/src/common/org/apache/xmlbeans/impl/common/XMLBeansConstants.java
 Sat Aug 18 17:06:41 2018
@@ -15,23 +15,11 @@
 
 package org.apache.xmlbeans.impl.common;
 
+import org.apache.xmlbeans.XmlOptions;
+
 public class XMLBeansConstants {
-    public static final String PROPERTY_ENTITY_EXPANSION_LIMIT = 
"xmlbeans.entity.expansion.limit";
-    public static final String PROPERTY_LOAD_DTD_GRAMMAR = 
"xmlbeans.load.dtd.grammar";
-    public static final String PROPERTY_LOAD_EXTERNAL_DTD = 
"xmlbeans.load.external.dtd";
-    public static final int DEFAULT_ENTITY_EXPANSION_LIMIT = 2048;
-    public static final String XML_PROPERTY_ENTITY_EXPANSION_LIMIT = 
"http://www.oracle.com/xml/jaxp/properties/entityExpansionLimit";;
-    public static final String XML_PROPERTY_SECURITY_MANAGER = 
"http://apache.org/xml/properties/security-manager";;
+    public static final String ENTITY_EXPANSION_LIMIT = 
"http://www.oracle.com/xml/jaxp/properties/entityExpansionLimit";;
+    public static final String SECURITY_MANAGER = 
"http://apache.org/xml/properties/security-manager";;
     public static final String FEATURE_LOAD_DTD_GRAMMAR = 
"http://apache.org/xml/features/nonvalidating/load-dtd-grammar";;
     public static final String FEATURE_LOAD_EXTERNAL_DTD = 
"http://apache.org/xml/features/nonvalidating/load-external-dtd";;
-
-    public static int getEntityExpansionLimit() {
-        return Integer.getInteger(PROPERTY_ENTITY_EXPANSION_LIMIT, 
DEFAULT_ENTITY_EXPANSION_LIMIT);
-    }
-    public static boolean isLoadDtdGrammar() {
-        return Boolean.getBoolean(PROPERTY_LOAD_DTD_GRAMMAR);
-    }
-    public static boolean isLoadExternalDtd() {
-        return Boolean.getBoolean(PROPERTY_LOAD_EXTERNAL_DTD);
-    }
 }

Modified: xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Locale.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Locale.java?rev=1838345&r1=1838344&r2=1838345&view=diff
==============================================================================
--- xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Locale.java 
(original)
+++ xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Locale.java Sat Aug 
18 17:06:41 2018
@@ -82,6 +82,7 @@ import org.apache.xmlbeans.XmlErrorCodes
 import org.apache.xmlbeans.XmlException;
 import org.apache.xmlbeans.XmlObject;
 import org.apache.xmlbeans.XmlOptions;
+import org.apache.xmlbeans.XmlOptionsBean;
 import org.apache.xmlbeans.XmlSaxHandler;
 import org.apache.xmlbeans.SchemaType;
 import org.apache.xmlbeans.SchemaTypeLoader;
@@ -3051,7 +3052,7 @@ public final class Locale
 
         if (xr == null) {
             try {
-                xr = SAXHelper.newXMLReader();
+                xr = SAXHelper.newXMLReader(new XmlOptionsBean(options));
             } catch(Exception e) {
                 throw new XmlException("Problem creating XMLReader", e);
             } 

Modified: 
xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/StreamInstanceValidator.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/StreamInstanceValidator.java?rev=1838345&r1=1838344&r2=1838345&view=diff
==============================================================================
--- 
xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/StreamInstanceValidator.java
 (original)
+++ 
xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/StreamInstanceValidator.java
 Sat Aug 18 17:06:41 2018
@@ -20,6 +20,7 @@ import org.apache.xmlbeans.XmlBeans;
 import org.apache.xmlbeans.XmlException;
 import org.apache.xmlbeans.XmlObject;
 import org.apache.xmlbeans.XmlOptions;
+import org.apache.xmlbeans.XmlOptionsBean;
 import org.apache.xmlbeans.XmlError;
 import org.apache.xmlbeans.impl.common.StaxHelper;
 import org.apache.xmlbeans.impl.validator.ValidatingXMLStreamReader;
@@ -40,8 +41,6 @@ import java.util.HashSet;
 
 public class StreamInstanceValidator
 {
-    private static final XMLInputFactory XML_INPUT_FACTORY = 
StaxHelper.newXMLInputFactory();
-
     public static void printUsage()
     {
         System.out.println("Validates the specified instance against the 
specified schema.");
@@ -174,9 +173,11 @@ public class StreamInstanceValidator
             errors.clear();
 
             try {
+                final XMLInputFactory xmlInputFactory = 
StaxHelper.newXMLInputFactory(new XmlOptionsBean(options));
+
                 final FileInputStream fis = new FileInputStream(file);
                 final XMLStreamReader rdr =
-                    XML_INPUT_FACTORY.createXMLStreamReader(path, fis);
+                        xmlInputFactory.createXMLStreamReader(path, fis);
 
                 //advance to first start element.
                 while(!rdr.isStartElement()) {

Modified: xmlbeans/trunk/src/xmlpublic/org/apache/xmlbeans/XmlOptions.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/xmlpublic/org/apache/xmlbeans/XmlOptions.java?rev=1838345&r1=1838344&r2=1838345&view=diff
==============================================================================
--- xmlbeans/trunk/src/xmlpublic/org/apache/xmlbeans/XmlOptions.java (original)
+++ xmlbeans/trunk/src/xmlpublic/org/apache/xmlbeans/XmlOptions.java Sat Aug 18 
17:06:41 2018
@@ -613,7 +613,7 @@ public class XmlOptions implements java.
     }
 
     /**
-     * By default, XmlBeans uses an internal Piccolo parser,
+     * By default, XmlBeans creates a JAXP parser,
      * other parsers can be used by providing an XMLReader.
      * For using the default JDK's SAX parser use:
      * xmlOptions.setLoadUseXMLReader( 
SAXParserFactory.newInstance().newSAXParser().getXMLReader() );
@@ -858,7 +858,7 @@ public class XmlOptions implements java.
      */
     public XmlOptions setCopyUseNewSynchronizationDomain (boolean 
useNewSyncDomain)
     {
-        return set(COPY_USE_NEW_SYNC_DOMAIN, useNewSyncDomain ? Boolean.TRUE : 
Boolean.FALSE );
+        return set(COPY_USE_NEW_SYNC_DOMAIN, useNewSyncDomain);
     }
 
     /**
@@ -872,6 +872,41 @@ public class XmlOptions implements java.
         return set(LOAD_ENTITY_BYTES_LIMIT,entityBytesLimit);
     }
 
+    /**
+     * Sets the maximum number of entity expansions allowed during parsing.
+     * The default value is 2048.
+     * @param entityExpansionLimit
+     * @return this
+     */
+    public XmlOptions setEntityExpansionLimit (int entityExpansionLimit)
+    {
+        return set(ENTITY_EXPANSION_LIMIT, entityExpansionLimit);
+    }
+
+    /**
+     * Controls whether DTD grammar is loaded during parsing.
+     * The default value is false.
+     *
+     * @param loadDTDGrammar
+     * @return this
+     */
+    public XmlOptions setLoadDTDGrammar (boolean loadDTDGrammar)
+    {
+        return set(LOAD_DTD_GRAMMAR, loadDTDGrammar);
+    }
+
+    /**
+     * Controls whether external DTDs are loaded during parsing.
+     * The default value is false.
+     *
+     * @param loadExternalDTD
+     * @return this
+     */
+    public XmlOptions setLoadExternalDTD (boolean loadExternalDTD)
+    {
+        return set(LOAD_EXTERNAL_DTD, loadExternalDTD);
+    }
+
     public static final String GENERATE_JAVA_14 = "1.4";
     public static final String GENERATE_JAVA_15 = "1.5";
 
@@ -996,6 +1031,14 @@ public class XmlOptions implements java.
     public static final String COPY_USE_NEW_SYNC_DOMAIN        = 
"COPY_USE_NEW_LOCALE";
     /** @exclude */
     public static final String LOAD_ENTITY_BYTES_LIMIT         = 
"LOAD_ENTITY_BYTES_LIMIT";
+    /** @exclude */
+    public static final String ENTITY_EXPANSION_LIMIT          = 
"ENTITY_EXPANSION_LIMIT";
+    /** @exclude */
+    public static final String LOAD_DTD_GRAMMAR                = 
"LOAD_DTD_GRAMMAR";
+    /** @exclude */
+    public static final String LOAD_EXTERNAL_DTD               = 
"LOAD_EXTERNAL_DTD";
+
+    public static final int DEFAULT_ENTITY_EXPANSION_LIMIT = 2048;
 
     private static final XmlOptions EMPTY_OPTIONS;
     static {

Modified: xmlbeans/trunk/src/xmlpublic/org/apache/xmlbeans/XmlOptionsBean.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/src/xmlpublic/org/apache/xmlbeans/XmlOptionsBean.java?rev=1838345&r1=1838344&r2=1838345&view=diff
==============================================================================
--- xmlbeans/trunk/src/xmlpublic/org/apache/xmlbeans/XmlOptionsBean.java 
(original)
+++ xmlbeans/trunk/src/xmlpublic/org/apache/xmlbeans/XmlOptionsBean.java Sat 
Aug 18 17:06:41 2018
@@ -442,4 +442,22 @@ public class XmlOptionsBean extends XmlO
     {
         return (String) get( GENERATE_JAVA_VERSION );
     }
+
+    public int getEntityExpansionLimit()
+    {
+        Integer limit = (Integer) get( ENTITY_EXPANSION_LIMIT );
+        return limit == null ? DEFAULT_ENTITY_EXPANSION_LIMIT : limit;
+    }
+
+    public boolean isLoadDTDGrammar()
+    {
+        Boolean flag = (Boolean) get( LOAD_DTD_GRAMMAR );
+        return flag == null ? false : flag;
+    }
+
+    public boolean isLoadExternalDTD()
+    {
+        Boolean flag = (Boolean) get( LOAD_EXTERNAL_DTD );
+        return flag == null ? false : flag;
+    }
 }

Modified: xmlbeans/trunk/test/src/dom/checkin/ParserTest.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/test/src/dom/checkin/ParserTest.java?rev=1838345&r1=1838344&r2=1838345&view=diff
==============================================================================
--- xmlbeans/trunk/test/src/dom/checkin/ParserTest.java (original)
+++ xmlbeans/trunk/test/src/dom/checkin/ParserTest.java Sat Aug 18 17:06:41 2018
@@ -16,11 +16,16 @@
 
 package dom.checkin;
 
+import java.io.ByteArrayInputStream;
+import javax.xml.XMLConstants;
 import javax.xml.stream.XMLInputFactory;
 
 import junit.framework.*;
 
+import org.apache.xmlbeans.XmlOptionsBean;
 import org.apache.xmlbeans.impl.common.*;
+import org.xml.sax.InputSource;
+import org.xml.sax.XMLReader;
 
 /**
  * Tests for XML Parser settings
@@ -28,29 +33,26 @@ import org.apache.xmlbeans.impl.common.*
 
 public class ParserTest extends TestCase {
 
-    public void testXMLBeansConstantsDefaults() {
-        assertEquals(2048, XMLBeansConstants.getEntityExpansionLimit());
-        assertFalse(XMLBeansConstants.isLoadDtdGrammar());
-        assertFalse(XMLBeansConstants.isLoadExternalDtd());
+    public void testXmlOptionsDefaults() {
+        XmlOptionsBean options = new XmlOptionsBean();
+        assertEquals(2048, options.getEntityExpansionLimit());
+        assertFalse(options.isLoadDTDGrammar());
+        assertFalse(options.isLoadExternalDTD());
     }
 
     public void testXMLBeansConstantsOverrides() {
-        try {
-            
System.setProperty(XMLBeansConstants.PROPERTY_ENTITY_EXPANSION_LIMIT, "1");
-            System.setProperty(XMLBeansConstants.PROPERTY_LOAD_DTD_GRAMMAR, 
"true");
-            System.setProperty(XMLBeansConstants.PROPERTY_LOAD_EXTERNAL_DTD, 
"true");
-            assertEquals(1, XMLBeansConstants.getEntityExpansionLimit());
-            assertTrue(XMLBeansConstants.isLoadDtdGrammar());
-            assertTrue(XMLBeansConstants.isLoadExternalDtd());
-        } finally {
-            
System.clearProperty(XMLBeansConstants.PROPERTY_ENTITY_EXPANSION_LIMIT);
-            System.clearProperty(XMLBeansConstants.PROPERTY_LOAD_DTD_GRAMMAR);
-            System.clearProperty(XMLBeansConstants.PROPERTY_LOAD_EXTERNAL_DTD);
-        }
+        XmlOptionsBean options = new XmlOptionsBean();
+        options.setEntityExpansionLimit(1);
+        options.setLoadDTDGrammar(true);
+        options.setLoadExternalDTD(true);
+        assertEquals(1, options.getEntityExpansionLimit());
+        assertTrue(options.isLoadDTDGrammar());
+        assertTrue(options.isLoadExternalDTD());
     }
 
     public void testXmlInputFactoryPropertyDefaults() {
-        XMLInputFactory factory = StaxHelper.newXMLInputFactory();
+        XmlOptionsBean options = new XmlOptionsBean();
+        XMLInputFactory factory = StaxHelper.newXMLInputFactory(options);
         assertEquals(true, 
factory.getProperty(XMLInputFactory.IS_NAMESPACE_AWARE));
         assertEquals(false, 
factory.getProperty(XMLInputFactory.IS_VALIDATING));
         assertEquals(false, factory.getProperty(XMLInputFactory.SUPPORT_DTD));
@@ -58,15 +60,39 @@ public class ParserTest extends TestCase
     }
 
     public void testXmlInputFactoryPropertyOverrides() {
-        try {
-            System.setProperty(XMLBeansConstants.PROPERTY_LOAD_DTD_GRAMMAR, 
"true");
-            System.setProperty(XMLBeansConstants.PROPERTY_LOAD_EXTERNAL_DTD, 
"true");
-            XMLInputFactory factory = StaxHelper.newXMLInputFactory();
-            assertEquals(true, 
factory.getProperty(XMLInputFactory.SUPPORT_DTD));
-            assertEquals(true, 
factory.getProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES));
-        } finally {
-            System.clearProperty(XMLBeansConstants.PROPERTY_LOAD_DTD_GRAMMAR);
-            System.clearProperty(XMLBeansConstants.PROPERTY_LOAD_EXTERNAL_DTD);
-        }
+        XmlOptionsBean options = new XmlOptionsBean();
+        options.setEntityExpansionLimit(1);
+        options.setLoadDTDGrammar(true);
+        options.setLoadExternalDTD(true);
+        XMLInputFactory factory = StaxHelper.newXMLInputFactory(options);
+        assertEquals(true, factory.getProperty(XMLInputFactory.SUPPORT_DTD));
+        assertEquals(true, 
factory.getProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES));
+    }
+
+    public void testXMLReader() throws Exception {
+        XmlOptionsBean options = new XmlOptionsBean();
+        XMLReader reader = SAXHelper.newXMLReader(options);
+        assertNotSame(reader, SAXHelper.newXMLReader(options));
+        
assertFalse(reader.getFeature(XMLBeansConstants.FEATURE_LOAD_DTD_GRAMMAR));
+        
assertFalse(reader.getFeature(XMLBeansConstants.FEATURE_LOAD_EXTERNAL_DTD));
+        assertEquals(SAXHelper.IGNORING_ENTITY_RESOLVER, 
reader.getEntityResolver());
+        assertNotNull(reader.getProperty(XMLBeansConstants.SECURITY_MANAGER));
+
+        reader.parse(new InputSource(new 
ByteArrayInputStream("<xml></xml>".getBytes("UTF-8"))));
+    }
+
+    public void testXMLReaderOverrides() throws Exception {
+        XmlOptionsBean options = new XmlOptionsBean();
+        options.setEntityExpansionLimit(1);
+        options.setLoadDTDGrammar(true);
+        options.setLoadExternalDTD(true);
+        XMLReader reader = SAXHelper.newXMLReader(options);
+        assertNotSame(reader, SAXHelper.newXMLReader(options));
+        
assertTrue(reader.getFeature(XMLBeansConstants.FEATURE_LOAD_DTD_GRAMMAR));
+        
assertTrue(reader.getFeature(XMLBeansConstants.FEATURE_LOAD_EXTERNAL_DTD));
+        assertEquals(SAXHelper.IGNORING_ENTITY_RESOLVER, 
reader.getEntityResolver());
+        assertNotNull(reader.getProperty(XMLBeansConstants.SECURITY_MANAGER));
+
+        reader.parse(new InputSource(new 
ByteArrayInputStream("<xml></xml>".getBytes("UTF-8"))));
     }
 }

Modified: xmlbeans/trunk/test/src/misc/common/ParsersBase.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/test/src/misc/common/ParsersBase.java?rev=1838345&r1=1838344&r2=1838345&view=diff
==============================================================================
--- xmlbeans/trunk/test/src/misc/common/ParsersBase.java (original)
+++ xmlbeans/trunk/test/src/misc/common/ParsersBase.java Sat Aug 18 17:06:41 
2018
@@ -40,16 +40,10 @@ public class ParsersBase extends TestCas
     // System Property                               Parser                    
    Value
     // 
----------------------------------------------------------------------------------------------------------
     // javax.xml.parsers.DocumentBuilderFactory     Xerces              
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
-    //                                              Crimson             
org.apache.crimson.jaxp.DocumentBuilderFactoryImpl
-    //                                              Piccolo             NA
     //
     // org.xml.sax.driver                           Xerces              
org.apache.xerces.parsers.SAXParser
-    //                                              Crimson             
org.apache.crimson.parser.XmlReaderImpl
-    //                                              Piccolo (Xbeans)    
org.apache.xmlbeans.impl.piccolo.xml.Piccolo
     //
     // javax.xml.parsers.SAXParserFactory           Xerces              
org.apache.xerces.jaxp.SAXParserFactoryImpl
-    //                                              Crimson             
org.apache.crimson.jaxp.SAXParserFactoryImpl
-    //                                              Piccolo (XBeans)    
org.apache.xmlbeans.impl.piccolo.xml.JAXPSAXParserFactory
     // 
----------------------------------------------------------------------------------------------------------
 
 

Modified: xmlbeans/trunk/test/src/misc/detailed/CharEncodingTest.java
URL: 
http://svn.apache.org/viewvc/xmlbeans/trunk/test/src/misc/detailed/CharEncodingTest.java?rev=1838345&r1=1838344&r2=1838345&view=diff
==============================================================================
--- xmlbeans/trunk/test/src/misc/detailed/CharEncodingTest.java (original)
+++ xmlbeans/trunk/test/src/misc/detailed/CharEncodingTest.java Sat Aug 18 
17:06:41 2018
@@ -33,38 +33,16 @@ public class CharEncodingTest extends Pa
         String I18N_test_string1 = "<i18n 
xmlns:\u00c1\u00c1\u00c1=\"\u00c1\u00c1\u00c1\" 
type=\"\u00c1\u00c1\u00c1:t\"/>";
         String I18N_test_string2 = "<i18n 
xmlns:\u30af\u30af\u30af=\"\u30af\u30af\u30af\" 
type=\"\u30af\u30af\u30af:t\"/>";
 
-        // Test all 3 parsers with string 1, this is a valid string and should 
pass
-        parseXmlWithSAXAPI(I18N_test_string1,
-                "Crimson",
-                "org.apache.crimson.parser.XmlReaderImpl",
-                "org.apache.crimson.jaxp.SAXParserFactoryImpl");
-
         parseXmlWithSAXAPI(I18N_test_string1,
                 "Xerces",
                 "org.apache.xerces.parsers.SAXParser",
                 "org.apache.xerces.jaxp.SAXParserFactoryImpl");
 
-        parseXmlWithSAXAPI(I18N_test_string1,
-                "Piccolo",
-                "org.apache.xmlbeans.impl.piccolo.xml.Piccolo",
-                "org.apache.xmlbeans.impl.piccolo.xml.JAXPSAXParserFactory");
-
-        // Now test all 3 parsers with string 2, this is a valid string and 
should pass but piccolo fails
-        parseXmlWithSAXAPI(I18N_test_string2,
-                "Crimson",
-                "org.apache.crimson.parser.XmlReaderImpl",
-                "org.apache.crimson.jaxp.SAXParserFactoryImpl");
-
         parseXmlWithSAXAPI(I18N_test_string2,
                 "Xerces",
                 "org.apache.xerces.parsers.SAXParser",
                 "org.apache.xerces.jaxp.SAXParserFactoryImpl");
 
-        parseXmlWithSAXAPI(I18N_test_string2,
-                "Piccolo",
-                "org.apache.xmlbeans.impl.piccolo.xml.Piccolo",
-                "org.apache.xmlbeans.impl.piccolo.xml.JAXPSAXParserFactory");
-
     }
 
     // Piccolo has an issue with handling external identifiers when the value 
is PUBLIC
@@ -83,17 +61,6 @@ public class CharEncodingTest extends Pa
                 "org.apache.xerces.parsers.SAXParser",
                 "org.apache.xerces.jaxp.SAXParserFactoryImpl");
 
-        parseXmlWithSAXAPI(netPubEntity,
-                "Piccolo",
-                "org.apache.xmlbeans.impl.piccolo.xml.Piccolo",
-                "org.apache.xmlbeans.impl.piccolo.xml.JAXPSAXParserFactory");
-
-        parseXmlWithSAXAPI(netPubEntity,
-                "Crimson",
-                "org.apache.crimson.parser.XmlReaderImpl",
-                "org.apache.crimson.jaxp.SAXParserFactoryImpl");
-
-
         // parse same string using scomp
         XmlOptions options = new XmlOptions();
         List errors = new ArrayList();



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@poi.apache.org
For additional commands, e-mail: dev-h...@poi.apache.org

Reply via email to