You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jdo-commits@db.apache.org by ma...@apache.org on 2007/06/11 17:50:22 UTC

svn commit: r546175 - in /db/jdo/trunk: api2-legacy/src/java/javax/jdo/JDOHelper.java api2-legacy/src/java/javax/jdo/spi/JDOImplHelper.java api2/src/java/javax/jdo/JDOHelper.java api2/src/java/javax/jdo/spi/JDOImplHelper.java

Author: madams
Date: Mon Jun 11 08:50:20 2007
New Revision: 546175

URL: http://svn.apache.org/viewvc?view=rev&rev=546175
Log:
JDO-495

Modified:
    db/jdo/trunk/api2-legacy/src/java/javax/jdo/JDOHelper.java
    db/jdo/trunk/api2-legacy/src/java/javax/jdo/spi/JDOImplHelper.java
    db/jdo/trunk/api2/src/java/javax/jdo/JDOHelper.java
    db/jdo/trunk/api2/src/java/javax/jdo/spi/JDOImplHelper.java

Modified: db/jdo/trunk/api2-legacy/src/java/javax/jdo/JDOHelper.java
URL: http://svn.apache.org/viewvc/db/jdo/trunk/api2-legacy/src/java/javax/jdo/JDOHelper.java?view=diff&rev=546175&r1=546174&r2=546175
==============================================================================
--- db/jdo/trunk/api2-legacy/src/java/javax/jdo/JDOHelper.java (original)
+++ db/jdo/trunk/api2-legacy/src/java/javax/jdo/JDOHelper.java Mon Jun 11 08:50:20 2007
@@ -1018,14 +1018,11 @@
                 ArrayList processedResources = new ArrayList();
 
                 // get ready to parse XML
-                DocumentBuilderFactory factory = null;
-                // TODO:  ensure DBF is initialized properly
-                factory = DocumentBuilderFactory.newInstance();
-                factory.setIgnoringComments(true);
-                factory.setNamespaceAware(true);
-                factory.setValidating(false);
-                factory.setIgnoringElementContentWhitespace(true);
-                factory.setExpandEntityReferences(true);
+                DocumentBuilderFactory factory =
+                        implHelper.getRegisteredDocumentBuilderFactory();
+                if (factory == null) {
+                    factory = getDefaultDocumentBuilderFactory();
+                }
 
                 do {
                     URL currentConfigURL = (URL) resources.nextElement();
@@ -1076,6 +1073,36 @@
         return (Map) propertiesByNameInAllConfigs.get(name);
     }
 
+
+    protected static DocumentBuilderFactory getDefaultDocumentBuilderFactory() {
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        factory.setIgnoringComments(true);
+        factory.setNamespaceAware(true);
+        factory.setValidating(false);
+        factory.setIgnoringElementContentWhitespace(true);
+        factory.setExpandEntityReferences(true);
+
+        return factory;
+    }
+
+    protected static ErrorHandler getDefaultErrorHandler() {
+        return new ErrorHandler() {
+                public void error(SAXParseException exception)
+                        throws SAXException {
+                    throw exception;
+                }
+
+                public void fatalError(SAXParseException exception)
+                        throws SAXException {
+                    throw exception;
+                }
+
+                public void warning(SAXParseException exception)
+                        throws SAXException {
+                    // gulp:  ignore warnings
+                }
+            };
+    }
 
     /**
      * Convenience method for retrieving the JPA persistence unit by the given

Modified: db/jdo/trunk/api2-legacy/src/java/javax/jdo/spi/JDOImplHelper.java
URL: http://svn.apache.org/viewvc/db/jdo/trunk/api2-legacy/src/java/javax/jdo/spi/JDOImplHelper.java?view=diff&rev=546175&r1=546174&r2=546175
==============================================================================
--- db/jdo/trunk/api2-legacy/src/java/javax/jdo/spi/JDOImplHelper.java (original)
+++ db/jdo/trunk/api2-legacy/src/java/javax/jdo/spi/JDOImplHelper.java Mon Jun 11 08:50:20 2007
@@ -22,6 +22,8 @@
 
 package javax.jdo.spi;
 
+import org.xml.sax.ErrorHandler;
+
 import java.lang.reflect.Constructor;
 
 import java.text.DateFormat;
@@ -45,6 +47,7 @@
 import javax.jdo.JDOFatalInternalException;
 import javax.jdo.JDOFatalUserException;
 import javax.jdo.JDOUserException;
+import javax.xml.parsers.DocumentBuilderFactory;
 
 /** This class is a helper class for JDO implementations.  It contains methods
  * to register metadata for persistence-capable classes and to perform common
@@ -104,6 +107,16 @@
      */
     private static DateFormat dateFormat;
 
