通过CFCProxy使用ColdFusion类的Java正在抛出ClassNotFoundException

通过CFCProxy使用ColdFusion类的Java正在抛出ClassNotFoundException,java,coldfusion,coldfusion-2016,Java,Coldfusion,Coldfusion 2016,场景: 我正在做一个测试,以了解Java应用程序与驻留在同一JVM上的另一个ColdFusion应用程序通信的可行性。其目的是在现有ColdFusion应用程序的基础上使用springboot创建微服务 问题: 为了进行调查,我使用ColdFusion提供的。我已经将cfusion jar添加到java类路径中,我的java应用程序正在正确编译。运行应用程序时,我得到ClassNotFoundException 代码: 错误消息: java.lang.NoClassDefFoundError:

场景: 我正在做一个测试,以了解Java应用程序与驻留在同一JVM上的另一个ColdFusion应用程序通信的可行性。其目的是在现有ColdFusion应用程序的基础上使用springboot创建微服务

问题: 为了进行调查,我使用ColdFusion提供的。我已经将
cfusion jar
添加到java类路径中,我的java应用程序正在正确编译。运行应用程序时,我得到ClassNotFoundException

代码:

错误消息:

java.lang.NoClassDefFoundError: javax/servlet/Servlet
    at JavaIntegration.sayHelloThroughCF(JavaIntegration.java:11)
    at HelloWorld.main(HelloWorld.java:4)
Caused by: java.lang.ClassNotFoundException: javax.servlet.Servlet
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
注意: 如果从ColdFusion触发代码,我就能够成功完成事务。在这个场景中,我将JavaJAR添加到coldfusion类路径中。 即
ColdFusion-->Java-->ColdFusion
工作正常,没有任何问题。请在下面找到ColdFusion代码

index.cfm:

<cfscript>
    a = createObject("java", "cfintegration.JavaObject");
</cfscript>
<cfdump var="#a.sayHelloThroughCF('my name in cf')#"><br/>

a=createObject(“java”,“cfintegration.JavaObject”);

Employee.cfc

<cfcomponent output="false" displayname="Employee">
    <cffunction name="sayCFHello" access="public" output="false" returntype="String">
        <cfargument name="name" required="true" />
        <cfreturn "ColdFusion says hello to " & arguments.name />
    </cffunction>
</cfcomponent>


我可能错了,但是。。。我不认为您可以在CF之外使用CFCProxy。如果您考虑一下,CFC将需要一个CF服务器来运行(例如解析和执行CFML代码)。文档说“要调用[a]CFC,ColdFusion类加载器必须是当前的类加载器”。如果不在CF中运行java应用程序,或者至少在同一个JVM上运行java应用程序,我看不出会发生什么。@ageax同意您的看法。我现在感到困惑和困惑。我可能很愚蠢,但是你认为我们可以为Java添加一个定制的类加载器来加载CF类吗?但是我假设CF类只有在我们运行应用程序时才可用?这也是我不太理解的部分。您当然可以创建自定义类加载器-或切换当前类加载器-但是。。。即使你可以加载所有必要的罐子,我仍然不知道如果CF引擎不运行它怎么工作。顺便说一句,我在JavaLoader组的旧线程中读到了关于切换类加载器的部分。我认为它不再是非常活跃的,所以您可能希望在cfml slack频道上询问更新:1。虽然我认为它不能解决更广泛的问题(从java应用程序调用CFC),但ClassNotFound错误可能是因为您没有将javax.servlet jar添加到类路径中。在CF根文件夹中查找名为
servlet api-####.jar
的jar。2.您是否考虑过使用web服务,而不是尝试调用本机CFC?这会很有效,而且会更容易…我将尝试将javax.servlet添加到类路径。我们确实考虑过WebService,如果没有效果的话,这是最后的回落。我们试图避免将http调用作为请求的一部分,因为单个请求可能需要对CF服务进行多次调用。
<cfcomponent output="false" displayname="Employee">
    <cffunction name="sayCFHello" access="public" output="false" returntype="String">
        <cfargument name="name" required="true" />
        <cfreturn "ColdFusion says hello to " & arguments.name />
    </cffunction>
</cfcomponent>