【问题标题】:Consume webservice returning Complex objects in Coldfusion在 Coldfusion 中使用返回复杂对象的 web 服务
【发布时间】:2017-04-05 04:46:55
【问题描述】:

我们正在使用Argus WS,而我一直在弄清楚如何使用GetUpdatedPricesInDateTimeRange 方法。

它返回一个复杂的对象类型,我无法访问返回对象中的元素结构。

得到错误

Element <e.g. element name> is undefined in a Java object of type class org.tempuri.GetUpdatedPricesInDateTimeRangeResponseGetUpdatedPricesInDateTimeRangeResult. 

Webservice 被调用如下:

<cfinvoke  
webservice="http://www.argusmedia.com/ArgusWSVSTO/ArgusOnline.asmx?wsdl"
method="GetUpdatedPricesInDateTimeRange" 
returnvariable="PricesResponse"> 
  <cfinvokeargument name="authToken" value="#AuthToken#"/>
  <cfinvokeargument name="fromDateTime" value="2017-03-01"/>
  <cfinvokeargument name="toDateTime" value="2017-03-02"/>
  <cfinvokeargument name="startId" value="0"/>
</cfinvoke> 

任何指针都会很有帮助。

编辑 1:CFDump 返回变量

编辑 2:根据 Leigh 的建议,这对我有用。

XML

PricesResponse.get_any()[2].getAsString()

XML 中有命名空间,因此 XML 搜索的工作方式如下:

XmlSearch(XMLDoc,"//*[local-name()='Element_Name']")

【问题讨论】:

  • 调用是否返回一个名为returnvariable的变量?如果是这样,你能把它扔掉吗?
  • @DanBracuk :添加了 cfdump。
  • 这是一个 SOAP-webservice 对吧?您是否尝试过使用例如生成请求。肥皂界面?
  • @GauravS - 继续调用方法并转储结果。例如,当您转储get_any() 时会得到什么?看起来它返回一个元素数组。
  • 很高兴它有帮助。您应该发布“编辑 2”作为答案,因此它更明显。可能想要包含 get_Any() 元素之一的转储和/或 XML 以帮助下一个人理解响应结构:)

标签: web-services coldfusion coldfusion-9


【解决方案1】:

根据 Leigh 的评论,returnvariableget_any() 方法可用于获取底层 XML。

get_any() 的转储返回消息元素数组。

get_any()getAsString() 方法返回预期的 XML 字符串。

<cfdump var="#PricesResponse.get_any()[1].getAsString()#">

注意:预期的 XML 可以在 MessageElement[] 数组元素中的任何一个中,而不是在第一个元素中。

注意 2:在 XML 中使用命名空间的 XMLSearch 的工作方式如下:

XmlSearch(XMLDoc,"//*[local-name()='Element_Name']")

【讨论】:

  • 感谢您发布决议。澄清一下,当您说“任一元素”时,您的意思是 所有 元素都包含相关的 XML - 还是仅其中一个? (我对 API 不熟悉)。
  • @Leigh :返回的对象具有相关的 XML,数据仅在第二个元素中。第一个元素只有模式定义。对于其他 API,这可能会有所不同。
  • 感谢您的澄清,因为这绝对不是我所期望的。
猜你喜欢
  • 2011-01-22
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
相关资源
最近更新 更多