Author: veithen Date: Sat Jan 28 19:16:38 2012 New Revision: 1237142 URL: http://svn.apache.org/viewvc?rev=1237142&view=rev Log: Don't store the org.xml.sax.Locator object. We never need it and the fact that we keep a reference may contribute to the issue described in AXIS-2863.
Modified: axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/encoding/DeserializationContext.java axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/message/SAX2EventRecorder.java Modified: axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/encoding/DeserializationContext.java URL: http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/encoding/DeserializationContext.java?rev=1237142&r1=1237141&r2=1237142&view=diff ============================================================================== --- axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/encoding/DeserializationContext.java (original) +++ axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/encoding/DeserializationContext.java Sat Jan 28 19:16:38 2012 @@ -84,8 +84,6 @@ public class DeserializationContext impl private NSStack namespaces = new NSStack(); - private Locator locator; - // Class used for deserialization using class metadata from // downstream deserializers private Class destClass; @@ -964,14 +962,11 @@ public class DeserializationContext impl public void setDocumentLocator(Locator locator) { - if (!doneParsing && (recorder != null)) { - recorder.setDocumentLocator(locator); - } - this.locator = locator; - } - - public Locator getDocumentLocator() { - return locator; + // We don't store the Locator because we don't need it. In addition it is typically + // a reference to some internal object of the parser and not keeping that reference + // ensures that this object (which may be heavyweight) can be garbage collected + // early (see AXIS-2863 for an issue that may be related to this: in that case, + // Locator is implemented by oracle.xml.parser.v2.XMLReader). } public void characters(char[] p1, int p2, int p3) throws SAXException { Modified: axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/message/SAX2EventRecorder.java URL: http://svn.apache.org/viewvc/axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/message/SAX2EventRecorder.java?rev=1237142&r1=1237141&r2=1237142&view=diff ============================================================================== --- axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/message/SAX2EventRecorder.java (original) +++ axis/axis1/java/trunk/axis/src/main/java/org/apache/axis/message/SAX2EventRecorder.java Sat Jan 28 19:16:38 2012 @@ -28,7 +28,6 @@ public class SAX2EventRecorder { private static final Integer Z = new Integer(0); - private static final Integer STATE_SET_DOCUMENT_LOCATOR = new Integer(0); private static final Integer STATE_START_DOCUMENT = new Integer(1); private static final Integer STATE_END_DOCUMENT = new Integer(2); private static final Integer STATE_START_PREFIX_MAPPING = new Integer(3); @@ -53,11 +52,9 @@ public class SAX2EventRecorder { private static final Integer STATE_END_CDATA = new Integer(17); private static final Integer STATE_COMMENT = new Integer(18); - org.xml.sax.Locator locator; objArrayVector events = new objArrayVector(); public void clear() { - locator = null; events = new objArrayVector(); } public int getLength() @@ -65,10 +62,6 @@ public class SAX2EventRecorder { return events.getLength(); } - public int setDocumentLocator(org.xml.sax.Locator p1) { - locator = p1; - return events.add(STATE_SET_DOCUMENT_LOCATOR, Z,Z,Z,Z); - } public int startDocument() { return events.add(STATE_START_DOCUMENT, Z,Z,Z,Z); } @@ -187,9 +180,6 @@ public class SAX2EventRecorder { } else if (event == STATE_SKIPPED_ENTITY) { handler.skippedEntity((String)events.get(n,1)); - } else if (event == STATE_SET_DOCUMENT_LOCATOR) { - handler.setDocumentLocator(locator); - } else if (event == STATE_START_DOCUMENT) { handler.startDocument();