+    /**
+     * The DocumentBuilderFactory used during jdoconfig.xml parsing.
+     */
+    private static DocumentBuilderFactory documentBuilderFactory;
+
+    /**
+     * The ErrorHandler used during jdoconfig.xml parsing.
+     */
+    private static ErrorHandler errorHandler;
+
     /** Register the default DateFormat instance.
      */
     static {
@@ -530,6 +543,37 @@
         }
     }
     
+    /**
+     * Register a DocumentBuilderFactory instance for use in parsing the
+     * resource(s) META-INF/jdoconfig.xml. The default is governed by the
+     * semantics of DocumentBuilderFactory.newInstance().
+     *
+     * @param factory the DocumentBuilderFactory instance to use
+     */
+    public synchronized void registerDocumentBuilderFactory(
+            DocumentBuilderFactory factory) {
+        documentBuilderFactory = factory;
+    }
+
+    public static DocumentBuilderFactory getRegisteredDocumentBuilderFactory() {
+        return documentBuilderFactory;
+    }
+
+    /**
+     * Register an ErrorHandler instance for use in parsing the
+     * resource(s) META-INF/jdoconfig.xml. The default is an ErrorHandler
+     * that throws on error or fatalError and ignores warnings.
+     *
+     * @param handler the ErrorHandler instance to use
+     */
+    public synchronized void registerErrorHandler(ErrorHandler handler) {
+        errorHandler = handler;
+    }
+
+    public static ErrorHandler getRegisteredErrorHandler() {
+        return errorHandler;
+    }
+
     /** Check that the parameter instance is of a class that is authorized for
      * JDOPermission("setStateManager").  This method is called by the
      * replaceStateManager method in persistence-capable classes.

Modified: db/jdo/trunk/api2/src/java/javax/jdo/JDOHelper.java
URL: http://svn.apache.org/viewvc/db/jdo/trunk/api2/src/java/javax/jdo/JDOHelper.java?view=diff&rev=546175&r1=546174&r2=546175
==============================================================================
--- db/jdo/trunk/api2/src/java/javax/jdo/JDOHelper.java (original)
+++ db/jdo/trunk/api2/src/java/javax/jdo/JDOHelper.java Mon Jun 11 08:50:20 2007
@@ -1018,14 +1018,11 @@
                 ArrayList processedResources = new ArrayList();
 
                 // get ready to parse XML
-                DocumentBuilderFactory factory = null;
-                // TODO:  ensure DBF is initialized properly
-                factory = DocumentBuilderFactory.newInstance();
-                factory.setIgnoringComments(true);
-                factory.setNamespaceAware(true);
-                factory.setValidating(false);
-                factory.setIgnoringElementContentWhitespace(true);
-                factory.setExpandEntityReferences(true);
+                DocumentBuilderFactory factory =
+                        implHelper.getRegisteredDocumentBuilderFactory();
+                if (factory == null) {
+                    factory = getDefaultDocumentBuilderFactory();
+                }
 
                 do {
                     URL currentConfigURL = (URL) resources.nextElement();
@@ -1076,6 +1073,36 @@
         return (Map) propertiesByNameInAllConfigs.get(name);
     }
 
+
+    protected static DocumentBuilderFactory getDefaultDocumentBuilderFactory() {
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        factory.setIgnoringComments(true);
+        factory.setNamespaceAware(true);
+        factory.setValidating(false);
+        factory.setIgnoringElementContentWhitespace(true);
+        factory.setExpandEntityReferences(true);
+
+        return factory;
+    }
+
+    protected static ErrorHandler getDefaultErrorHandler() {
+        return new ErrorHandler() {
+                public void error(SAXParseException exception)
+                        throws SAXException {
+                    throw exception;
+                }
+
+                public void fatalError(SAXParseException exception)
+                        throws SAXException {
+                    throw exception;
+                }
+
+                public void warning(SAXParseException exception)
+                        throws SAXException {
+                    // gulp:  ignore warnings
+                }
+            };
+    }
 
     /**
      * Convenience method for retrieving the JPA persistence unit by the given

Modified: db/jdo/trunk/api2/src/java/javax/jdo/spi/JDOImplHelper.java
URL: http://svn.apache.org/viewvc/db/jdo/trunk/api2/src/java/javax/jdo/spi/JDOImplHelper.java?view=diff&rev=546175&r1=546174&r2=546175
==============================================================================
--- db/jdo/trunk/api2/src/java/javax/jdo/spi/JDOImplHelper.java (original)
+++ db/jdo/trunk/api2/src/java/javax/jdo/spi/JDOImplHelper.java Mon Jun 11 08:50:20 2007
@@ -22,6 +22,8 @@
 
 package javax.jdo.spi;
 
+import org.xml.sax.ErrorHandler;
+
 import java.lang.reflect.Constructor;
 
 import java.text.DateFormat;
@@ -45,6 +47,7 @@
 import javax.jdo.JDOFatalInternalException;
 import javax.jdo.JDOFatalUserException;
 import javax.jdo.JDOUserException;
+import javax.xml.parsers.DocumentBuilderFactory;
 
 /** This class is a helper class for JDO implementations.  It contains methods
  * to register metadata for persistence-capable classes and to perform common
@@ -104,6 +107,16 @@
      */
     private static DateFormat dateFormat;
 
