场景: 我正在努力了解Java应用程序与驻留在同一JVM上的另一个ColdFusion应用程序进行通信的可行性。目的是在现有ColdFusion应用程序之上使用springboot创建微服务。
问题:
为了进行调查,我使用的是ColdFusion提供的CFProxy library。我已将cfusion jar
添加到Java类路径中,并且我的Java应用程序正在正确编译。运行应用程序时,我收到ClassNotFoundException
代码:
import coldfusion.cfc.CFCProxy;
public class JavaIntegration {
public String sayHelloThroughCF(String name){
String message = "";
ClassLoader classLoader = getClass().getClassLoader();
System.out.println("ClassLoader: " + classLoader);
try{
CFCProxy employeeCFC = new CFCProxy("C:\\Sites\\lb-bo-dev\\JavaIntegration\\employee.cfc", true);
Object[] args = {name};
message = (String) employeeCFC.invoke("sayCFHello", args);
}
catch(Throwable e) {
e.printStackTrace();
}
return message;
}
}
错误消息:
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触发代码,则能够成功完成交易。在这种情况下,我已将Java jar添加到Coldfusion类路径中。
即
ColdFusion--> Java --> ColdFusion
正常工作。请在下面找到ColdFusion代码
index.cfm:
<cfscript>
a = createObject("java", "cfintegration.JavaObject");
</cfscript>
<cfdump var="#a.sayHelloThroughCF('my name in cf')#"><br/>
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>