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 wo...@apache.org on 2009/03/24 20:47:34 UTC

svn commit: r757984 - in /webservices/commons/trunk/modules/axiom/modules: axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java axiom-tests/src/test/java/org/apache/axiom/om/impl/serializer/OMSerializerTest.java

Author: woodroy
Date: Tue Mar 24 19:47:33 2009
New Revision: 757984

URL: http://svn.apache.org/viewvc?rev=757984&view=rev
Log:
Fix to close parser in 'internalSerialize' when done with non-caching code block
Contributor: Roy Wood from Mike Rheinheimer

Modified:
    webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java
    webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/serializer/OMSerializerTest.java

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java?rev=757984&r1=757983&r2=757984&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java Tue Mar 24 19:47:33 2009
@@ -19,6 +19,8 @@
 
 package org.apache.axiom.soap.impl.llom;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.axiom.om.OMConstants;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMException;
@@ -28,6 +30,7 @@
 import org.apache.axiom.om.impl.MTOMXMLStreamWriter;
 import org.apache.axiom.om.impl.llom.OMNodeImpl;
 import org.apache.axiom.om.impl.util.OMSerializerUtil;
+import org.apache.axiom.om.impl.builder.StAXBuilder;
 import org.apache.axiom.soap.SOAP11Constants;
 import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axiom.soap.SOAP12Version;
@@ -47,6 +50,8 @@
 /** Class SOAPEnvelopeImpl */
 public class SOAPEnvelopeImpl extends SOAPElement
         implements SOAPEnvelope, OMConstants {
+    private static Log log = LogFactory.getLog(SOAPEnvelopeImpl.class);
+    private static final boolean isDebugEnabled = log.isDebugEnabled();
 
     /**
      * Constructor
@@ -245,6 +250,32 @@
             } else {
                 OMSerializerUtil.serializeByPullStream(this, writer, cache);
             }
+            // let's try to close the builder/parser here since we are now done with the
+            // non-caching code block serializing the top-level SOAPEnvelope element
+            // TODO: should use 'instance of OMXMLParserWrapper' instead?  StAXBuilder is more generic
+            if ((builder != null) && (builder instanceof StAXBuilder)) {
+                try {
+                    if (isDebugEnabled) {
+                        log.debug("closing builder: " + builder);
+                    }
+                    StAXBuilder staxBuilder = (StAXBuilder) builder;
+                    staxBuilder.close();
+                } catch (Exception e) {
+                    if (isDebugEnabled) {
+                        log.error("Could not close builder or parser due to: ", e);
+                    }
+                }
+            } else {
+                if (isDebugEnabled) {
+                    log.debug("Could not close builder or parser due to:");
+                    if (builder == null) {
+                        log.debug("builder is null");
+                    }
+                    if ((builder != null) && !(builder instanceof StAXBuilder)) {
+                        log.debug("builder is not instance of " + StAXBuilder.class.getName());
+                    }
+                }
+            }
         }
     }
 

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/serializer/OMSerializerTest.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/serializer/OMSerializerTest.java?rev=757984&r1=757983&r2=757984&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/serializer/OMSerializerTest.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/serializer/OMSerializerTest.java Tue Mar 24 19:47:33 2009
@@ -121,12 +121,13 @@
         try {
             env.serializeAndConsume(writer);
             fail();
-        } catch (XMLStreamException e) {
+        } catch (UnsupportedOperationException e) {
             e.printStackTrace(new PrintWriter(stringWriter, true));
             assertTrue(stringWriter.toString()
-                    .indexOf("problem accessing the parser. Parser already accessed!") > -1);
+                                   .indexOf("The parser is already consumed!") > -1);
         } catch (Exception e) {
-            fail("Expecting an XMLStreamException " + e.getMessage());
+            e.printStackTrace();
+            fail("Expecting an XMLStreamException, but got instead: " + e.getClass().getName() + ": " + e.getMessage());
         }
     }