从加载路径到类的ColdFusion Javacast数组中出错
我正在尝试使用Elasticsearch的JavaAPI 我正在努力创造一个新的世界 我得到了错误 无法将值转换为Java数组,因为类型org.elasticsearch.client.Node未知 如果我只是尝试使用:从加载路径到类的ColdFusion Javacast数组中出错,java,coldfusion,Java,Coldfusion,我正在尝试使用Elasticsearch的JavaAPI 我正在努力创造一个新的世界 我得到了错误 无法将值转换为Java数组,因为类型org.elasticsearch.client.Node未知 如果我只是尝试使用: RestClient=createObject("java", "org.elasticsearch.client.RestClient").builder(Javacast("org.apache.http.HttpHost[]", [Host])); 我得到以下错误 没有
RestClient=createObject("java", "org.elasticsearch.client.RestClient").builder(Javacast("org.apache.http.HttpHost[]", [Host]));
我得到以下错误
没有具有指定方法名称和名称的方法
参数类型或生成器方法被参数类型重载
这种冷融合无法可靠地破译。ColdFusion找到0个方法
与提供的参数匹配的。如果这是一个Java对象
如果验证了该方法的存在,请使用javacast函数来减少
含糊不清
我认为这是因为ColdFusion不能很好地与varargs配合使用我发现了一种使用这种方法的解决方法 我相信Javacast和javaSettings加载路径没有被使用存在一个bug coldfusion.runtime.Cast$UnknownTypeException:无法转换该值 由于类型org.elasticsearch.client.Node未知,无法访问Java数组。 位于coldfusion.runtime.Cast.toJavaArray(Cast.java:1602) 此外,如果我尝试执行UDF采取的活动
local.javaClass = createObject("java", "org.apache.http.HttpHost");
local.HostArrayReflect = createObject("java", "java.lang.reflect.Array");
local.HostArray = local.HostArrayReflect.newInstance(
local.javaClass.GetClass()
, JavaCast( "int", ArrayLen(local.Hosts))
);
for (i=0; i LT ArrayLen(local.Hosts); i=i+1) {
local.HostArrayReflect.Set(local.HostArray, JavaCast("int", i), local.Hosts[i]);
}
我得到了错误
实例化Java对象时发生异常。班级
不能是接口或抽象类。如果班级有
若构造函数接受参数,则必须调用该构造函数
显式使用init(args)方法。错误:
org.apache.http.HttpHost
java.lang.NoSuchMethodException:org.apache.http.HttpHost.()位于
getConstructor0(Class.java:3082)位于
java.lang.Class.newInstance(Class.java:412)位于
coldfusion.runtime.java.JavaProxy.createObjectWithDefaultConstructor(JavaProxy.java:209)
位于coldfusion.runtime.java.JavaProxy.invoke(JavaProxy.java:92)
当我尝试运行getClass()
时会发生这种情况,但在UDF中没有问题。一位同事试图在Lucee上运行此功能,但它似乎起了作用,因此我相信CF中存在与此相关的错误。当我尝试疯狂地运行getClass()时,错误发生了,因为代码使用了getClass()
(请注意此情况),但在使用getClass()
(驼峰案例)时则没有。我还不知道为什么,但我猜可能“getClass()是硬编码的,用于返回类,其他所有内容都像一个函数一样处理。
local.javaClass = createObject("java", "org.apache.http.HttpHost");
local.HostArrayReflect = createObject("java", "java.lang.reflect.Array");
local.HostArray = local.HostArrayReflect.newInstance(
local.javaClass.GetClass()
, JavaCast( "int", ArrayLen(local.Hosts))
);
for (i=0; i LT ArrayLen(local.Hosts); i=i+1) {
local.HostArrayReflect.Set(local.HostArray, JavaCast("int", i), local.Hosts[i]);
}