You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by fa...@apache.org on 2018/08/18 17:06:41 UTC
svn commit: r1838345 - in /xmlbeans/trunk: ./
src/common/org/apache/xmlbeans/impl/common/
src/store/org/apache/xmlbeans/impl/store/
src/xmlcomp/org/apache/xmlbeans/impl/tool/
src/xmlpublic/org/apache/xmlbeans/ test/src/dom/checkin/
test/src/misc/common...
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-unsubscribe@poi.apache.org
For additional commands, e-mail: dev-help@poi.apache.org