You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2013/01/14 23:14:50 UTC

svn commit: r1433171 - in /webservices/commons/trunk/modules/axiom/modules: axiom-api/src/main/java/org/apache/axiom/om/ds/ axiom-api/src/main/java/org/apache/axiom/om/impl/ axiom-api/src/main/java/org/apache/axiom/om/impl/builder/ axiom-api/src/main/j...

Author: veithen
Date: Mon Jan 14 22:14:50 2013
New Revision: 1433171

URL: http://svn.apache.org/viewvc?rev=1433171&view=rev
Log:
Always release the parser so that it can be GCed. There is no valid reason not to do that.

Modified:
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/ds/OMDataSourceExtBase.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMXMLStreamReaderEx.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/util/CopyUtils.java
    webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMStAXWrapper.java
    webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/StreamSwitch.java
    webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/SwitchingWrapper.java
    webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/factory/AbstractOMMetaFactory.java
    webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java
    webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSerializableImpl.java
    webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java
    webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetXMLStreamReaderClose.java

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/ds/OMDataSourceExtBase.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/ds/OMDataSourceExtBase.java?rev=1433171&r1=1433170&r2=1433171&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/ds/OMDataSourceExtBase.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/ds/OMDataSourceExtBase.java Mon Jan 14 22:14:50 2013
@@ -149,7 +149,6 @@ public abstract class OMDataSourceExtBas
     private static void reader2writer(XMLStreamReader reader, 
                                      XMLStreamWriter writer) throws XMLStreamException {
         StAXOMBuilder builder = new StAXOMBuilder(reader);
-        builder.releaseParserOnClose(true);
         try {
             OMDocument omDocument = builder.getDocument();
             Iterator it = omDocument.getChildren();

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMXMLStreamReaderEx.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMXMLStreamReaderEx.java?rev=1433171&r1=1433170&r2=1433171&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMXMLStreamReaderEx.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMXMLStreamReaderEx.java Mon Jan 14 22:14:50 2013
@@ -45,6 +45,4 @@ public interface OMXMLStreamReaderEx ext
     // *** Methods that potentially could be promoted to OMXMLStreamReader ***
     
     boolean isClosed();
-    
-    void releaseParserOnClose(boolean value);
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java?rev=1433171&r1=1433170&r2=1433171&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java Mon Jan 14 22:14:50 2013
@@ -87,7 +87,6 @@ public abstract class StAXBuilder implem
     protected String charEncoding = null;
     
     protected boolean _isClosed = false;              // Indicate if parser is closed
-    protected boolean _releaseParserOnClose = false;  // Defaults to legacy behavior, which is keep the reference
 
     // Fields for Custom Builder implementation
     protected CustomBuilder customBuilderForPayload = null;
@@ -696,10 +695,9 @@ public abstract class StAXBuilder implem
         } finally {
             _isClosed = true;
             done = true;
-            // Release the parser so that it can be GC'd or reused.
-            if (_releaseParserOnClose) {
-                parser = null;
-            }
+            // Release the parser so that it can be GC'd or reused. This is important because the
+            // object model keeps a reference to the builder even after the builder is complete.
+            parser = null;
         }
     }
 
@@ -737,16 +735,8 @@ public abstract class StAXBuilder implem
     }
     
     /**
-     * Indicate if the parser resource should be release when closed.
-     * @param value boolean
+     * @deprecated As of Axiom 1.2.15, the builder always releases the parser.
      */
     public void releaseParserOnClose(boolean value) {
-        
-        // Release parser if already closed
-        if (isClosed() && value) {
-            parser = null;
-        }
-        _releaseParserOnClose = value;
-        
     }
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/util/CopyUtils.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/util/CopyUtils.java?rev=1433171&r1=1433170&r2=1433171&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/util/CopyUtils.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/util/CopyUtils.java Mon Jan 14 22:14:50 2013
@@ -80,7 +80,6 @@ public class CopyUtils {
                                      XMLStreamWriter writer)
     throws XMLStreamException {
         StAXOMBuilder builder = new StAXOMBuilder(reader);
-        builder.releaseParserOnClose(true);
         try {
             OMDocument omDocument = builder.getDocument();
             Iterator it = omDocument.getChildren();

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMStAXWrapper.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMStAXWrapper.java?rev=1433171&r1=1433170&r2=1433171&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMStAXWrapper.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMStAXWrapper.java Mon Jan 14 22:14:50 2013
@@ -114,10 +114,6 @@ class OMStAXWrapper extends StreamReader
         return streamSwitch.isClosed();
     }
 
-    public void releaseParserOnClose(boolean value) {
-        streamSwitch.releaseParserOnClose(value);
-    }
-
     public OMDataSource getDataSource() {
         return streamSwitch.getDataSource();
     }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/StreamSwitch.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/StreamSwitch.java?rev=1433171&r1=1433170&r2=1433171&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/StreamSwitch.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/StreamSwitch.java Mon Jan 14 22:14:50 2013
@@ -27,10 +27,6 @@ public class StreamSwitch extends Stream
         return ((SwitchingWrapper)getParent()).isClosed();
     }
 
