Coldspring1.x is is not compatible with ColdFusion Latest version(2018)

Hi everyone,

I am in the process of upgrading an application from ColdFusion 2010 to Coldfusion 2018 or higher. The application uses the Coldspring framework for injecting dependencies, Aop, logging, and security services.

ColdFusion 2018 is not compatible with Coldspring because some of the functionality has been changed in ColdFusion 2018. As part of the new OO support in ColdFusion abstract, function, and final are now reserved words whereas they are as variables in some files like coldspring\aop\framework\AopProxyUtils.cfc.

Is there any ColdFusion/Coldspring expert who has some idea to resolve the compatibility issues?

Or if Coldspring must altogether be replaced with other frameworks like ColdBox(WireBox) how can I do that with the same functionality as Coldspring does and how can I integrate with ColdFusion 2018 or a higher version?

I am new to this area and need some guidance. Any help is much appreciated.

Thanks,
Chayan

Did you see that thread?

Thank you @Andreas

Yes. We saw that and already applied those changes and yes that is working fine. However, there is another variables ‘function’ was used in Coldspring that causing the issue now.

in coldspring\aop\framework\AopProxyUtils.cfc.

<cfset function = generateFunction(arguments.metaData, tmpFunction) />

<cfset arguments.proxyObj[metaData.name] = variables[tmpFunction] />

When we rename the var ‘function’ to ‘function1’ we are getting an error message: tmpFunction not defined in variable scope.

Code ref: coldspring1/AopProxyUtils.cfc at master · coldspringframework/coldspring1 · GitHub

Thanks,
Chayan

you probably replaced more “function” strings than you should. I don’t know much about coldspring. Try this code for that file:

<!---
	  
  Copyright (c) 2005, Chris Scott, David Ross, Kurt Wiersma, Sean Corfield
  All rights reserved.
	
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
  
       http://www.apache.org/licenses/LICENSE-2.0
  
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
 $Id: AopProxyUtils.cfc,v 1.15 2008/04/19 02:28:31 scottc Exp $
 $Log: AopProxyUtils.cfc,v $
 Revision 1.15  2008/04/19 02:28:31  scottc
 fixed var csp_function spelling
 Revision 1.14  2007/06/02 21:02:57  scottc
 Removed ALL output from bean factory and aop, no system out, no logging. Added support for placeholders in map and list tags, major restructuring of bean factory, abstract bean factory, bean property
 Revision 1.13  2006/03/06 02:44:16  scorfield
 Chris spotted my condition on whether to attempt to return a value from the generated function, whilst safe, was not correct for the omitted returntype case.
 Revision 1.12  2006/03/06 01:23:43  scorfield
 Allowed for returntype= to be omitted now that duck typing is gaining popularity.
 Revision 1.11  2006/01/28 21:44:14  scottc
 Another slight tweek, everything refers to beanFactory, not context
 Revision 1.10  2006/01/13 15:00:12  scottc
 CSP-38 - First pass at RemoteProxyBean, creating remote services for CS managed seriveces through AOP
 Revision 1.9  2005/11/16 16:16:10  rossd
 updates to license in all framework code
 Revision 1.8  2005/10/10 18:40:10  scottc
 Lots of fixes pertaining to returning and not returning values with afterAdvice, also added the security for method invocation that we discussed
 Revision 1.7  2005/10/09 22:45:25  scottc
 Forgot to add Dave to AOP license
	
---> 
 
