我正在尝试在Railo上启动测试MG应用程序并且遇到障碍。 当我访问MG应用程序时,我得到:
Railo 3.1.0.012 Error (Java.lang.classformaterror)
Message Invalid index 16 in LocalVariableTable in class file
application_cfc$cf
Java Stacktrace
Invalid index 16 in LocalVariableTable in class file application_cfc
$cf
at java.lang.ClassLoader.defineClass1(Native Method):-2
at java.lang.ClassLoader.defineClass(ClassLoader.java:621):621
at java.lang.ClassLoader.defineClass(ClassLoader.java:401):401
at railo.commons.lang.PhysicalClassLoader.loadClass
(PhysicalClassLoader.java:116):116
at railo.runtime.PageSourceImpl.compile(PageSourceImpl.java:225):225
at railo.runtime.PageSourceImpl.loadPhysical(PageSourceImpl.java:167):
167
at railo.runtime.PageSourceImpl.loadPage(PageSourceImpl.java:102):102
我做了一些测试,发现当下面的内容 Application.cfc发生:
<cfloop from="1" to="#arrayLen(mgInstances)#" index="i">
<cfset mgInstances[i].executeEvent(arguments.eventName, values) />
</cfloop>
我收到错误。如果我删除这部分,我开始得到:
Message Application context not loaded!
Error Code
org.coldspringframework.webApplicationContextProxy.cantLoadApplicationContext
所以,我猜测在Application.cfc中,行:
<cfset var mgInstances = createObject
("component","ModelGlue.Util.ModelGlueFrameworkLocator").findInScope
(appScope) />
失败了。
其他人是否有此问题?有解决方案吗谢谢!!!
答案 0 :(得分:5)
要考虑的一件大事:通过CFML语言的历史,它始终是按值传递数组的标准行为,而不是通过引用。从语言的早期开始就存在这种情况,与许多其他编程语言的行为相反,但是从什么时候CF有什么问题违反惯例? (例如,数组以1而不是0开始编号)。
另一方面,Railo通过引用传递数组,不按值传递,作为其默认行为。您可以看到这可能会导致其他框架出现问题。为了解决此兼容性问题,Railo允许您使用cfargument标记的“passby”属性来指定任何param作为值或引用。像这样:<cfargument name="myArray" type="array" required="true" passby="value" />
当然,这意味着必须为Railo重写一些框架,因为这会破坏与Adobe ColdFusion的完全兼容性。
转移ORM现在完全打破了Railo以及此特定问题的结果,以及Railo和CF8之间的其他行为故障。 Model Glue和其他现有的CF框架不会出现类似的故障。
答案 1 :(得分:5)
在Railo 3.1 final(或以下其中一个补丁)中,我们将在Railo管理员中设置兼容性选项卡,允许您将passby值设置为Railo中的默认行为。然后,您可以启用此设置,从而使Transfer和ModelGlue III运行良好。这里的旁注是passby属性不会破坏现有的CF代码。它只被视为CFARGUMENT元数据。
我们老实说将此视为Coldfusion中的错误,但由于兼容性要求,我们将调整此行为并使其在Railo Administrator中可选。
格特弗兰兹 Railo开源
答案 2 :(得分:0)
我会将此记录为railo bug tracker中的错误。他们通常很擅长解决这些错误,以便流行的coldfusion框架在他们的平台上运行。