0

Les baseserreur lors du retour d'une struct implicite dans coldfusion

Je suis en une boîte CF10u10 avec Apache comme serveur web sur ma machine locale. Je suis fan de cfscript et j'aime utiliser la nouvelle structure implicite {} déclaration Vs structNew() autant que possible.

Le code

fichiers sont un composant et un CFM.

componentFile.cfc

<cfcomponent output="false"> 

    <cffunction name="blahExplicit" returntype="Struct"> 
     <cfset var name = 'ColdFusion'/> 
     <cfset var ret = structNew()/> 
     <cftry> 
       <cfreturn {success: true, data: name}/> 
      <cfcatch type="any"> 
       <cfset ret.success = false /> 
       <cfset ret.data = cfcatch /> 
       <cfreturn ret/> 
      </cfcatch> 
     </cftry> 
    </cffunction> 

    <cffunction name="blahImplicit" returntype="Struct"> 
     <cfset var name = 'ColdFusion'/> 
     <cftry> 
       <cfreturn {success: true, data: name}/> 
      <cfcatch type="any"> 
       <cfreturn {success: false, data: cfcatch.detail}/> 
      </cfcatch> 
     </cftry> 
    </cffunction> 

    <cffunction name="script_blahExplicit" returntype="Struct"> 
     <cfscript> 
      var name = 'ColdFusion'; 
      var ret = structNew(); 
      try{ 
       return {success: true, data: name}; 
      } catch(Any err){ 
        ret.success = false; 
        ret.data = err.detail; 
        return ret; 
      } 
     </cfscript> 
    </cffunction> 

    <cffunction name="script_blahImplicit" returntype="Struct"> 
     <cfscript> 
      var name = 'ColdFusion'; 
      try{ 
      return {success: true, data: name}; 
      } catch(Any err){ 
       return {success: false, data: err.detail}; 
      } 
     </cfscript> 
    </cffunction> 
</cfcomponent> 

cfcatchErr.cfm

<cfset cObj = createObject("component","componentFile")/> 
<cfdump var="#cObj.blahExplicit()#" label="blah Explicit"/> 
<cfdump var="#cObj.script_blahExplicit()#" label="blah Explicit With Script"/> 
<cfdump var="#cObj.script_blahImplicit()#" label="blah Implicit With Script"/> 
<cfdump var="#cObj.blahImplicit()#" label="blah Implicit"/> 

Le problème

L'analyseur renvoie une erreur indiquant détail est pas défini dans cfcatch pour la blahImplicit() méthode. Mais tout va bien pour les méthodes restantes

où le code dans blahExplicit(), script_blahExplicit(), script_blahImplicit() fonctionne bien.

La question

Pourquoi est-ce qui se passe? Pourquoi CF lance-t-il une erreur même sans exécuter le code? Il lance l'erreur au moment même de l'analyse. J'ai utilisé ACF Builder et trouvé que le contrôle saute à attraper dès qu'il atteint essayez.

Est-ce un problème connu ou quelque chose de nouveau? Pourquoi retourner un problème implicite?

ScreenShot Error with Implicit Struct

Stack Trace

coldfusion.runtime.UndefinedElementException: Element DETAIL is undefined in CFCATCH. 
    at coldfusion.runtime.CfJspPage.resolveCanonicalName(CfJspPage.java:1752) 
    at coldfusion.runtime.CfJspPage._resolve(CfJspPage.java:1705) 
    at coldfusion.runtime.CfJspPage._resolveAndAutoscalarize(CfJspPage.java:1854) 
    at coldfusion.runtime.CfJspPage._resolveAndAutoscalarize(CfJspPage.java:1833) 
    at cfcomponentFile2ecfc947108420$funcBLAHIMPLICIT.runFunction(C:\ColdFusion10\cfusion\wwwroot\fresh\componentFile.cfc:21) 
    at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472) 
    at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:405) 
    at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368) 
    at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55) 
    at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321) 
    at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220) 
    at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:655) 
    at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:444) 
    at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:414) 
    at coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2432) 
    at cf62ecfm1194236173.runPage(C:\ColdFusion10\cfusion\wwwroot\fresh\cfcatchErr.cfm:5) 
    at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:244) 
    at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:444) 
    at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65) 
    at coldfusion.filter.IpFilter.invoke(IpFilter.java:64) 
    at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:449) 
    at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40) 
    at coldfusion.filter.PathFilter.invoke(PathFilter.java:112) 
    at coldfusion.filter.LicenseFilter.invoke(LicenseFilter.java:30) 
    at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94) 
    at coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:79) 
    at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) 
    at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38) 
    at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46) 
    at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) 
    at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) 
    at coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62) 
    at coldfusion.CfmServlet.service(CfmServlet.java:219) 
    at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42) 
    at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:414) 
    at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:204) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:722) 

Remarque: J'aime Railo aussi, mais permet de parler seulement CF 10 dans ce cas. J'ai soumis un bug to Adobe.

+0

Pouvez-vous svp inclure le message d'erreur réelle, plutôt que de simplement décrire. Inclure la partie initiale de la trace de la pile ainsi, pls. –

+0

@AdamCameron fait maître :) – Sanjeev

+0

Les bonnes nouvelles sont que je peux reproduire cela sur CF9, donc peut travailler avec elle. Merci pour le très bon cas de repro, btw. –

Répondre

1

C'est certainement un bug dans CF, si bon que vous l'avez enregistré en tant que tel (3605215).

Le travail autour je pourrais trouver est d'utiliser une variable intermédiaire la plus rapide, par exemple:

<cffunction name="blahImplicit" returntype="Struct"> 
    <cfset var name = 'ColdFusion'/> 
    <cftry> 
      <cfreturn {success= true, data= name}> 
     <cfcatch type="any"> 
     <cfset var ret = {success= false, data= cfcatch.detail}><!--- this will prevent the error ---> 
      <cfreturn ret> 
     </cfcatch> 
    </cftry> 
</cffunction> 
Questions connexes