Browse Source

ZF-6641 Shared References are duplicated when encountered in the serialization process. This update resolves duplicated references and makes Zend Amf fully implement the AMF protocol. Special thanks to Stefan Klug

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@16251 44c647ce-9c0f-0410-b52a-842ac1e357ba
wadearnold 16 years ago
parent
commit
fddad3aed8

+ 196 - 75
library/Zend/Amf/Parse/Amf3/Serializer.php

@@ -36,11 +36,23 @@ require_once 'Zend/Amf/Parse/TypeLoader.php';
 class Zend_Amf_Parse_Amf3_Serializer extends Zend_Amf_Parse_Serializer
 {
     /**
-     * reference key to objects that have already been encountered. 
+     * An array of reference objects per amf body
      * @var array
      */
-	private $_references = array();
-	
+    protected $_referenceObjects = array();
+
+    /**
+     * An array of reference strings per amf body
+     * @var array
+     */
+    protected $_referenceStrings = array();
+    
+    /**
+     * An array of reference class definitions, indexed by classname
+     * @var array
+     */
+    protected $_referenceDefinitions = array();
+    
     /**
      * Serialize PHP types to AMF3 and write to stream
      *
@@ -84,10 +96,10 @@ class Zend_Amf_Parse_Amf3_Serializer extends Zend_Amf_Parse_Serializer
                     $this->writeObject($data);
                     break;
                 case Zend_Amf_Constants::AMF3_BYTEARRAY:
-                    $this->writeString($data instanceof Zend_Amf_Value_ByteArray ? $data->getData() : $data);
+                    $this->writeByteArray($data);
                     break;
                 case Zend_Amf_Constants::AMF3_XMLSTRING;
-                    $this->writeString($data);
+                    $this->writeXml($data);
                     break;
                 default:
                     require_once 'Zend/Amf/Exception.php';
@@ -131,13 +143,7 @@ class Zend_Amf_Parse_Amf3_Serializer extends Zend_Amf_Parse_Serializer
                         $markerType = Zend_Amf_Constants::AMF3_DATE;
                     } else if ($data instanceof Zend_Amf_Value_ByteArray) {
                         $markerType = Zend_Amf_Constants::AMF3_BYTEARRAY;
-                    } else if ($data instanceof DOMDocument) {
-                        // convert object to string
-                        $data = $data->saveXml();
-                        $markerType = Zend_Amf_Constants::AMF3_XMLSTRING;
-                    } else if ($data instanceof SimpleXMLElement) {
-                        // convert object to string;
-                        $data = $data->asXML();
+                    } else if (($data instanceof DOMDocument) || ($data instanceof SimpleXMLElement)) {
                         $markerType = Zend_Amf_Constants::AMF3_XMLSTRING;
                     } else {
                         $markerType = Zend_Amf_Constants::AMF3_OBJECT;
@@ -183,6 +189,21 @@ class Zend_Amf_Parse_Amf3_Serializer extends Zend_Amf_Parse_Serializer
         $this->_stream->writeByte($int & 0xff);
         return $this;
     }
+    
+    /**
+     * Send string to output stream, without trying to reference it.
+     * The string is prepended with strlen($string) << 1 | 0x01
+     *
+     * @param  string $string
+     * @return Zend_Amf_Parse_Amf3_Serializer
+     */
+    protected function writeBinaryString($string){
+        $ref = strlen($string) << 1 | 0x01;
+        $this->writeInteger($ref);
+        $this->_stream->writeBytes($string);
+        
+        return $this;
+    }
 
     /**
      * Send string to output stream
@@ -192,9 +213,74 @@ class Zend_Amf_Parse_Amf3_Serializer extends Zend_Amf_Parse_Serializer
      */
     public function writeString($string)
     {
-        $ref = strlen($string) << 1 | 0x01;
-        $this->writeInteger($ref);
-        $this->_stream->writeBytes($string);
+        $len = strlen($string);
+        if(!$len){
+            $this->writeInteger(0x01);
+            return $this;
+        }
+        
+        $ref = array_search($string, $this->_referenceStrings, true);
+        if($ref === false){
+            $this->_referenceStrings[] = $string;
+            $this->writeBinaryString($string);
+        } else {
+            $ref <<= 1;
+            $this->writeInteger($ref);
+        }
+        
+        return $this;
+    }
+    
+    /**
+     * Send ByteArray to output stream
+     *
+     * @param  string|Zend_Amf_Value_ByteArray  $data
+     * @return Zend_Amf_Parse_Amf3_Serializer
+     */
+    public function writeByteArray($data){
+        if($this->writeObjectReference($data)){
+            return $this;
+        }
+        
+        if(is_string($data)) {
+            //nothing to do
+        } else if ($data instanceof Zend_Amf_Value_ByteArray) {
+            $data = $data->getData();
+        } else {
+            require_once 'Zend/Amf/Exception.php';
+            throw new Zend_Amf_Exception('Invalid ByteArray specified; must be a string or Zend_Amf_Value_ByteArray');
+        }
+        
+        $this->writeBinaryString($data);
+        
+        return $this;
+    }
+    
+	/**
+     * Send xml to output stream
+     *
+     * @param  DOMDocument|SimpleXMLElement  $xml
+     * @return Zend_Amf_Parse_Amf3_Serializer
+     */
+    public function writeXml($xml)
+    {
+        if($this->writeObjectReference($xml)){
+            return $this;
+        }    
+
+        if(is_string($xml)) {
+            //nothing to do
+        } else if ($xml instanceof DOMDocument) {
+            $xml = $xml->saveXml();
+        } else if ($xml instanceof SimpleXMLElement) {
+            $xml = $xml->asXML();
+        } else {
+            require_once 'Zend/Amf/Exception.php';
+            throw new Zend_Amf_Exception('Invalid xml specified; must be a DOMDocument or SimpleXMLElement');
+        }
+        
+        $this->writeBinaryString($xml);
+        
         return $this;
     }
 
@@ -206,6 +292,10 @@ class Zend_Amf_Parse_Amf3_Serializer extends Zend_Amf_Parse_Serializer
      */
     public function writeDate($date)
     {
+        if($this->writeObjectReference($date)){
+            return $this;
+        }
+        
         if ($date instanceof DateTime) {
             $dateString = $date->format('U') * 1000;
         } elseif ($date instanceof Zend_Date) {
@@ -229,8 +319,10 @@ class Zend_Amf_Parse_Amf3_Serializer extends Zend_Amf_Parse_Serializer
      */
     public function writeArray(array $array)
     {
-    	$this->_references[] = $array;
-    	
+        if($this->writeObjectReference($array)){
+            return $this;
+        }
+        
         // have to seperate mixed from numberic keys.
         $numeric = array();
         $string  = array();
@@ -260,33 +352,25 @@ class Zend_Amf_Parse_Amf3_Serializer extends Zend_Amf_Parse_Serializer
         }
         return $this;
     }
-
+    
     /**
-     * Create a reference to an existing object. 
-     * @param $key
-     * @return Zend_Amf_Parse_Amf3_Serializer
+     * Check if the given object is in the reference table, write the reference if it exists,
+     * otherwise add the object to the reference table
+     * 
+     * @param mixed $object object to check for reference
+     * @return Boolean true, if the reference was written, false otherwise
      */
-	public function writeReference($key)
-	{
-		$this->writeInteger($key << 1);
-		return $this;
-	}
-
-	/**
-	 * Check to see if the reference already exists in the lookup table. 
-	 * @param $object
-	 * @return object reference | false if it is not found. 
-	 */
-	private function referenceExist($object)
-	{
-		$key = array_search($object, $this->_references, true);
-		if($key !== false) {
-			return $key;
-		} else { 
-			$this->_references[] = $object;
-			return false;
-		}
-	}
+    protected function writeObjectReference($object){
+        $ref = array_search($object, $this->_referenceObjects,true);
+        //quickly handle object references
+        if($ref !== false){
+            $ref <<= 1;
+            $this->writeInteger($ref);
+            return true;
+        }
+        $this->_referenceObjects[] = $object;
+        return false;
+    }
 
     /**
      * Write object to ouput stream
@@ -296,12 +380,10 @@ class Zend_Amf_Parse_Amf3_Serializer extends Zend_Amf_Parse_Serializer
      */
     public function writeObject($object)
     {
-    	if(($key = $this->referenceExist($object)) !== false) {
-    		 $this->writeReference($key); 
-    		 return $this;
-    	}
-    	
-        $encoding  = Zend_Amf_Constants::ET_PROPLIST;
+        if($this->writeObjectReference($object)){
+            return $this;
+        }
+        
         $className = '';
 
         //Check to see if the object is a typed object and we need to change
@@ -325,44 +407,83 @@ class Zend_Amf_Parse_Amf3_Serializer extends Zend_Amf_Parse_Serializer
                 $className = '';
                 break;
 
- 	    // By default, use object's class name
+ 	        // By default, use object's class name
             default:
-		$className = get_class($object);
+		        $className = get_class($object);
                 break;
         }
-
-        $traitsInfo  = Zend_Amf_Constants::AMF3_OBJECT_ENCODING;
-        $traitsInfo |= $encoding << 2;
+        
+        $writeTraits = true;
+              
+        //check to see, if we have a corresponding definition
+        if(array_key_exists($className, $this->_referenceDefinitions)){
+            $traitsInfo    = $this->_referenceDefinitions[$className]['id'];
+            $encoding      = $this->_referenceDefinitions[$className]['encoding'];
+            $propertyNames = $this->_referenceDefinitions[$className]['propertyNames'];
+            
+            $traitsInfo = ($traitsInfo << 2) | 0x01;
+            
+            $writeTraits = false;
+        } else {
+            $propertyNames = array();
+            
+            if($className == ''){
+                //if there is no className, we interpret the class as dynamic without any sealed members
+                $encoding = Zend_Amf_Constants::ET_DYNAMIC;
+            } else {
+                $encoding = Zend_Amf_Constants::ET_PROPLIST;
+            
+                foreach($object as $key => $value) {
+                    if( $key[0] != "_") {
+                        $propertyNames[] = $key;
+                    }
+                }
+            }
+                
+            $this->_referenceDefinitions[$className] = array(
+                        'id'            => count($this->_referenceDefinitions),
+                        'encoding'      => $encoding,
+                        'propertyNames' => $propertyNames,
+                    );
+            
+            $traitsInfo = Zend_Amf_Constants::AMF3_OBJECT_ENCODING;
+            $traitsInfo |= $encoding << 2;
+            $traitsInfo |= (count($propertyNames) << 4);
+        }
+        
+        $this->writeInteger($traitsInfo);
+        
+        if($writeTraits){
+            $this->writeString($className);
+            foreach ($propertyNames as $value) {
+                $this->writeString($value);
+            }
+        }
+        
         try {
             switch($encoding) {
                 case Zend_Amf_Constants::ET_PROPLIST:
-                    $count = 0;
-                    foreach($object as $key => $value) {
-                        if( $key[0] != "_") {
-                            $count++;
-                        }
+                    //Write the sealed values to the output stream.
+                    foreach ($propertyNames as $key) {
+                        $this->writeTypeMarker($object->$key);
                     }
-                    $traitsInfo |= ($count << 4);
-
-                    // Write the object ID
-                    $this->writeInteger($traitsInfo);
-
-                    // Write the classname
-                    $this->writeString($className);
-
-                    // Write the object Key's to the output stream
-                    foreach ($object as $key => $value) {
-                        if( $key[0] != "_") {
-                            $this->writeString($key);
-                        }
+                    break;
+                case Zend_Amf_Constants::ET_DYNAMIC:
+                    //Write the sealed values to the output stream.
+                    foreach ($propertyNames as $key) {
+                        $this->writeTypeMarker($object->$key);
                     }
-
-                    //Write the object values to the output stream.
-                    foreach ($object as $key => $value) {
-                        if( $key[0] != "_") {
+                    
+                    //Write remaining properties
+                    foreach($object as $key => $value){
+                        if(!in_array($key,$propertyNames) && $key[0] != "_"){
+                            $this->writeString($key);
                             $this->writeTypeMarker($value);
                         }
                     }
+                    
+                    //Write an empty string to end the dynamic part
+                    $this->writeString('');
                     break;
                 case Zend_Amf_Constants::ET_EXTERNAL:
                     require_once 'Zend/Amf/Exception.php';

BIN
tests/Zend/Amf/Response/mock/arrayAmf3Response.bin


BIN
tests/Zend/Amf/Response/mock/boolFalseAmf3Response.bin


BIN
tests/Zend/Amf/Response/mock/boolTrueAmf3Response.bin


BIN
tests/Zend/Amf/Response/mock/classMapAmf3Response.bin


BIN
tests/Zend/Amf/Response/mock/dateAmf3Response.bin


BIN
tests/Zend/Amf/Response/mock/domdocumentAmf3Response.bin


BIN
tests/Zend/Amf/Response/mock/largeIntAmf3Response.bin


BIN
tests/Zend/Amf/Response/mock/numberAmf3Response.bin


BIN
tests/Zend/Amf/Response/mock/referenceObjectAmf3Response.bin


BIN
tests/Zend/Amf/Response/mock/stringAmf3Response.bin


+ 46 - 46
tests/Zend/Amf/ResponseTest.php

@@ -73,12 +73,12 @@ class Zend_Amf_ResponseTest extends PHPUnit_Framework_TestCase
 
         // Create an acknowlege message for a response to a RemotingMessage
         $acknowledgeMessage = new Zend_Amf_Value_Messaging_AcknowledgeMessage(null);
-        $acknowledgeMessage->correlationId = '1AE5794F-C53D-FB03-5D2A-BEE6ADCD953C';
-        $acknowledgeMessage->clientId = '6FC3B309-11DF-CB49-9A4D-0000579EAF16';
-        $acknowledgeMessage->messageId = '1CCDEA74-75CF-ACE8-0B46-00002C38B1A4';
+        $acknowledgeMessage->correlationId = 'C626EDB9-8CF4-C305-8915-096C8AA80E2E';
+        $acknowledgeMessage->clientId = '49D6F1AF-ADFB-3A48-5B2D-00000A5D0301';
+        $acknowledgeMessage->messageId = '5F58E888-58E8-12A9-7A85-00006D91CCB1';
         $acknowledgeMessage->destination = null;
         $acknowledgeMessage->timeToLive = 0;
-        $acknowledgeMessage->timestamp = '122297350100';
+        $acknowledgeMessage->timestamp = '124569861800';
         $acknowledgeMessage->body = $data;
 
 
@@ -109,12 +109,12 @@ class Zend_Amf_ResponseTest extends PHPUnit_Framework_TestCase
 
         // Create an acknowlege message for a response to a RemotingMessage
         $acknowledgeMessage = new Zend_Amf_Value_Messaging_AcknowledgeMessage(null);
-        $acknowledgeMessage->correlationId = '014167F1-FCEB-6346-DCEF-BF03441367F5';
-        $acknowledgeMessage->clientId = '6DEB5BBA-AFEE-CCA9-FB3C-00005662BA16';
-        $acknowledgeMessage->messageId = '1822F838-FE49-11E8-730F-00000705B926';
+        $acknowledgeMessage->correlationId = '3B4F4BAA-D833-DA5B-7D97-0971DE711DBC';
+        $acknowledgeMessage->clientId = '136D9153-C1BD-10E9-9ABB-000014F0B7DD';
+        $acknowledgeMessage->messageId = '75AE87A4-D358-4FA9-422C-00005570ED48';
         $acknowledgeMessage->destination = null;
         $acknowledgeMessage->timeToLive = 0;
-        $acknowledgeMessage->timestamp = '122297537400';
+        $acknowledgeMessage->timestamp = '124569896700';
         $acknowledgeMessage->body = $data;
 
         $newBody = new Zend_Amf_Value_MessageBody($this->responseURI, null, $acknowledgeMessage);
@@ -142,12 +142,12 @@ class Zend_Amf_ResponseTest extends PHPUnit_Framework_TestCase
 
         // Create an acknowlege message for a response to a RemotingMessage
         $acknowledgeMessage = new Zend_Amf_Value_Messaging_AcknowledgeMessage(null);
-        $acknowledgeMessage->correlationId = '712ECAE3-2888-990E-D91C-E29E11AC7D0E';
-        $acknowledgeMessage->clientId = '5E55BB37-59AA-A969-7373-0000158CEBB7';
-        $acknowledgeMessage->messageId = '67B9E08C-0E35-9168-BA7B-000066ED5FF4';
+        $acknowledgeMessage->correlationId = '1D556448-6DF0-6D0B-79C7-09798CC54A93';
+        $acknowledgeMessage->clientId = '03EB43E5-3ADA-0F69-DA96-00007A54194D';
+        $acknowledgeMessage->messageId = '5E4C2B6B-ADAC-4C49-52B6-0000205BC451';
         $acknowledgeMessage->destination = null;
         $acknowledgeMessage->timeToLive = 0;
-        $acknowledgeMessage->timestamp = '122357272200';
+        $acknowledgeMessage->timestamp = '124569947000';
         $acknowledgeMessage->body = $data;
 
         $newBody = new Zend_Amf_Value_MessageBody($this->responseURI, null, $acknowledgeMessage);
@@ -179,12 +179,12 @@ class Zend_Amf_ResponseTest extends PHPUnit_Framework_TestCase
 
         // Create an acknowlege message for a response to a RemotingMessage
         $acknowledgeMessage = new Zend_Amf_Value_Messaging_AcknowledgeMessage(null);
-        $acknowledgeMessage->correlationId = 'F12B5C25-1302-8A8F-2A64-C14D2B3CB7D5';
-        $acknowledgeMessage->clientId = '4C2A28C0-41BB-DA28-93C3-000018B12642';
-        $acknowledgeMessage->messageId = '0B68113D-6210-20A9-D2AF-00002A9C1CCC';
+        $acknowledgeMessage->correlationId = '77D952FE-47FA-D789-83B6-097D43403C6C';
+        $acknowledgeMessage->clientId = '2D043296-C81C-7189-4325-000007D62DA1';
+        $acknowledgeMessage->messageId = '2A686BAF-7D69-11C8-9A0F-0000513C0958';
         $acknowledgeMessage->destination = null;
         $acknowledgeMessage->timeToLive = 0;
-        $acknowledgeMessage->timestamp = '122301345100';
+        $acknowledgeMessage->timestamp = '124569971300';
         $acknowledgeMessage->body = $data;
 
         $newBody = new Zend_Amf_Value_MessageBody($this->responseURI,null,$acknowledgeMessage);
@@ -211,12 +211,12 @@ class Zend_Amf_ResponseTest extends PHPUnit_Framework_TestCase
 
         // Create an acknowlege message for a response to a RemotingMessage
         $acknowledgeMessage = new Zend_Amf_Value_Messaging_AcknowledgeMessage(null);
-        $acknowledgeMessage->correlationId = 'F12B5C25-1302-8A8F-2A64-C14D2B3CB7D5';
-        $acknowledgeMessage->clientId = '4C2A28C0-41BB-DA28-93C3-000018B12642';
-        $acknowledgeMessage->messageId = '0B68113D-6210-20A9-D2AF-00002A9C1CCC';
+        $acknowledgeMessage->correlationId = '77D952FE-47FA-D789-83B6-097D43403C6C';
+        $acknowledgeMessage->clientId = '2D043296-C81C-7189-4325-000007D62DA1';
+        $acknowledgeMessage->messageId = '2A686BAF-7D69-11C8-9A0F-0000513C0958';
         $acknowledgeMessage->destination = null;
         $acknowledgeMessage->timeToLive = 0;
-        $acknowledgeMessage->timestamp = '122301345100';
+        $acknowledgeMessage->timestamp = '124569971300';
         $acknowledgeMessage->body = $data;
 
         $newBody = new Zend_Amf_Value_MessageBody($this->responseURI,null,$acknowledgeMessage);
@@ -245,12 +245,12 @@ class Zend_Amf_ResponseTest extends PHPUnit_Framework_TestCase
 
         // Create an acknowlege message for a response to a RemotingMessage
         $acknowledgeMessage = new Zend_Amf_Value_Messaging_AcknowledgeMessage(null);
-        $acknowledgeMessage->correlationId = 'A89F7C97-4D04-8778-18D0-C16C1F29F78E';
-        $acknowledgeMessage->clientId = '336B0697-F30B-FD49-0B7E-00002E34A6BB';
-        $acknowledgeMessage->messageId = '6D9DC7EC-A273-83A9-ABE3-00005FD752D6';
+        $acknowledgeMessage->correlationId = '1D191AC2-8628-2C9A-09B2-0981CBCCF2CC';
+        $acknowledgeMessage->clientId = '13D9DF0B-CCD0-1149-53D2-0000696908C2';
+        $acknowledgeMessage->messageId = '03387968-E9BA-E149-A230-00006366BE67';
         $acknowledgeMessage->destination = null;
         $acknowledgeMessage->timeToLive = 0;
-        $acknowledgeMessage->timestamp = '122301548000';
+        $acknowledgeMessage->timestamp = '124570001000';
         $acknowledgeMessage->body = $data;
 
         $newBody = new Zend_Amf_Value_MessageBody($this->responseURI,null,$acknowledgeMessage);
@@ -279,12 +279,12 @@ class Zend_Amf_ResponseTest extends PHPUnit_Framework_TestCase
 
         // Create an acknowlege message for a response to a RemotingMessage
         $acknowledgeMessage = new Zend_Amf_Value_Messaging_AcknowledgeMessage(null);
-        $acknowledgeMessage->correlationId = '12CE12FD-5D4B-AE60-853A-D36339532640';
-        $acknowledgeMessage->clientId = '16927B78-1DBD-64E9-42BB-000019A34253';
-        $acknowledgeMessage->messageId = '6D4F7964-6BF6-22C8-9A16-000046BD6319';
+        $acknowledgeMessage->correlationId = '45B8A430-A13A-FE86-D62F-098900BDF482';
+        $acknowledgeMessage->clientId = '4000C9FB-C97B-D609-DBAA-000048B69D81';
+        $acknowledgeMessage->messageId = '5F9AA1BF-D474-BB69-12C6-0000775127E8';
         $acknowledgeMessage->destination = null;
         $acknowledgeMessage->timeToLive = 0;
-        $acknowledgeMessage->timestamp = '122331688500';
+        $acknowledgeMessage->timestamp = '124570048300';
         $acknowledgeMessage->body = $data;
 
         $newBody = new Zend_Amf_Value_MessageBody($this->responseURI,null,$acknowledgeMessage);
@@ -313,12 +313,12 @@ class Zend_Amf_ResponseTest extends PHPUnit_Framework_TestCase
 
         // Create an acknowlege message for a response to a RemotingMessage
         $acknowledgeMessage = new Zend_Amf_Value_Messaging_AcknowledgeMessage(null);
-        $acknowledgeMessage->correlationId = '5B65D04A-6703-3C98-D7F1-D36DE839E97E';
-        $acknowledgeMessage->clientId = '32E9C012-3FC0-F0C9-4A0B-00005FE13CD9';
-        $acknowledgeMessage->messageId = '44777AB6-A085-01A9-1241-000033DFAFEE';
+        $acknowledgeMessage->correlationId = '9C5D0787-7301-432E-FD4F-098681A0EE30';
+        $acknowledgeMessage->clientId = '5AC2D840-E652-86A8-CB7A-00000418AAA4';
+        $acknowledgeMessage->messageId = '200337C4-0932-7D68-BB24-00005EBD5F95';
         $acknowledgeMessage->destination = null;
         $acknowledgeMessage->timeToLive = 0;
-        $acknowledgeMessage->timestamp = '122331758500';
+        $acknowledgeMessage->timestamp = '124570031900';
         $acknowledgeMessage->body = $data;
 
         $newBody = new Zend_Amf_Value_MessageBody($this->responseURI,null,$acknowledgeMessage);
@@ -363,12 +363,12 @@ class Zend_Amf_ResponseTest extends PHPUnit_Framework_TestCase
 
         // Create an acknowlege message for a response to a RemotingMessage
         $acknowledgeMessage = new Zend_Amf_Value_Messaging_AcknowledgeMessage(null);
-        $acknowledgeMessage->correlationId = 'C44AE645-4D12-028B-FF5F-D2E42BE5D86C';
-        $acknowledgeMessage->clientId = '40EAAAD2-4A9B-C388-A2FD-00003A809B9E';
-        $acknowledgeMessage->messageId = '275CD08C-6461-BBC8-B27B-000030083B2C';
+        $acknowledgeMessage->correlationId = 'AF307825-478F-C4CA-AC03-09C10CD02CCC';
+        $acknowledgeMessage->clientId = '702B4B03-89F5-34C8-1B4E-0000049466FA';
+        $acknowledgeMessage->messageId = '704B88DF-6D5E-A228-53E3-00001DA3041F';
         $acknowledgeMessage->destination = null;
         $acknowledgeMessage->timeToLive = 0;
-        $acknowledgeMessage->timestamp = '122330856000';
+        $acknowledgeMessage->timestamp = '124570415500';
         $acknowledgeMessage->body = $data;
 
         $newBody = new Zend_Amf_Value_MessageBody($this->responseURI,null,$acknowledgeMessage);
@@ -415,12 +415,12 @@ class Zend_Amf_ResponseTest extends PHPUnit_Framework_TestCase
 
         // Create an acknowlege message for a response to a RemotingMessage
         $acknowledgeMessage = new Zend_Amf_Value_Messaging_AcknowledgeMessage(null);
-        $acknowledgeMessage->correlationId = 'C44AE645-4D12-028B-FF5F-D2E42BE5D86C';
-        $acknowledgeMessage->clientId = '40EAAAD2-4A9B-C388-A2FD-00003A809B9E';
-        $acknowledgeMessage->messageId = '275CD08C-6461-BBC8-B27B-000030083B2C';
+        $acknowledgeMessage->correlationId = 'AF307825-478F-C4CA-AC03-09C10CD02CCC';
+        $acknowledgeMessage->clientId = '702B4B03-89F5-34C8-1B4E-0000049466FA';
+        $acknowledgeMessage->messageId = '704B88DF-6D5E-A228-53E3-00001DA3041F';
         $acknowledgeMessage->destination = null;
         $acknowledgeMessage->timeToLive = 0;
-        $acknowledgeMessage->timestamp = '122330856000';
+        $acknowledgeMessage->timestamp = '124570415500';
         $acknowledgeMessage->body = $data;
 
         $newBody = new Zend_Amf_Value_MessageBody($this->responseURI,null,$acknowledgeMessage);
@@ -466,12 +466,12 @@ class Zend_Amf_ResponseTest extends PHPUnit_Framework_TestCase
 
         // Create an acknowlege message for a response to a RemotingMessage
         $acknowledgeMessage = new Zend_Amf_Value_Messaging_AcknowledgeMessage(null);
-        $acknowledgeMessage->correlationId = 'C44AE645-4D12-028B-FF5F-D2E42BE5D86C';
-        $acknowledgeMessage->clientId = '40EAAAD2-4A9B-C388-A2FD-00003A809B9E';
-        $acknowledgeMessage->messageId = '275CD08C-6461-BBC8-B27B-000030083B2C';
+        $acknowledgeMessage->correlationId = 'AF307825-478F-C4CA-AC03-09C10CD02CCC';
+        $acknowledgeMessage->clientId = '702B4B03-89F5-34C8-1B4E-0000049466FA';
+        $acknowledgeMessage->messageId = '704B88DF-6D5E-A228-53E3-00001DA3041F';
         $acknowledgeMessage->destination = null;
         $acknowledgeMessage->timeToLive = 0;
-        $acknowledgeMessage->timestamp = '122330856000';
+        $acknowledgeMessage->timestamp = '124570415500';
         $acknowledgeMessage->body = $data;
 
         $newBody = new Zend_Amf_Value_MessageBody($this->responseURI,null,$acknowledgeMessage);
@@ -501,8 +501,7 @@ class Zend_Amf_ResponseTest extends PHPUnit_Framework_TestCase
 		$data->preserveWhiteSpace = false;
 		$data->loadXML($sXML);
         
-		
-        // Create an acknowlege message for a response to a RemotingMessage
+		// Create an acknowlege message for a response to a RemotingMessage
         $acknowledgeMessage = new Zend_Amf_Value_Messaging_AcknowledgeMessage(null);
         $acknowledgeMessage->correlationId = 'B0B0E583-5A80-826B-C2D1-D67A63D2F5E1';
         $acknowledgeMessage->clientId = '3D281DFB-FAC8-E368-3267-0000696DA53F';
@@ -523,6 +522,7 @@ class Zend_Amf_ResponseTest extends PHPUnit_Framework_TestCase
         // Load the expected response.
         $mockResponse = file_get_contents(dirname(__FILE__) .'/Response/mock/domdocumentAmf3Response.bin');
         
+        exit;
         // Check that the response matches the expected serialized value
         $this->assertEquals($mockResponse, $testResponse);
     }