-    public void releaseParserOnClose(boolean value) {
-        ((SwitchingWrapper)getParent()).releaseParserOnClose(value);
-    }
-
     public OMDataSource getDataSource() {
         return ((SwitchingWrapper)getParent()).getDataSource();
     }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/SwitchingWrapper.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/SwitchingWrapper.java?rev=1433171&r1=1433170&r2=1433171&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/SwitchingWrapper.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/SwitchingWrapper.java Mon Jan 14 22:14:50 2013
@@ -103,7 +103,6 @@ class SwitchingWrapper extends AbstractX
     private DataHandlerReader dataHandlerReader;
     
     private boolean isClosed = false;              // Indicate if parser is closed
-    private boolean releaseParserOnClose = false;  // Defaults to legacy behavior, which is keep the reference
 
     /**
      * The root node, i.e. the node from which the {@link XMLStreamReader} has been requested.
@@ -832,9 +831,7 @@ class SwitchingWrapper extends AbstractX
                 } finally {
                     isClosed = true;
                     // Release the parser so that it can be GC'd or reused.
-                    if (releaseParserOnClose) {
-                        setParser(null);
-                    }
+                    setParser(null);
                 }
             }
         }
@@ -1373,29 +1370,6 @@ class SwitchingWrapper extends AbstractX
     }
     
     /**
-     * Indicate if the parser resource should be release when closed.
-     * @param value boolean
-     */
-    public void releaseParserOnClose(boolean value) {
-        // if there is a StAXBuilder, it owns the parser 
-        // and controls the releaseOnClose status
-        if (builder != null && builder instanceof StAXBuilder) {
-            ((StAXBuilder) builder).releaseParserOnClose(value);
-            if (isClosed() && value) {
-                setParser(null);
-            }
-            return;
-        } else {
-            // Release parser if already closed
-            if (isClosed() && value) {
-                setParser(null);
-            }
-            releaseParserOnClose = value;
-        }
-        
-    }
-    
-    /**
      * @return OMDataSource associated with the current node or Null
      */
     public OMDataSource getDataSource() {

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/factory/AbstractOMMetaFactory.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/factory/AbstractOMMetaFactory.java?rev=1433171&r1=1433170&r2=1433171&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/factory/AbstractOMMetaFactory.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/factory/AbstractOMMetaFactory.java Mon Jan 14 22:14:50 2013
@@ -87,22 +87,12 @@ public abstract class AbstractOMMetaFact
         }
     }
     
