The woes of using undocumented stuff in CF

by kai on 20/02/2006



Today I got a very interesting issue. I was working on some code written by somebody else who is (obviously when running in one of “those” issue) not in the company anymore. It was part of Novasphere, a CMS engine we use at ZeroOne.

When I was trying to set up a new Novasphere instance on a CF 7 box I wondered that some functionalitites didn’t work. My colleague Max and I started debugging it and found that the developer used a .toString() Java function to access the content of ColdFusion XML objects (Important: we’re not talking about the CF function ToString() here). This worked fine on CF 6 but not on CF 7 anymore as I assume Macromedia updated the internal Apache Xerxes engine for XML to a newer version.

Here’s some code:

<cfxml variable="myXML"> 
<user>
	<name>Kai Koenig</name>
	<age>31</age>
	<skills id="1">
		<role>coach</role>
		<type>training</type>
	</skills>
	<skills id="2">
		<role>architect</role>
		<type>development</type>
	</skills>
</user>
</cfxml>
<cfdump var="#myXML#">
<cfoutput>
#myXML.user.toString()#
</cfoutput>

On CF6 this creates:

Kai Koenig 31 coach training architect development

On CF7 you’ll end up with:

[user: null]

What’s my point? Always be careful when using undocumented and unofficial stuff!

{ 3 comments… read them below or add one }

Rob Gonda February 21, 2006 at 12:00 am

#toString(myXML.user)# does work with CF7.

Cheers,

~Rob

Reply

Sean A Corfield February 21, 2006 at 12:00 am

For what it’s worth, the “correct” way to do this (at least on CF7) is:

#toString(myXML.user)#

Reply

Kai February 21, 2006 at 12:00 am

Sean, Rob, you’re right. But as mentioned in the post, that’s not what this is about. It is supposed to work cause it’s documented and the official way – opposed to myXML.user.toString()…;-)

Reply

Cancel reply

Leave a Comment

{ 1 trackback }

Previous post:

Next post: