从加载路径到类的ColdFusion Javacast数组中出错

从加载路径到类的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])); 我得到以下错误 没有

我正在尝试使用Elasticsearch的JavaAPI

我正在努力创造一个新的世界

我得到了错误

无法将值转换为Java数组,因为类型org.elasticsearch.client.Node未知

如果我只是尝试使用:

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]);
}