openamf/src/java/org/openamf/util OpenAMFUtils.java,1.17,1.18

[email protected] Mon, 12 Jan 2004 23:07:21 -0800
Newsgroups gmane.comp.java.openamf.cvs
Message-ID <[email protected]>
Update of /cvsroot/openamf/openamf/src/java/org/openamf/util
In directory sc8-pr-cvs1:/tmp/cvs-serv31014/src/java/org/openamf/util

Modified Files:
	OpenAMFUtils.java 
Log Message:
changed the implementation of decodeParameter.
This change is intended to address the loitering objects 
that were previously reported on the openamf mailing list.
A user reported an OutOfMemoryError and it appears 
that the decodeParameter implementation was 
unintentionally causing objects to be strongly referenced 
for an indefinite amount of time.
This fix should be reviewed by the CarbonFive ASTranslator team.


Index: OpenAMFUtils.java
===================================================================
RCS file: /cvsroot/openamf/openamf/src/java/org/openamf/util/OpenAMFUtils.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** OpenAMFUtils.java	8 Dec 2003 04:16:48 -0000	1.17
--- OpenAMFUtils.java	13 Jan 2004 07:07:19 -0000	1.18
***************
*** 14,20 ****
  import org.apache.commons.logging.LogFactory;
  
! import com.carbonfive.flash.decoder.ActionScriptDecoder;
! import com.carbonfive.flash.decoder.CachingDecoder;
! import com.carbonfive.flash.decoder.DecoderFactory;
  
  import flashgateway.io.ASObject;
--- 14,18 ----
  import org.apache.commons.logging.LogFactory;
  
! import com.carbonfive.flash.ASTranslator;
  
  import flashgateway.io.ASObject;
***************
*** 36,50 ****
  		Object parameter,
  		Class parameterType) {
  		log.debug(
  			"Decoding parameter: " + parameter + " to type: " + parameterType);
  		if (parameter == null) {
  			return null;
  		}
! 		if (parameterType.equals(java.sql.Date.class)
! 			&& parameter instanceof java.util.Date) {
! 			java.util.Date date = (java.util.Date) parameter;
! 			java.sql.Date sqlDate = new java.sql.Date(date.getTime());
! 			return sqlDate;
! 		}
  		if (ASObject.class.isAssignableFrom(parameterType)
  			&& parameter instanceof ASObject) {
--- 34,45 ----
  		Object parameter,
  		Class parameterType) {
+ 		
  		log.debug(
  			"Decoding parameter: " + parameter + " to type: " + parameterType);
+ 		
  		if (parameter == null) {
  			return null;
  		}
! 		
  		if (ASObject.class.isAssignableFrom(parameterType)
  			&& parameter instanceof ASObject) {
***************
*** 54,59 ****
  		}
  
! 		boolean setType = false;
! 		DecoderFactory decoderFactory = DecoderFactory.getInstance();
  		if (parameter instanceof ASObject
  			&& ((ASObject) parameter).getType() == null) {
--- 49,53 ----
  		}
  
! 		
  		if (parameter instanceof ASObject
  			&& ((ASObject) parameter).getType() == null) {
***************
*** 62,87 ****
  				//don't set type
  			} else {
- 				setType = true;
  				((ASObject) parameter).setType(parameterType.getName());
  			}
  		}
  
! 		ActionScriptDecoder decoder =
! 			decoderFactory.getDecoder(parameter, parameterType);
! 		log.debug(
! 			"decoder: "
! 				+ ((CachingDecoder) decoder)
! 					.getNextDecoder()
! 					.getClass()
! 					.getName());
! 		Object decodedObject = decoder.decodeObject(parameter, parameterType);
! 
! 		if (!setType
! 			&& decodedObject == null
! 			&& parameter instanceof ASObject) {
! 			((ASObject) parameter).setType(parameterType.getName());
! 			decodedObject = decoder.decodeObject(parameter, parameterType);
! 		}
  		log.debug("decodedObject: " + decodedObject);
  		return decodedObject;
  	}
--- 56,69 ----
  				//don't set type
  			} else {
  				((ASObject) parameter).setType(parameterType.getName());
  			}
  		}
  
! 		ASTranslator translator = new ASTranslator();
! 		
! 		Object decodedObject = translator.fromActionScript(parameter);
! 		
  		log.debug("decodedObject: " + decodedObject);
+ 		
  		return decodedObject;
  	}




-------------------------------------------------------
This SF.net email is sponsored by: Perforce Software.
Perforce is the Fast Software Configuration Management System offering
advanced branching capabilities and atomic changes on 50+ platforms.
Free Eval! http://www.perforce.com/perforce/loadprog.html