将CFML参数转换为Java类以进行Web服务调用时出错

我正在尝试使用cfinvoke标记从ColdFusion使用WSDL,并且在传递参数时遇到问题.如果它是简单的STRING或NUMERIC参数,则效果很好.问题是当我需要传递此参数时:

 

 

<part name="options" type="soap-enc:Array"/>

好吧,我尝试了不同的方法:传递ColdFusion数组,STRUCT,简单的字符串等.在某些情况下,我从Web服务获得响应,告知该参数丢失,并且在传递结构时,出现此错误:

 

Error converting CFML arguments to Java classes for web service
invocation. Unable to create web service argument class
[Ljava.lang.Object;. Error: java.lang.InstantiationException:
[Ljava.lang.Object;. Often this is because the web service defines an
abstract complexType as an input to an operation. You must create an
actual instance of this type in Java.

您可以在此处查看正在运行的脚本:

cf wsdl web service test

在那里,您具有指向Web服务定义的链接.
我该怎么办?如何从ColdFusion将简单的Array对象传递给WSLD?

Inm小程序商店 | Vultr中文网

最佳答案

像您在此处看到的那样,复杂的SOAP对象周围缺乏透明性,这是当今为什么JSON更受数据格式青睐的一个重要原因.我已经编写了Java组件来处理这种事情.您需要知道options变量的特定格式(第二个参数),它是Objects的数组,尽管没有提供任何细节.我没有适合您的完整解决方案,但是这段代码应该可以帮助您实现大部分目标.

 

 

<cfscript>
    ws = createObject("webservice", "https://api.iritravel.ro/?wsdl");
    res = ws.getCountries(token = "137e8f1a094-1031");
    country = createObject( "java", "java.util.HashMap" ).init();
    country.put( 'CountryId', 2 );
    res2 = ws.getTowns( token = "137e8f1a094-1031", options=[ country ] );
    writedump( res2 );
    writedump( country );
</cfscript>

如果我可以使用它,我会发布更新,但是您可以使用此处提供的信息来完成它.我创建了一个HashMap(基本Java对象),并添加了一个值为2的键“ CountryId”.请参见将options参数格式化为数组并将country HashMap对象作为数组的第一个元素传递给我的方式.这段代码起作用了,所以您只需要知道服务期望的对象的特定格式即可.

更新资料

我已经包含了一个SOAPUI生成的getTowns()请求,该请求表明无论使用webservices调用还是cfhttp,问题都是相同的.在这种情况下,我向请求中添加了CountryId参数,返回的结果与上一次调用得到的响应相同-参数CountryId丢失.因此问题是相同的-服务期望使用的对象数组的格式不正确.

http://pastebin.com/ZXBS2e2r

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值