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()); } }