进行了以下比较,将Coldfusion 9.0.1与Railo 4.0.2.002进行了比较

我有以下(被截断)作为cfc的初始化

component {
    public myComponent function init(
        required string inSetting1,
        required string inSetting2
    ) {
        return this;
    }
}

如果我运行以下命令,那么它将正确调用
objInstance = new myComponent(
    inSetting1 = 'xxx',
    inSetting2 = 'yyy'
);

但是,我正在尝试在没有所有必需参数的情况下处理请求此对象的配置错误。到目前为止,我有以下内容
try {
    // inSetting2 is not defined == will cause error
    objInstance = new myComponent(
        inSetting1 = 'xxx'
    );
} catch (coldfusion.runtime.MissingArgumentException e) {

    // This catches the error for CF 9.0.1

} catch (expression e) {

    // This catches the error for Railo 4.0.2
    debug(e); // get the error dump for stack trace below

}

到目前为止,我已经根据堆栈跟踪中的开头expression尝试了以下操作,但没有奏效railo.runtime.type.UDFImpl.defineArguments(UDFImpl.java:171)(这是我检索CF9的特定类型的方式)
  • railo
  • railo.runtime
  • railo.runtime.type
  • railo.runtime.type.UDFImpl
  • railo.runtime.type.UDFImpl.defineArguments

  • 现在,虽然我可以只做catch (expression e)甚至catch (any e),但我宁愿能够捕获特定错误,原因很简单,原因是在我当前正在更新以与Railo一起使用的组件中的某些位置,它依赖于能够确定无法区分配置错误(缺少参数)和部署错误(缺少模板)的原因。

    因此,有人知道我可以通过上述方法使上面的try/catch专门针对coldfusion.runtime.MissingArgumentException的情况吗(或者就此而言,我可以在尝试调用/运行该方法之前检查所需参数的方法) (s)个问题)

    编辑:我忘了包括堆栈跟踪。这是Railo堆栈跟踪。我也已经尝试过以下方法来代替expression
     The parameter environment to function init is required but was not
     passed in. at
     railo.runtime.type.UDFImpl.defineArguments(UDFImpl.java:171):171 at
     railo.runtime.type.UDFImpl._call(UDFImpl.java:369):369 at
     railo.runtime.type.UDFImpl.callWithNamedValues(UDFImpl.java:275):275
     at railo.runtime.ComponentImpl._call(ComponentImpl.java:608):608 at
     railo.runtime.ComponentImpl._call(ComponentImpl.java:490):490 at
     railo.runtime.ComponentImpl.callWithNamedValues(ComponentImpl.java:1800):1800
     at
     railo.runtime.functions.other._CreateComponent.call(_CreateComponent.java:49):49
     at
     mso.dev_test315.mycomponenttest_cfc$cf._1(/var/www/html/myComponentTest.cfc:133):133
     at
     mso.dev_test315.mycomponenttest_cfc$cf.udfCall(/var/www/html/myComponentTest.cfc):-1
     at railo.runtime.type.UDFImpl.implementation(UDFImpl.java:103):103 at
     railo.runtime.type.UDFImpl._call(UDFImpl.java:371):371 at
     railo.runtime.type.UDFImpl.callWithNamedValues(UDFImpl.java:275):275
     at railo.runtime.ComponentImpl._call(ComponentImpl.java:608):608 at
     railo.runtime.ComponentImpl._call(ComponentImpl.java:490):490 at
     railo.runtime.ComponentImpl.callWithNamedValues(ComponentImpl.java:1796):1796
     at railo.runtime.tag.Invoke.doComponent(Invoke.java:209):209 at
     railo.runtime.tag.Invoke.doEndTag(Invoke.java:182):182 at
     mxunit.framework.testcase_cfc$cf._2(/var/www/html/mxunit/framework/TestCase.cfc:115):115
     at
     mxunit.framework.testcase_cfc$cf.udfCall(/var/www/html/mxunit/framework/TestCase.cfc):-1
     at railo.runtime.type.UDFImpl.implementation(UDFImpl.java:103):103 at
     railo.runtime.type.UDFImpl._call(UDFImpl.java:371):371 at
     railo.runtime.type.UDFImpl.callWithNamedValues(UDFImpl.java:275):275
     at railo.runtime.ComponentImpl._call(ComponentImpl.java:608):608 at
     railo.runtime.ComponentImpl._call(ComponentImpl.java:490):490 at
     railo.runtime.ComponentImpl.callWithNamedValues(ComponentImpl.java:1800):1800
     at
     railo.runtime.util.VariableUtilImpl.callFunctionWithNamedValues(VariableUtilImpl.java:749):749
     at
     railo.runtime.PageContextImpl.getFunctionWithNamedValues(PageContextImpl.java:1521):1521
     at
     mxunit.framework.decorators.dataproviderdecorator_cfc$cf._1(/var/www/html/mxunit/framework/decorators/DataProviderDecorator.cfc:31):31
     at
     mxunit.framework.decorators.dataproviderdecorator_cfc$cf.udfCall(/var/www/html/mxunit/framework/decorators/DataProviderDecorator.cfc):-1
     at railo.runtime.type.UDFImpl.implementation(UDFImpl.java:103):103 at
     railo.runtime.type.UDFImpl._call(UDFImpl.java:371):371 at
     railo.runtime.type.UDFImpl.call(UDFImpl.java:284):284 at
     railo.runtime.ComponentImpl._call(ComponentImpl.java:607):607 at
     railo.runtime.ComponentImpl._call(ComponentImpl.java:490):490 at
     railo.runtime.ComponentImpl.call(ComponentImpl.java:1781):1781 at
     railo.runtime.util.VariableUtilImpl.callFunctionWithoutNamedValues(VariableUtilImpl.java:723):723
     at
     railo.runtime.PageContextImpl.getFunction(PageContextImpl.java:1506):1506
     at
     mxunit.framework.testsuiterunner_cfc$cf._1(/var/www/html/mxunit/framework/TestSuiteRunner.cfc:99):99
     at
     mxunit.framework.testsuiterunner_cfc$cf.udfCall(/var/www/html/mxunit/framework/TestSuiteRunner.cfc):-1
     at railo.runtime.type.UDFImpl.implementation(UDFImpl.java:103):103 at
     railo.runtime.type.UDFImpl._call(UDFImpl.java:371):371 at
     railo.runtime.type.UDFImpl.call(UDFImpl.java:284):284 at
     railo.runtime.type.scope.UndefinedImpl.call(UndefinedImpl.java:774):774
     at
     railo.runtime.util.VariableUtilImpl.callFunctionWithoutNamedValues(VariableUtilImpl.java:723):723
     at
     railo.runtime.PageContextImpl.getFunction(PageContextImpl.java:1506):1506
     at
     mxunit.framework.testsuiterunner_cfc$cf._1(/var/www/html/mxunit/framework/TestSuiteRunner.cfc:52):52
     at
     mxunit.framework.testsuiterunner_cfc$cf.udfCall(/var/www/html/mxunit/framework/TestSuiteRunner.cfc):-1
     at railo.runtime.type.UDFImpl.implementation(UDFImpl.java:103):103 at
     railo.runtime.type.UDFImpl._call(UDFImpl.java:371):371 at
     railo.runtime.type.UDFImpl.call(UDFImpl.java:284):284 at
     railo.runtime.ComponentImpl._call(ComponentImpl.java:607):607 at
     railo.runtime.ComponentImpl._call(ComponentImpl.java:490):490 at
     railo.runtime.ComponentImpl.call(ComponentImpl.java:1781):1781 at
     railo.runtime.util.VariableUtilImpl.callFunctionWithoutNamedValues(VariableUtilImpl.java:723):723
     at
     railo.runtime.PageContextImpl.getFunction(PageContextImpl.java:1506):1506
     at
     mxunit.framework.testsuite_cfc$cf._1(/var/www/html/mxunit/framework/TestSuite.cfc:131):131
     at
     mxunit.framework.testsuite_cfc$cf.udfCall(/var/www/html/mxunit/framework/TestSuite.cfc):-1
     at railo.runtime.type.UDFImpl.implementation(UDFImpl.java:103):103 at
     railo.runtime.type.UDFImpl._call(UDFImpl.java:371):371 at
     railo.runtime.type.UDFImpl.call(UDFImpl.java:284):284 at
     railo.runtime.ComponentImpl._call(ComponentImpl.java:607):607 at
     railo.runtime.ComponentImpl._call(ComponentImpl.java:490):490 at
     railo.runtime.ComponentImpl.call(ComponentImpl.java:1781):1781 at
     railo.runtime.util.VariableUtilImpl.callFunctionWithoutNamedValues(VariableUtilImpl.java:723):723
     at
     railo.runtime.PageContextImpl.getFunction(PageContextImpl.java:1506):1506
     at
     mxunit.framework.remotefacade_cfc$cf._1(/var/www/html/mxunit/framework/RemoteFacade.cfc:76):76
     at
     mxunit.framework.remotefacade_cfc$cf.udfCall(/var/www/html/mxunit/framework/RemoteFacade.cfc):-1
     at railo.runtime.type.UDFImpl.implementation(UDFImpl.java:103):103 at
     railo.runtime.type.UDFImpl._call(UDFImpl.java:371):371 at
     railo.runtime.type.UDFImpl.call(UDFImpl.java:284):284 at
     railo.runtime.ComponentImpl._call(ComponentImpl.java:607):607 at
     railo.runtime.ComponentImpl._call(ComponentImpl.java:498):498 at
     railo.runtime.ComponentImpl.call(ComponentImpl.java:1789):1789 at
     railo.runtime.ComponentWrap.call(ComponentWrap.java:165):165 at
     railo.runtime.net.rpc.server.ComponentController._invoke(ComponentController.java:56):56
     at
     railo.runtime.net.rpc.server.ComponentController.invoke(ComponentController.java:34):34
     at __138.mxunit.framework.remotefacade_wrap.executeTestCase(Unknown
     Source):-1 at sun.reflect.GeneratedMethodAccessor61.invoke(Unknown
     Source):-1 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
     Source):-1 at java.lang.reflect.Method.invoke(Unknown Source):-1 at
     org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397):397
     at
     org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186):186
     at
     org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323):323
     at
     org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32):32
     at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118):118 at
     org.apache.axis.SimpleChain.invoke(SimpleChain.java:83):83 at
     org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454):454
     at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281):281
     at
     railo.runtime.net.rpc.server.RPCServer.doPost(RPCServer.java:312):312
     at
     railo.runtime.ComponentPage.callWebservice(ComponentPage.java:783):783
     at railo.runtime.ComponentPage.call(ComponentPage.java:155):155 at
     railo.runtime.PageContextImpl.doInclude(PageContextImpl.java:801):801
     at
     railo.runtime.PageContextImpl.doInclude(PageContextImpl.java:753):753
     at
     railo.runtime.listener.ModernAppListener._onRequest(ModernAppListener.java:183):183
     at
     railo.runtime.listener.MixedAppListener.onRequest(MixedAppListener.java:18):18
     at
     railo.runtime.PageContextImpl.execute(PageContextImpl.java:2255):2255
     at
     railo.runtime.PageContextImpl.execute(PageContextImpl.java:2222):2222
     at
     railo.runtime.engine.CFMLEngineImpl.serviceCFML(CFMLEngineImpl.java:310):310
     at railo.loader.servlet.CFMLServlet.service(CFMLServlet.java:29):29 at
     javax.servlet.http.HttpServlet.service(HttpServlet.java:728):728 at
     org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305):305
     at
     org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210):210
     at
     org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222):222
     at
     org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123):123
     at
     org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472):472
     at
     org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171):171
     at
     org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99):99
     at
     org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118):118
     at
     org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407):407
     at
     org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200):200
     at
     org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589):589
     at
     org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310):310
     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown
     Source):-1 at
     java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source):-1
     at java.lang.Thread.run(Unknown Source):-1
    

    最佳答案

    比您当前使用的解决方案更简单的解决方法:

    try
    {
        // standard function call
    }
    catch (expression e)
    {
        if ( NOT refind('The parameter \S+ to function \S+ is required but was not passed in',e.message) )
            rethrow;
    }
    

    当然,这取决于错误消息的措辞,因此有些脆弱。

    您也可以选择不那么精确但更灵活的版本,只需检查以下关键字:
    if ( NOT find('parameter',e.message) AND find('required',e.message) )
    

    关于coldfusion - 如何在Railo中捕获 “coldfusion.runtime.MissingArgumentException”等效项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14360190/

    10-10 17:05