我正在尝试使用Elasticsearch的Java API。
我正在尝试创建一个RestClientBuilder。
Host=createObject("java", "org.apache.http.HttpHost").init(variables.HostName, variables.Port);
Node=createObject("java", "org.elasticsearch.client.Node").init(Host);
RestClient=createObject("java", "org.elasticsearch.client.RestClient").builder(Javacast("org.elasticsearch.client.Node[]", [Node])).build();
我得到了错误
由于类型org.elasticsearch.client.Node未知,
无法将该值转换为Java数组。
另外,如果我只是尝试使用:
RestClient=createObject("java", "org.elasticsearch.client.RestClient").builder(Javacast("org.apache.http.HttpHost[]", [Host]));
我得到以下错误
没有具有指定方法名称和参数类型的方法,或者生成器方法被ColdFusion无法可靠解密的参数类型重载。ColdFusion找到0个与提供的参数匹配的方法。如果这是一个Java对象,并且您验证了该方法存在,请使用javacast函数来减少歧义。
我认为这是因为ColdFusion不能很好地处理varargs
发布于 2018-10-26 03:06:33
我找到了一种使用此方法的解决方法。
我相信有一个错误与Javacast和javaSettings loadPaths没有被使用。
coldfusion.runtime.Cast$UnknownTypeException:无法将该值转换为Java数组,因为类型org.elasticsearch.client.Node未知。在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。()在coldfusion.runtime.java.JavaProxy.invoke(JavaProxy.java:92)的java.lang.Class.getConstructor0(Class.java:3082) at org.apache.http.HttpHost at java.lang.Class.newInstance(Class.java:412)
当我尝试运行getClass()
时,就会发生这种情况,但在UDF中没有问题。一位同事试图在Lucee上运行它,它似乎起作用了,所以我相信CF中有一个与此相关的bug。
https://stackoverflow.com/questions/52996435
复制相似问题