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 sc...@apache.org on 2007/04/13 21:34:21 UTC

svn commit: r528621 - /webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java

Author: scheu
Date: Fri Apr 13 12:34:21 2007
New Revision: 528621

URL: http://svn.apache.org/viewvc?view=rev&rev=528621
Log:
WSCOMMONS-193
Contributor:Rich Scheuerle
OMSourceElementImpl should close its reader when complete.  Failure to close the reader can impact performance and memory consumption.

Modified:
    webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java

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?view=diff&rev=528621&r1=528620&r2=528621
==============================================================================
--- 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 Fri Apr 13 12:34:21 2007
@@ -64,6 +64,8 @@
 
     private static Log log = LogFactory.getLog(OMSourcedElementImpl.class);
     private static final boolean isDebugEnabled = log.isDebugEnabled();
+    
+    private XMLStreamReader readerFromDS = null;  // Reader from DataSource
 
     /**
      * Constructor.
@@ -143,10 +145,10 @@
             }
 
             // position reader to start tag
-            XMLStreamReader reader = getDirectReader();
+            readerFromDS = getDirectReader();
             try {
-                if (reader.getEventType() != XMLStreamConstants.START_ELEMENT) {
-                    while (reader.next() != XMLStreamConstants.START_ELEMENT) ;
+                if (readerFromDS.getEventType() != XMLStreamConstants.START_ELEMENT) {
+                    while (readerFromDS.next() != XMLStreamConstants.START_ELEMENT) ;
                 }
             } catch (XMLStreamException e) {
                 log.error("forceExpand: error parsing data soruce document for element " +
@@ -156,13 +158,13 @@
             }
 
             // make sure element local name and namespace matches what was expected
-            if (!reader.getLocalName().equals(getLocalName())) {
+            if (!readerFromDS.getLocalName().equals(getLocalName())) {
                 log.error("forceExpand: expected element name " +
-                        getLocalName() + ", found " + reader.getLocalName());
+                        getLocalName() + ", found " + readerFromDS.getLocalName());
                 throw new RuntimeException("Element name from data source is " +
-                        reader.getLocalName() + ", not the expected " + getLocalName());
+                        readerFromDS.getLocalName() + ", not the expected " + getLocalName());
             }
-            String readerURI = reader.getNamespaceURI();
+            String readerURI = readerFromDS.getNamespaceURI();
             readerURI = (readerURI == null) ? "" : readerURI;
             String uri = getNamespace().getNamespaceURI();
             if (!readerURI.equals(uri)) {
@@ -173,13 +175,13 @@
             }
 
             // Get the current prefix and the reader's prefix
-            String readerPrefix = reader.getPrefix();
+            String readerPrefix = readerFromDS.getPrefix();
             readerPrefix = (readerPrefix == null) ? "" : readerPrefix;
             String prefix = getNamespace().getPrefix();
 
             // set the builder for this element
             isParserSet = true;
-            super.setBuilder(new StAXOMBuilder(getOMFactory(), reader, this));
+            super.setBuilder(new StAXOMBuilder(getOMFactory(), readerFromDS, this));
             setComplete(false);
 
             // Update the prefix if necessary.  This must be done after
@@ -842,5 +844,12 @@
      */
     public void setComplete(boolean value) {
         done = value;
+        if (done == true && readerFromDS != null) {
+            try {
+                readerFromDS.close();
+            } catch (XMLStreamException e) {
+            }
+            readerFromDS = null;
+        }
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: commons-dev-help@ws.apache.org