+    /**
+     * The DocumentBuilderFactory used during jdoconfig.xml parsing.
+     */
+    private static DocumentBuilderFactory documentBuilderFactory;
+
+    /**
+     * The ErrorHandler used during jdoconfig.xml parsing.
+     */
+    private static ErrorHandler errorHandler;
+
     /** Register the default DateFormat instance.
      */
     static {
@@ -530,6 +543,37 @@
         }
     }
     
+    /**
+     * Register a DocumentBuilderFactory instance for use in parsing the
+     * resource(s) META-INF/jdoconfig.xml. The default is governed by the
+     * semantics of DocumentBuilderFactory.newInstance().
+     *
+     * @param factory the DocumentBuilderFactory instance to use
+     */
+    public synchronized void registerDocumentBuilderFactory(
+            DocumentBuilderFactory factory) {
+        documentBuilderFactory = factory;
+    }
+
+    public static DocumentBuilderFactory getRegisteredDocumentBuilderFactory() {
+        return documentBuilderFactory;
+    }
+
+    /**
+     * Register an ErrorHandler instance for use in parsing the
+     * resource(s) META-INF/jdoconfig.xml. The default is an ErrorHandler
+     * that throws on error or fatalError and ignores warnings.
+     *
+     * @param handler the ErrorHandler instance to use
+     */
+    public synchronized void registerErrorHandler(ErrorHandler handler) {
+        errorHandler = handler;
+    }
+
+    public static ErrorHandler getRegisteredErrorHandler() {
+        return errorHandler;
+    }
+
     /** Check that the parameter instance is of a class that is authorized for
      * JDOPermission("setStateManager").  This method is called by the
      * replaceStateManager method in persistence-capable classes.