Over a million developers have joined DZone.

Coldfusion 8 : Serialize and Deserialize a Component

DZone's Guide to

Coldfusion 8 : Serialize and Deserialize a Component

· Web Dev Zone
Free Resource

Learn how to build modern digital experience apps with Crafter CMS. Download this eBook now. Brought to you in partnership with Crafter Software

I am working on a project where a requirement for serializing and deserializing a component came up. This is possible now with ColdFusion 8, since the underlying work was done (by Rakshith) to handle synchronizing sessions across a cluster. Nonetheless, there is no specific serialize or deserialize function for a CFC. Pete Frietag wrote about this as did Rakshith in earlier posts. My code below borrows pretty liberally from theirs but distills it into two CFC methods that I include a utility component to handle the serializing and deserializing.

Also, I am not writing the serialized data to a file as in their examples, but passing you back Base64 data in the one case of the serialize() method. This was done so I could store the result in a database for reasons I won't get into here. One odd thing that came up when I tested this was that putting a returntype of "component" would not work on the deserialize method even though the result looks and behaves like a component instance, thus the returntype of "any." Below is the code for the two methods (keep in mind, I have only tested this on some simple CFC instances, share if you run into any issues).

<cffunction name="serializeCFC" access="public" output="false" returntype="String">
<cfargument name="cfc" type="component" required="true">

<cfset var byteOut = CreateObject("java", "java.io.ByteArrayOutputStream") />
<cfset var objOut = CreateObject("java", "java.io.ObjectOutputStream") />

<cfset byteOut.init() />
<cfset objOut.init(byteOut) />
<cfset objOut.writeObject(arguments.cfc) />
<cfset objOut.close() />

<cfreturn ToBase64(byteOut.toByteArray()) />

<cffunction name="deserializeCFC" access="public" output="false" returntype="any">
<cfargument name="base64cfc" type="string" required="true" />

<cfset var inputStream = CreateObject("java", "java.io.ByteArrayInputStream") />
<cfset var objIn = CreateObject("java", "java.io.ObjectInputStream") />
<cfset var com = "" />

<cfset inputStream.init(toBinary(arguments.base64cfc)) />
<cfset objIn.init(inputStream) />
<cfset com = objIn.readObject() />
<cfset objIn.close()>

<cfreturn com />

Crafter is a modern CMS platform for building modern websites and content-rich digital experiences. Download this eBook now. Brought to you in partnership with Crafter Software.


Published at DZone with permission of Brian Rinaldi, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.


Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.


{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}