<cfcomponent name="AopProxyUtils" 
			displayname="AopProxyUtils" 
			hint="Utilities for building Proxy Beans" 
			output="false">
			
	<!--- <cfset variables.logger = 0 /> --->
			
	<cffunction name="init" access="public" returntype="coldspring.aop.framework.AopProxyUtils" output="false">
		<!--- <cfset var category = CreateObject("java", "org.apache.log4j.Category") />
		<cfset variables.logger = category.getInstance('coldspring.aop') />
		<cfset variables.logger.info("AopProxyUtils created") /> --->
		<cfreturn this />
	</cffunction>
	
	<cffunction name="clone" access="public" returntype="any" output="false" hint="creates a duplicate instance of an object">
		<cfargument name="obj" type="any" required="true" />
		<cfset var metaData = getMetaData(arguments.obj) />
		<cfset var objType = metaData.name />
		<cfset var functionIx = 0 />
		<cfset var csp_function = '' />
		<cfset var property = '' />
		<cfset var propVal = '' />
		<cfset var target = CreateObject('component',objType) />
		<cfset var system = CreateObject('java','java.lang.System') />
		
		<!--- <cfif variables.logger.isInfoEnabled()>
			<cfset variables.logger.info("AopProxyUtils.clone() cloning object " & metaData.name) />
		</cfif> --->
		<!--- now we'll loop through the object's methods, if it's a setter and there's a getter, we'll call set on the
			  target with it --->
		<cfloop from="1" to="#arraylen(metaData.functions)#" index="functionIx">
			<cfset csp_function = metaData.functions[functionIx].name />
			
			<!--- catch the init csp_function --->
			<cfif csp_function eq "init">
				<cfset target.init() />
				
			<cfelseif function.startsWith('set')>
				<cfset property = Right(function, function.length()-3) />
				<cftry>
					<cfinvoke component="#arguments.obj#"
						  method="get#property#" 
						  returnvariable="propVal">
					</cfinvoke>
					<cfinvoke component="#target#"
						  method="set#property#">
						  <cfinvokeargument name="#metaData.functions[functionIx].parameters[1].name#" value="#propVal#" />
					</cfinvoke>
					<cfcatch>
						<!--- <cfif variables.logger.isDebugEnabled()>
							<cfset variables.logger.error("[coldspring.aop.AspectCloneError] Error reading: Error setting property #property#, #cfcatch.Detail#") />
						</cfif> --->
						<cfthrow type="coldspring.aop.AspectCloneError" message="Error setting property #property#, #cfcatch.Detail#" />
					</cfcatch>
				</cftry>
			</cfif>
		</cfloop>
		
		<!--- <cfif variables.logger.isInfoEnabled()>
			<cfset variables.logger.info("AopProxyUtils.clone() created new object: " & objType & "@"& FormatBaseN(system.identityHashCode(target), 16) ) />
		</cfif> --->
		
		<cfreturn target />
	</cffunction>
	
	<cffunction name="createBaseProxyBean" access="public" returntype="any" output="false">
		<cfargument name="target" type="any" required="true" />
		<cfset var metaData = getMetaData(arguments.target) />
		<cfset var targetType = metaData.name />
		<cfset var path = GetDirectoryFromPath(getMetaData(this).path) />
		<cfset var tmpBean = "bean_" & REReplace(CreateUUID(),"[\W+]","","all")  />
		<cfset var beanDescription = '' />
		<cfset var proxyBean = 0 />
		
		<!--- <cfif variables.logger.isInfoEnabled()>
			<cfset variables.logger.info("AopProxyUtils.createBaseProxyBean() creating proxy for " & metaData.name) />
		</cfif> --->
		
		<!--- first load the AopProxyBean definition (the actual cfc file) --->
		<cfset beanDescription = loadBeanFile("#path#/AopProxyBean.cfc") />
		<!--- 
		<cftry>
			<cffile action="read" file="#path#/AopProxyBean.cfc" variable="beanDescription" />
			<cfcatch>
				<cfif variables.logger.isDebugEnabled()>
					<cfset variables.logger.error("[coldspring.aop.AopProxyError]: Error reading: #path#/AopProxyBean.cfc, #cfcatch.Detail#") />
				</cfif>
				<cfthrow type="coldspring.aop.AopProxyError" message="Error reading: #path#/AopProxyBean.cfc, #cfcatch.Detail#" />
			</cfcatch>
		</cftry> --->
		
		<!--- set the type for the proxy (extends) --->
		<cfset beanDescription = Replace(beanDescription, '${name}', 'coldspring.aop.framework.tmp.'&tmpBean, "ALL") />
		<cfset beanDescription = Replace(beanDescription, '${extends}', targetType, "ALL") />
		
		<!--- write it to disk, load it and delete it --->
		<cftry>
			<cffile action="write" file="#path#/tmp/#tmpBean#.cfc" output="#beanDescription#" />
			 <!--- import the file --->
			 <cfset proxyBean = CreateObject('component','coldspring.aop.framework.tmp.'&tmpBean).init(arguments.target) />
			 <!--- delete the file --->
			 <cffile action="delete" file="#path#/tmp/#tmpBean#.cfc" />
			 <cfcatch>
				<!--- <cfif variables.logger.isDebugEnabled()>
					<cfset variables.logger.error("[coldspring.aop.AopProxyError] Error reading: Error Loading: #tmpBean#, #cfcatch.Detail#") />
				</cfif> --->
			 	<cfthrow type="coldspring.aop.AopProxyError" message="Error Loading: #tmpBean#, #cfcatch.Detail#" />
			 </cfcatch>
		</cftry>
		
		<cfreturn proxyBean />
		
	</cffunction>
	
	<cffunction name="createRemoteProxyBean" access="public" returntype="void" output="false">
		<cfargument name="serviceName" type="string" required="true" />
		<cfargument name="serviceLocation" type="string" required="true" />
		<cfargument name="factoryName" type="string" required="true" />
		<cfargument name="scope" type="string" required="true" />
		<cfargument name="functions" type="string" required="true" />
		<cfargument name="proxyFactoryId" type="string" required="true" />
		
		<cfset var path = GetDirectoryFromPath(getMetaData(this).path) />
		<cfset var beanDescription = '' />
		
		<!--- <cfif variables.logger.isInfoEnabled()>
			<cfset variables.logger.info("AopProxyUtils.createRemoteProxyBean() creating remote proxy for " & serviceName) />
		</cfif> --->
		
		<!--- first load the AopProxyBean definition (the actual cfc file) --->
		<cfset beanDescription = loadBeanFile("#path#/RemoteProxyBean.cfc") />
		
		<!--- set the service name, and the scope and factoryName of the beanfactory --->
		<cfset beanDescription = Replace(beanDescription, '${name}', arguments.serviceName, "ALL") />
		<cfset beanDescription = Replace(beanDescription, '${scope}', arguments.scope, "ALL") />
		<cfset beanDescription = Replace(beanDescription, '${factoryName}', arguments.factoryName, "ALL") />
		<cfset beanDescription = Replace(beanDescription, '${proxyFactoryId}', arguments.proxyFactoryId, "ALL") />
		<cfset beanDescription = Replace(beanDescription, '${functions}', arguments.functions, "ALL") />
		
		<!--- now create methods for all the remote service methods --->
		
		<!--- write it to disk, load it and delete it --->
		<cftry>
			<cffile action="write" file="#arguments.serviceLocation#/#arguments.serviceName#.cfc" output="#beanDescription#" />
			 <cfcatch>
				<!--- <cfif variables.logger.isDebugEnabled()>
					<cfset variables.logger.error("[coldspring.aop.AopProxyError] Error reading: Error writing: #arguments.serviceLocation#/#arguments.serviceName#.cfc, #cfcatch.Detail#") />
				</cfif> --->
			 	<cfthrow type="coldspring.aop.AopProxyError" message="Error Loading: #arguments.serviceLocation#/#arguments.serviceName#.cfc, #cfcatch.Detail#" />
			 </cfcatch>
		</cftry>
		
	</cffunction>
	
	<cffunction name="removeRemoteProxyBean" access="public" returntype="void" output="false">
		<cfargument name="serviceName" type="string" required="true" />
		<cfargument name="serviceLocation" type="string" required="true" />
		
		<cftry>
			 <!--- delete the file --->
			 <cffile action="delete" file="#arguments.serviceLocation#/#arguments.serviceName#.cfc" />
			<cfcatch>
				<!--- <cfif variables.logger.isDebugEnabled()>
					<cfset variables.logger.error("[coldspring.aop.AopProxyError] Error reading: Error removing: #arguments.serviceLocation#/#arguments.serviceName#.cfc, #cfcatch.Detail#") />
				</cfif> --->
			 	<cfthrow type="coldspring.aop.AopProxyError" message="Error removing: #arguments.serviceLocation#/#arguments.serviceName#.cfc, #cfcatch.Detail#" />
			 </cfcatch>
		</cftry>
		
	</cffunction>
	
	<cffunction name="createUDF" access="public" returntype="void" output="false">
		<cfargument name="metaData" type="any" required="true" />
		<cfargument name="proxyObj" type="any" required="true" />
		
		<cfset var parameter = 0 />
		<cfset var paramIx = 0 />
		<cfset var csp_function = '' />
		<cfset var path = GetDirectoryFromPath(getMetaData(this).path) />
		<cfset var tmpFunction = "fnct_" & REReplace(CreateUUID(),"[\W+]","","all") />
		<cfset var tmpFile = "tmp/" & tmpFunction & ".functions" />
		
		<!--- <cfif variables.logger.isInfoEnabled()>
			<cfset variables.logger.info("AopProxyUtils.createUDF() adding method " & metaData.name) />
		</cfif> --->
		
		<!--- <cfset var path = ExpandPath('coldspring.aop.framework.tmp') /> --->
		<!--- generate csp_function string --->
		<cfset csp_function = generateFunction(arguments.metaData, tmpFunction) />
		
		<!--- now try to write the csp_function to the tmp file, load and delete it --->
		<cftry>
			<cffile action="write" file="#path#/#tmpFile#" output="#function#" />
			 <!--- import the file --->
			 <cfinclude template="#tmpFile#" /> 
			 <!--- delete the file --->
			 <cffile action="delete" file="#path#/#tmpFile#" />
			 <cfcatch>
				<!--- <cfif variables.logger.isDebugEnabled()>
					<cfset variables.logger.error("[coldspring.aop.UdfError] Error reading: Error Loading: #tmptmpFileBean#, #cfcatch.Detail#") />
				</cfif> --->
			 	<cfthrow type="coldspring.aop.UdfError" message="Error Loading: #tmpFile#, #cfcatch.Detail#" />
			 </cfcatch>
		</cftry>
		
		<!--- add csp_function to the proxy Object --->
		<cfset arguments.proxyObj[metaData.name] = variables[tmpFunction] />
	</cffunction>
	
	<cffunction name="createRemoteMethod" access="public" returntype="string" output="false">
		<cfargument name="metaData" type="any" required="true" />
		<cfargument name="functionName" type="string" required="true" />
		<cfargument name="accessType" type="string" required="false" />
		<cfreturn generateFunction(arguments.metaData, arguments.functionName, arguments.accessType) />
	</cffunction> 
	
	<cffunction name="generateFunction" access="private" returntype="string" output="false">
		<cfargument name="metaData" type="any" required="true" />
		<cfargument name="functionName" type="string" required="true" />
		<cfargument name="accessType" type="string" required="false" />
		<cfset var csp_function = '' />
		
		<!--- start method --->
		<cfset csp_function = "<cffunction name=""" & arguments.functionName & """" />
		<cfif StructKeyExists(arguments,"accessType")>
			<cfset csp_function = csp_function & " access=""" & arguments.accessType & """" />
		<cfelseif StructKeyExists(metaData,'access')>
			<cfset csp_function = csp_function & " access=""" & metaData.access & """" />
		</cfif>
		<!--- for remoting apps, return type may need to be changed to 'any' --->
		<cfif StructKeyExists(arguments,"accessType") AND (arguments.accessType IS 'remote')>
			<cfset csp_function = csp_function & " returntype=""any""" />
		<cfelseif StructKeyExists(metaData,'returntype')>
			<cfset csp_function = csp_function & " returntype=""" & metaData.returntype & """" />
		<cfelse>
			<!--- Sean 3/5/2006: duck typing means we should support omitting returntype= --->
			<cfset csp_function = csp_function & " returntype=""any""" />
		</cfif>
		<cfif StructKeyExists(metaData,'output')>
			<cfset csp_function = csp_function & " output=""" & metaData.output & """" />
		</cfif>
		<cfset csp_function = csp_function & " > " & Chr(10) />
		
		<!--- add properties --->
		<cfloop from="1" to="#ArrayLen(metaData.parameters)#" index="paramIx">
			<cfset parameter = metaData.parameters[paramIx] />
			<cfset csp_function = csp_function & "<cfargument name=""" & parameter.name & """" />
			<cfif StructKeyExists(parameter,'type')>
				<cfset csp_function = csp_function & " type=""" & parameter.type & """" />
			</cfif>
			<cfif StructKeyExists(parameter,'required')>
				<cfset csp_function = csp_function & " required=""" & parameter.required & """" />
			</cfif>
			<cfif StructKeyExists(parameter,'default')>
				<cfset csp_function = csp_function & " default=""" & parameter.default & """" />
			</cfif>
			<cfset csp_function = csp_function & " /> " & Chr(10) />
		</cfloop>
		
		<!--- add method call --->
		<cfset csp_function = csp_function & "<cfset var rtn = callMethod('" & metaData.name & "', arguments) />" & Chr(10) />
		
		<!--- return a value if we need to --->
		<!--- Sean 3/5/2006: need to allow for missing returntype= and treat it as non-void --->
		<cfif not structKeyExists(metaData,'returnType') or metaData.returnType is not "void">
			<cfset csp_function = csp_function & "<cfif isDefined('rtn')><cfreturn rtn /></cfif>" & Chr(10) />
		</cfif>
		<!--- close csp_function --->
		<cfset csp_function = csp_function & "</cffunction>" />
		
		<cfreturn csp_function />
	</cffunction>
	
	<cffunction name="loadBeanFile" access="private" returntype="string" output="false">
		<cfargument name="fileName" type="string" required="true" />
		<cfset var fileText = "" />
		<cftry>
			<cffile action="read" file="#fileName#" variable="fileText" />
			<cfcatch>
				<!--- <cfif variables.logger.isDebugEnabled()>
					<cfset variables.logger.error("[coldspring.aop.AopProxyError]: Error reading: #fileName#, #cfcatch.Detail#") />
				</cfif> --->
				<cfthrow type="coldspring.aop.AopProxyError" message="Error reading: #fileName#, #cfcatch.Detail#" />
			</cfcatch>
		</cftry>
		<cfreturn fileText />
	</cffunction>
	
</cfcomponent>

However, you should really consider migrating to another framework like coldbox soon. If you get your coldspring working, do it asap.

Coldspring has not been supported for years. Just take the time to migrate to wirebox. We can help you get migrated here or professionally via our support. But please migrate. Technical debt catches up fast and can bring along many dark and bad things.

We have migrated Coldspring apps to WireBox in hours. The semantics are the same.

1 Like

Thank You @Andreas
I have used your code.However, We are getting syntax error in lines
<cfset property = Right(function, function.length()-3) />
and action=“write” file="#path#/#tmpFile#" output="#function#"

and when we replaced function with csp_function there is no syntax error.
But getting the below error in the application.

Thanks,
Chayan

I wouldn’t waste my time trying to patch a framework that’s no longer developed just to get it working. By now, you probably would have had WireBox running and wiring up by convention your models.

Thank You @lmajano

If we want to migrate then what will be the procedure? Is WireBox open-source or do we need to purchase it? If we want to integrate it immediately into our application what will be the steps? we need your guidance here.

Thanks,
Chayan

Hi Chayan,

WireBox is FREE and open source. It is bundled with ColdBox or can be used standalone in any CFML app. It is extremely well documented https://wirebox.ortusbooks.com/. We are also professional open source. Meaning if you hit a bind, or want a support team, we can help as well: Support & Consulting

As for migration, the best thing to do is start with our getting started guide: https://wirebox.ortusbooks.com/getting-started/getting-jiggy-wit-it

The major differences between ColdSpring and WireBox are convention over configuration. In CS you had to declare every single bean (object) in the XML file. With it’s relationships, dependencies, and persistence. In WireBox, you can choose to either do it by convention and annotations, or you can also do configuration, but not in an XML file, but in a CFC Binder: Configuring WireBox - WireBox : Dependency Injection & AOP For ColdFusio

Any questions you have along this journey, post them here.

1 Like

Thank you @lmajano.

We are looking into it.

Definitely, we will post the question here if we have any.

Thanks,
Chayan

Ok Chayan,

I revived a project I had built a few years ago for the ColdFusion IDE. I have migrated it now to a CommandBox module. GitHub - commandbox-modules/commandbox-coldspring-to-wirebox: A module that converts ColdSpring Yucky XML to WireBox DSL

I am still finalizing the tests, but everything is working. By running this module, it will automatically convert your coldspring xml file to wirebox cfc.

1 Like

Ok, first build is ready and working. Here it is published in ForgeBox: FORGEBOX: CommandBox ColdSpring XML to WireBox DSL

You can just use CommandBox to install the module: install commandbox-coldspring-to-wirebox

Then use it to convert your ColdSpring XML file to WireBox:

# Produces a WireBox.cfc where you run the command
coldspring-to-wirebox tests/coldspring.xml.cfm

# Stores the WireBox.cfc in the same location as the file above
coldspring-to-wirebox tests/coldspring.xml.cfm tests/WireBox.cfc
1 Like

Hello @lmajano
How to execute this CommandBox module? Do we need to build the code then needs to execute the command? How and where to run this to convert the files?
Could you please give some idea about the step to convert the XML file to WireBox.cfc?

Thank You.
Chayan

Created a guide for you: Migrating From ColdSpring - WireBox : Dependency Injection & AOP For ColdFusio

1 Like

We need to execute the command from which location(path)?

We figure it out and are able to convert the file now.

How did it go with the migration?

Yes, we are working on it. However, we are getting one issue when we try to convert some XML files to CFC. I have attached the error below:

Error parsing bean definitions: Can’t cast Complex Object Type Struct to String Use Built-In-Function “serialize(Struct):String” to create a String from Struct lucee.runtime.exp.ExpressionException: Can’t cast Complex Object Type Struct to Stringat lucee.runtime.type.util.StructSupport.castToString(StructSupport.java:202)at lucee.runtime.op.Caster.toString(Caster.java:1925)at models.cstowirebox_cfc$cf.udfCall(/commandbox-coldspring-to-wirebox/models/CSToWireBox.cfc:82)at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:106)at lucee.runtime.type.UDFImpl._call(UDFImpl.java:344)at lucee.runtime.type.UDFImpl.call(UDFImpl.java:217)at lucee.runtime.type.scope.UndefinedImpl.call(UndefinedImpl.java:785)at lucee.runtime.util.VariableUtilImpl.callFunctionWithoutNamedValues(VariableUtilImpl.java:787)at lucee.runtime.PageContextImpl.getFunction(PageContextImpl.java:1747)at models.cstowirebox_cfc$cf.udfCall(/commandbox-coldspring-to-wirebox/models/CSToWireBox.cfc:44)at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:106)at lucee.runtime.type.UDFImpl._call(UDFImpl.java:344)at lucee.runtime.type.UDFImpl.call(UDFImpl.java:217)at lucee.runtime.ComponentImpl._call(ComponentImpl.java:684)at lucee.runtime.ComponentImpl._call(ComponentImpl.java:572)at lucee.runtime.ComponentImpl.call(ComponentImpl.java:1911)at lucee.runtime.util.VariableUtilImpl.callFunctionWithoutNamedValues(VariableUtilImpl.java:787)at lucee.runtime.PageContextImpl.getFunction(PageContextImpl.java:1747)at modules.commandbox_coldspring_to_wirebox2610.commands.coldspring_to_wirebox_cfc1125$cf.udfCall(/commandbox/modules/commandbox-coldspring-to-wirebox/commands/coldspring-to-wirebox.cfc:33)at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:106)at lucee.runtime.type.UDFImpl._call(UDFImpl.java:344)at lucee.runtime.type.UDFImpl.callWithNamedValues(UDFImpl.java:207)at lucee.runtime.ComponentImpl._call(ComponentImpl.java:685)at lucee.runtime.ComponentImpl._call(ComponentImpl.java:572)at lucee.runtime.ComponentImpl.callWithNamedValues(ComponentImpl.java:1930)at lucee.runtime.util.VariableUtilImpl.callFunctionWithNamedValues(VariableUtilImpl.java:866)at lucee.runtime.PageContextImpl.getFunctionWithNamedValues(PageContextImpl.java:1766)at system.services.commandservice_cfc$cf.udfCall1(/commandbox/system/services/CommandService.cfc:345)at system.services.commandservice_cfc$cf.udfCall(/commandbox/system/services/CommandService.cfc)at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:106)at lucee.runtime.type.UDFImpl._call(UDFImpl.java:344)at lucee.runtime.type.UDFImpl.callWithNamedValues(UDFImpl.java:207)at lucee.runtime.type.scope.UndefinedImpl.callWithNamedValues(UndefinedImpl.java:802)at lucee.runtime.util.VariableUtilImpl.callFunctionWithNamedValues(VariableUtilImpl.java:866)at lucee.runtime.PageContextImpl.getFunctionWithNamedValues(PageContextImpl.java:1766)at system.services.commandservice_cfc$cf.udfCall1(/commandbox/system/services/CommandService.cfc:139)at system.services.commandservice_cfc$cf.udfCall(/commandbox/system/services/CommandService.cfc)at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:106)at lucee.runtime.type.UDFImpl._call(UDFImpl.java:344)at lucee.runtime.type.UDFImpl.call(UDFImpl.java:217)at lucee.runtime.ComponentImpl._call(ComponentImpl.java:684)at lucee.runtime.ComponentImpl._call(ComponentImpl.java:572)at lucee.runtime.ComponentImpl.call(ComponentImpl.java:1911)at lucee.runtime.util.VariableUtilImpl.callFunctionWithoutNamedValues(VariableUtilImpl.java:787)at lucee.runtime.PageContextImpl.getFunction(PageContextImpl.java:1747)at system.shell_cfc$cf.udfCall4(/commandbox/system/Shell.cfc:787)at system.shell_cfc$cf.udfCall(/commandbox/system/Shell.cfc)at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:106)at lucee.runtime.type.UDFImpl._call(UDFImpl.java:344)at lucee.runtime.type.UDFImpl.callWithNamedValues(UDFImpl.java:207)at lucee.runtime.type.scope.UndefinedImpl.callWithNamedValues(UndefinedImpl.java:802)at lucee.runtime.util.VariableUtilImpl.callFunctionWithNamedValues(VariableUtilImpl.java:866)at lucee.runtime.PageContextImpl.getFunctionWithNamedValues(PageContextImpl.java:1766)at system.shell_cfc$cf.udfCall3(/commandbox/system/Shell.cfc:607)at system.shell_cfc$cf.udfCall(/commandbox/system/Shell.cfc)at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:106)at lucee.runtime.type.UDFImpl._call(UDFImpl.java:344)at lucee.runtime.type.UDFImpl.callWithNamedValues(UDFImpl.java:207)at lucee.runtime.ComponentImpl._call(ComponentImpl.java:685)at lucee.runtime.ComponentImpl._call(ComponentImpl.java:572)at lucee.runtime.ComponentImpl.callWithNamedValues(ComponentImpl.java:1930)at lucee.runtime.util.VariableUtilImpl.callFunctionWithNamedValues(VariableUtilImpl.java:866)at lucee.runtime.PageContextImpl.getFunctionWithNamedValues(PageContextImpl.java:1766)at users._1894962._commandbox46.cfml.system.bootstrap_cfm$cf.call(/__commandbox_root/Users/1894962/.CommandBox/cfml/system/Bootstrap.cfm:160)at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:1034)at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:926)at lucee.runtime.PageContextImpl.doInclude(PageContextImpl.java:907)at r2p8b0yddc1j.call(Unknown Source)at lucee.runtime.compiler.Renderer.tag(Renderer.java:107)at lucee.runtime.compiler.Renderer.script(Renderer.java:97)at lucee.runtime.jsr223.ScriptEngineImpl.eval(ScriptEngineImpl.java:63)at lucee.runtime.jsr223.ScriptEngineImpl.eval(ScriptEngineImpl.java:194)at cliloader.LoaderCLIMain.execute(LoaderCLIMain.java:330)at cliloader.LoaderCLIMain.execute(LoaderCLIMain.java:155)at cliloader.LoaderCLIMain.main(LoaderCLIMain.java:582)

Thanks,
Chayan

Can you send me the xml file

We are using the map tag in XML files. That’s why we are getting this issue.

How do we convert “map” and “list” as a bean property in the corresponding DSL? can you please give an example?