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 */


Reply via email to