You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by ve...@apache.org on 2008/12/14 15:00:53 UTC

svn commit: r726447 - in /webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp: DOOMDocumentBuilder.java DOOMDocumentBuilderFactory.java DocumentBuilderFactoryImpl.java DocumentBuilderImpl.java

Author: veithen
Date: Sun Dec 14 06:00:53 2008
New Revision: 726447

URL: http://svn.apache.org/viewvc?rev=726447&view=rev
Log:
WSCOMMONS-412: Deprecated DocumentBuilderFactoryImpl and DocumentBuilderImpl and created two new classes DOOMDocumentBuilderFactory and DOOMDocumentBuilder without the setDOOMRequired and schema hacks. This allows us to get rid of the hacks (and have JAXP compliant implementations) without breaking existing code.

Added:
    webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DOOMDocumentBuilder.java
      - copied, changed from r726295, webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderImpl.java
    webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DOOMDocumentBuilderFactory.java
      - copied, changed from r726295, webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderFactoryImpl.java
Modified:
    webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderFactoryImpl.java
    webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderImpl.java

Copied: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DOOMDocumentBuilder.java (from r726295, webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderImpl.java)
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DOOMDocumentBuilder.java?p2=webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DOOMDocumentBuilder.java&p1=webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderImpl.java&r1=726295&r2=726447&rev=726447&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DOOMDocumentBuilder.java Sun Dec 14 06:00:53 2008
@@ -35,20 +35,13 @@
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
-import javax.xml.validation.Schema;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
-public class DocumentBuilderImpl extends DocumentBuilder {
-
-    /** The DocumentBuilderFactory used to create this document builder */
-    private DocumentBuilderFactoryImpl factory;
-
-    protected DocumentBuilderImpl(DocumentBuilderFactoryImpl fac) {
-        super();
-        this.factory = fac;
+public class DOOMDocumentBuilder extends DocumentBuilder {
+    protected DOOMDocumentBuilder() {
     }
 
     /**
@@ -149,14 +142,4 @@
         // TODO
         throw new UnsupportedOperationException("TODO");
     }
-
-    /* (non-Javadoc)
-     * @see javax.xml.parsers.DocumentBuilder#getSchema()
-     */
-    public Schema getSchema() {
-        //HACK : To get opensaml working 
-        return this.factory.schema;
-    }
-
-
 }

Copied: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DOOMDocumentBuilderFactory.java (from r726295, webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderFactoryImpl.java)
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DOOMDocumentBuilderFactory.java?p2=webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DOOMDocumentBuilderFactory.java&p1=webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderFactoryImpl.java&r1=726295&r2=726447&rev=726447&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderFactoryImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DOOMDocumentBuilderFactory.java Sun Dec 14 06:00:53 2008
@@ -22,66 +22,14 @@
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.validation.Schema;
-
-public class DocumentBuilderFactoryImpl extends DocumentBuilderFactory {
-
-    /**
-     * Temporary solution until DOOM's DocumentBuilder module is done. Use ThreadLocal to determine
-     * whether or not DOOM implementation is required. By default (isDOOMRequired() == false), we
-     * will use the one from JDK (Crimson)
-     */
-    private static DocumentBuilderFactory originalDocumentBuilderFactory =
-            DocumentBuilderFactory.newInstance();
-    private static String originalDocumentBuilderFactoryClassName = null;
-    private static ThreadLocal documentBuilderFactoryTracker = new ThreadLocal();
-
-    protected Schema schema;
-
-    public static boolean isDOOMRequired() {
-        Object value = documentBuilderFactoryTracker.get();
-        return (value != null);
-    }
-
-    public static void setDOOMRequired(boolean isDOOMRequired) {
-        String systemKey = DocumentBuilderFactory.class.getName();
-        if (isDOOMRequired) {
-            if (!isDOOMRequired()) {
-                originalDocumentBuilderFactory = DocumentBuilderFactory.newInstance();
-                originalDocumentBuilderFactoryClassName =
-                        originalDocumentBuilderFactory.getClass().getName();
-                documentBuilderFactoryTracker.set(Boolean.TRUE);
-                System.setProperty(systemKey, DocumentBuilderFactoryImpl.class.getName());
-            }
-        } else {
-            String currentFactoryClassName =
-                    DocumentBuilderFactory.newInstance().getClass().getName();
-            if (currentFactoryClassName != null &&
-                    currentFactoryClassName.equals(DocumentBuilderFactoryImpl.class.getName())) {
-                System.getProperties().remove(systemKey);
-                if (originalDocumentBuilderFactoryClassName != null) {
-                    System.setProperty(DocumentBuilderFactory.class.getName(),
-                                       originalDocumentBuilderFactoryClassName);
-                }
-            }
-            documentBuilderFactoryTracker.set(null);
-            originalDocumentBuilderFactory = null;
-        }
-    }
-
-
-    public DocumentBuilderFactoryImpl() {
-        super();
-    }
 
+/**
+ * Document builder factory that conforms to JAXP.
+ */
+public class DOOMDocumentBuilderFactory extends DocumentBuilderFactory {
     public DocumentBuilder newDocumentBuilder()
             throws ParserConfigurationException {
-        /**
-         * Determine which DocumentBuilder implementation should be returned
-         */
-        return isDOOMRequired()
-                ? new DocumentBuilderImpl(this)
-                : originalDocumentBuilderFactory.newDocumentBuilder();
+        return new DOOMDocumentBuilder();
     }
 
     public Object getAttribute(String arg0) throws IllegalArgumentException {
@@ -95,10 +43,6 @@
         // throw new UnsupportedOperationException("TODO");
     }
 
-    public static DocumentBuilderFactory newInstance() {
-        return new DocumentBuilderFactoryImpl();
-    }
-
     public void setFeature(String name, boolean value)
             throws ParserConfigurationException {
         // TODO TODO OS
@@ -108,22 +52,4 @@
         // TODO TODO
         throw new UnsupportedOperationException("TODO");
     }
-
-    /* (non-Javadoc)
-     * @see javax.xml.parsers.DocumentBuilderFactory#setSchema(javax.xml.validation.Schema)
-     */
-    public void setSchema(Schema schema) {
-        //HACK: Overriding to get opensaml working !!
-        this.schema = schema;
-    }
-
-    /* (non-Javadoc)
-     * @see javax.xml.parsers.DocumentBuilderFactory#getSchema()
-     */
-    public Schema getSchema() {
-        //HACK: Overriding to get opensaml working !!
-        return this.schema;
-    }
-
-
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderFactoryImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderFactoryImpl.java?rev=726447&r1=726446&r2=726447&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderFactoryImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderFactoryImpl.java Sun Dec 14 06:00:53 2008
@@ -24,6 +24,17 @@
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.validation.Schema;
 
+/**
+ * @deprecated
+ *    This class has static methods that allow to switch between DOOM and the default
+ *    DOM implementation as returned by JAXP. This was a hack introduced for Rampart.
+ *    Recent versions of Rampart no longer rely on this hack. On the other hand
+ *    usage of {@link #setDOOMRequired(boolean)} in a concurrent environment can
+ *    lead to unexpected behavior and severe bugs, as shown in WSCOMMONS-210 and AXIS2-1570.
+ *    Due to the way {@link #newDocumentBuilder()} is implemented, it is not possible
+ *    to get rid of the setDOOMRequired hack without the risk of breaking existing code.
+ *    Therefore this class has been deprecated in favor of {@link DOOMDocumentBuilderFactory}. 
+ */
 public class DocumentBuilderFactoryImpl extends DocumentBuilderFactory {
 
     /**

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderImpl.java?rev=726447&r1=726446&r2=726447&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/jaxp/DocumentBuilderImpl.java Sun Dec 14 06:00:53 2008
@@ -41,6 +41,9 @@
 import java.io.IOException;
 import java.io.InputStream;
 
+/**
+ * @deprecated see {@link DocumentBuilderFactoryImpl}
+ */
 public class DocumentBuilderImpl extends DocumentBuilder {
 
     /** The DocumentBuilderFactory used to create this document builder */