Listing 1

<cfscript>
	/******************
	Simple function to recurse cfc metadata and
	return the metadata with all nested arrays
	converted to structs.
	******************/
	function metadataSimplify(in_metadata){//returns struct
		var _return_metadata = duplicate(arguments.in_metadata);
		var _key='';
		for(_key in _return_metadata){
			if(isArray(_return_metadata[_key])){
				_return_metadata[_key]=
				convertArrayOfStructs(_return_metadata[_key]);
			}else if(isStruct(_return_metadata[_key])){//drill down
				_return_metadata[_key] = 
				metadataSimplify(_return_metadata[_key]);
			}
		}
		return _return_metadata;
	}

	function convertArrayOfStructs(inputArray){//returns struct
		var _length = arrayLen(arguments.inputArray);
		var _i=1;
		var _outputStruct = structNew();
		var _elementStruct ='';
		if(_length){
			for(_i=1;_i lte length;_i=_i+1){
				_elementStruct = arguments.inputArray[i];
				//set outputStruct key to the Name key of the nested struct
				//ensure struct cleaned of nested arrays before returning
				_outputStruct[_elementStruct.name] = metadataSimplify(_elementStruct);
			}
		}
		return _outputStruct;

	}
</cfscript>



Listing 2

1 <cffunction
2 	name="convertColorToHex"
3	return="string"
4	access="public"
5	hint=	"Accepts an English color name and returns
6		the corresponding six character hexadecimal."
7 >
8	<cfargument
9		name="colorName"
10		type="string"
11		inputrange="Red,Green,Blue"
12		hint="The color to convert"
13	/>
14	<cfset var _colorStruct = structNew() />
15	<cfscript>
16		_ colorStruct.Red = "FF0000";
17		_ colorStruct.Green = "00FF00";
18		_ colorStruct.Blue = "0000FF";
19	</cfscript>
20	<cfreturn _colorStruct[arguments.colorName] />
21 </cffunction

Listing 3

<cftry>
<cfset myUtilityClassInstance = createObject("component","UtilityClass") />
<cfset metadata = simplifyMetadata(getMetadata('#myUtilityClassInstance#'));
<cfset hex = myUtilityClassInstance.convertColorToHex(valueSentFromTextInput) />
<cfcatch type="valueOutOfRangeException">
<cfoutput>
   You have entered a color I don't know. Try one of 
   #metaData.functions.convertColorToHex.parameters.colorName.inputRange#
</cfoutput>
</cfcatch>
<cfcatch>
   Something bad happened.
</cfcatch>
</cftry>