-    private static OMXMLParserWrapper internalCreateStAXOMBuilder(OMFactory omFactory, XMLStreamReader parser) {
-        StAXOMBuilder builder = new StAXOMBuilder(omFactory, parser);
-        // StAXOMBuilder defaults to the "legacy" behavior, which is to keep a reference to the
-        // parser after the builder has been closed. Since releasing this reference is a good idea
-        // we default to releaseParserOnClose=true for builders created through the OMMetaFactory
-        // API.
-        builder.releaseParserOnClose(true);
-        return builder;
-    }
-
     public OMXMLParserWrapper createStAXOMBuilder(OMFactory omFactory, XMLStreamReader parser) {
-        return internalCreateStAXOMBuilder(omFactory, getXMLStreamReader(parser));
+        return new StAXOMBuilder(omFactory, getXMLStreamReader(parser));
     }
 
     public OMXMLParserWrapper createOMBuilder(OMFactory omFactory, StAXParserConfiguration configuration, InputSource is) {
-        return internalCreateStAXOMBuilder(omFactory, createXMLStreamReader(configuration, is));
+        return new StAXOMBuilder(omFactory, createXMLStreamReader(configuration, is));
     }
     
     public OMXMLParserWrapper createOMBuilder(OMFactory omFactory, Source source) {
@@ -133,29 +123,20 @@ public abstract class AbstractOMMetaFact
             OMFactory omFactory, InputSource rootPart, MimePartProvider mimePartProvider) {
         XOPAwareStAXOMBuilder builder = new XOPAwareStAXOMBuilder(omFactory, createXMLStreamReader(
                 configuration, rootPart), mimePartProvider);
-        builder.releaseParserOnClose(true);
-        return builder;
-    }
-
-    private SOAPModelBuilder internalCreateStAXSOAPModelBuilder(XMLStreamReader parser) {
-        StAXSOAPModelBuilder builder = new StAXSOAPModelBuilder(this, parser);
-        builder.releaseParserOnClose(true);
         return builder;
     }
 
     public SOAPModelBuilder createStAXSOAPModelBuilder(XMLStreamReader parser) {
-        return internalCreateStAXSOAPModelBuilder(getXMLStreamReader(parser));
+        return new StAXSOAPModelBuilder(this, getXMLStreamReader(parser));
     }
 
     public SOAPModelBuilder createSOAPModelBuilder(StAXParserConfiguration configuration, InputSource is) {
-        return internalCreateStAXSOAPModelBuilder(createXMLStreamReader(configuration, is));
+        return new StAXSOAPModelBuilder(this, createXMLStreamReader(configuration, is));
     }
 
     public SOAPModelBuilder createSOAPModelBuilder(StAXParserConfiguration configuration,
             SOAPFactory soapFactory, InputSource rootPart, MimePartProvider mimePartProvider) {
-        MTOMStAXSOAPModelBuilder builder = new MTOMStAXSOAPModelBuilder(soapFactory, createXMLStreamReader(
+        return new MTOMStAXSOAPModelBuilder(soapFactory, createXMLStreamReader(
                 configuration, rootPart), mimePartProvider);
-        builder.releaseParserOnClose(true);
-        return builder;
     }
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java?rev=1433171&r1=1433170&r2=1433171&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java Mon Jan 14 22:14:50 2013
@@ -722,7 +722,6 @@ public abstract class NodeImpl implement
         // If this is a StAXBuilder, close it.
         if (builder instanceof StAXBuilder &&
             !((StAXBuilder) builder).isClosed()) {
-            ((StAXBuilder) builder).releaseParserOnClose(true);
             ((StAXBuilder) builder).close();
         }
     }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSerializableImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSerializableImpl.java?rev=1433171&r1=1433170&r2=1433171&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSerializableImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSerializableImpl.java Mon Jan 14 22:14:50 2013
@@ -66,7 +66,6 @@ public abstract class OMSerializableImpl
         // If this is a StAXBuilder, close it.
         if (builder instanceof StAXBuilder &&
             !((StAXBuilder) builder).isClosed()) {
-            ((StAXBuilder) builder).releaseParserOnClose(true);
             ((StAXBuilder) builder).close();
         }
     }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java?rev=1433171&r1=1433170&r2=1433171&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java Mon Jan 14 22:14:50 2013
@@ -277,7 +277,6 @@ public class OMSourcedElementImpl extend
                 isExpanded = true;
                 StAXOMBuilder builder = new StAXOMBuilder(getOMFactory(), readerFromDS, this, characterEncoding);
                 builder.setAutoClose(true);
-                builder.releaseParserOnClose(true);
                 super.setBuilder(builder);
                 setComplete(false);
             }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetXMLStreamReaderClose.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetXMLStreamReaderClose.java?rev=1433171&r1=1433170&r2=1433171&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetXMLStreamReaderClose.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetXMLStreamReaderClose.java Mon Jan 14 22:14:50 2013
@@ -56,7 +56,6 @@ public class TestGetXMLStreamReaderClose
         if (reader instanceof OMXMLStreamReaderEx) {
             OMXMLStreamReaderEx wrapper = (OMXMLStreamReaderEx) reader;
             assertTrue(!wrapper.isClosed());
-            wrapper.releaseParserOnClose(true);
         }
         
         while (reader.hasNext()) {