首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从loadPaths到类的ColdFusion Javacast数组中出错

从loadPaths到类的ColdFusion Javacast数组中出错
EN

Stack Overflow用户
提问于 2018-10-26 03:06:33
回答 1查看 196关注 0票数 1

我正在尝试使用Elasticsearch的Java API。

我正在尝试创建一个RestClientBuilder

代码语言:javascript
复制
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数组。

另外,如果我只是尝试使用:

代码语言:javascript
复制
RestClient=createObject("java", "org.elasticsearch.client.RestClient").builder(Javacast("org.apache.http.HttpHost[]", [Host]));

我得到以下错误

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

我认为这是因为ColdFusion不能很好地处理varargs

EN

回答 1

Stack Overflow用户

发布于 2018-10-26 03:06:33

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

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未知。在coldfusion.runtime.Cast.toJavaArray(Cast.java:1602)

此外,如果我尝试执行UDF采取的操作

代码语言:javascript
复制
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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52996435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档