【问题标题】:Page stops processing after using createObject for a custom java class对自定义 java 类使用 createObject 后页面停止处理
【发布时间】:2015-02-08 21:49:45
【问题描述】:

我正在尝试在 ColdFusion 应用程序中合并一些 java 类。我正在使用 ColdFusion 10 中的新功能,我可以在我的 Application.cfc 中指定 ColdFusion 应该在哪里查找 .class 文件。当我尝试使用createObject 创建这些对象之一时,页面似乎停止处理。我想强调页面上没有错误,就好像包含了<cfabort>

我的应用程序.cfc

<cfcomponent accessors="true" output="false" persistent="false">
    <cfscript>
    THIS.javaSettings = {LoadPaths = ["C:\ColdFusion11\cfusion\wwwroot\JavaTest\Hybrid\java\bin"], loadColdFusionClassPath = true, watchInterval = 10, reloadOnChanges = true};
    </cfscript>
</cfcomponent>

我的 Java 文件

public class TestRT {
    public static String sayHello(){
        return "hello";
    }
    public static String echo(String e){
        return "hello";
    }
}

我的 cfm

<html>
<head><title>Hello World</title></head>
    <body>
        <h2>Echo example</h2>

        <cfset hello = createObject("java","TestRT").init()>
        <cfoutput>Hi #hello.echo("marc")#</cfoutput>

        <h2>End - I NEVER SHOW</h2>
    </body>
</html>

我的项目结构:

输出:

我的日志文件:

虽然我在页面上没有收到任何错误,但感谢 Leigh,我的日志文件中有几个错误:

在异常日志中:

"Error","http-bio-8500-exec-2","02/09/15","06:18:35",,"TestRT : Unsupported major.minor version 52.0 The specific sequence of files included or processed is: C:\ColdFusion11\cfusion\wwwroot\JavaTest\Hybrid\index.cfm, line: 8 "
java.lang.UnsupportedClassVersionError: TestRT : Unsupported major.minor version 52.0

在coldfusion-error.log 中:

Feb 09, 2015 6:18:36 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [CfmServlet] in context with path [/] threw exception [Servlet execution threw an exception] with root cause
java.lang.UnsupportedClassVersionError: TestRT : Unsupported major.minor version 52.0

如果我更改为编造的课程,我会收到预期的错误,因此它确实找到了我的课程,但它只是不喜欢它。出了什么问题,如何在 ColdFusion 中使用我的 java 类?

【问题讨论】:

  • 您是否检查了所有的日志文件,包括 /runtime/logs?以上对我来说对 CF10 来说效果很好(注意到你的文件路径指的是 CF11?)虽然通常你至少会在 Application.cfc 中分配一个“名称”。旁注,调用静态方法时无需调用init()(即伪构造函数)。
  • @Leigh 有趣,我在日志中发现了几个错误/异常(请参阅更新的问题),重新版本 11:我的冷聚变个人副本是版本 11,但在工作中我们使用 10,所以我可以仅使用 10 的功能。
  • 好的,这是有道理的。我的 java 类是针对 java 8 编译的,但 Coldfusion JRE 似乎是 java 7
  • @Leigh 会的,我想 100% 确保我回家后它可以正常工作,但问题似乎很可能是这样
  • (编辑)是的。像任何 java 项目一样,您必须构建与应用程序将运行的任何版本兼容,在本例中为 java7。不要忘记把它写下来作为关闭线程的答案。 RE:在工作中我们使用 10 我强烈建议在本地运行相同的版本(您也可以同时运行 10 和 11)。否则,在您上传代码并且应用程序中断之前,您永远无法确定代码的行为方式(是的,这是个人经验;-)。

标签: java coldfusion coldfusion-10


【解决方案1】:

正如 exception.log 中的消息所建议的那样 [感谢Leigh 建议查看那里],可以在 ColdFusion 安装目录下的 cfusion\logs 下找到,问题确实是我正在编译我的 Java Java 8 下的源代码,但我的 ColdFusion 版本中捆绑的 JRE 仅支持 Java 7。通过将我的“编译合规级别”更改为 1.7(又名 Java 7),我能够让上述示例完美运行。

在eclipse中修改编译成的Java版本:

File>Properties>Java Compiler Change “Compile Compliance level”记住比 1.N 更常被称为 Java version N

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    相关资源
    最近更新 更多