如何解决从loadPaths到类的Coldfusion Javacast数组出错?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (38)

我正在尝试使用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();

我收到了错误

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

如果我只是尝试使用:

RestClient = createObject(“java”,“org.elasticsearch.client.RestClient”)。builder(Javacast(“org.apache.http.HttpHost []”,[Host]));

我收到以下错误

要么没有具有指定方法名称和参数类型的方法,要么构建器方法会使用ColdFusion无法可靠解密的参数类型进行重载。ColdFusion找到了0个与提供的参数匹配的方法。如果这是一个Java对象并且您验证了该方法存在,请使用javacast函数来减少歧义。

我假设是因为Coldfusion与varargs不能很好地配合

提问于
用户回答回答于

我找到了使用此方法的解决方法

https://www.bennadel.com/blog/1980-tojava---a-coldfusion-user-defined-function-for-complex-java-casting.htm

我相信没有使用Javacast和javaSettings loadPaths的错误。

coldfusion.runtime.Cast $ UnknownTypeException:无法将值转换为Java数组,因为类型org.elasticsearch.client.Node未知。at 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。()在java.lang.Class.getConstructor0(Class.java:3082),位于coldfusion.runtime的java.lang.Class.newInstance(Class.java:412) coldfusion.runtime.java.JavaProxy.invoke中的.java.JavaProxy.createObjectWithDefaultConstructor(JavaProxy.java:209)(JavaProxy.java:92)

当我尝试运行时会发生这种情况getClass(),但在UDF中没有问题。一个同事试图在Lucee上运行它,它似乎有效,所以我相信CF中有一个与此相关的错误。

扫码关注云+社区

领取腾讯云代金券