【问题标题】:Consuming a ColdFusion written web service via SoapUI loses all CDATA tags通过 SoapUI 使用 ColdFusion 编写的 Web 服务会丢失所有 CDATA 标记
【发布时间】:2015-05-29 09:57:07
【问题描述】:

我编写了一个非常基本的 CFC,其中包含一个“远程”功能。

我已将函数的响应类型设置为“XML”,将响应格式设置为“WDDX”。

在函数内部,我使用coldfusion XmlNew / XmlElemNew / ArrayAppend 等中的标准xml 函数来生成返回XML。

使用 cffile 或 cflog 并将 XML 转储到文件/日志将导致如下所示:

<rootnode>
<item>This is item 1</item>
<item>This is item 2</item>
<item>This is item 3</item>
</rootnode>

同样,当我使用 SOAP-UI 来使用 Web 服务时,它也没有问题。

但是我现在需要在内容上使用 CDATA 标记,因为其中有一些奇怪的字符。

所以我只是觉得填节点的时候是从XMLText切换到XMLCData的情况。

我进行了切换,这一切都适用于文件/日志,但在 SOAP-UI 中,它只会导致所有节点变为空白并最终如下所示:

<rootnode>
<item/>
<item/>
<item/>
</rootnode>

我什至尝试过使用 CFXML 标签转换 XML 的整个创建过程。即

<cfxml variable="xmlObj">
    <rootnode>
    <cfloop query="getdata">
        <item><cfoutput>#getData.Symptom#</cfoutput></item>
    </cfloop>
    </rootnode>
</cfxml>

上述方法有效,但只要我将上述代码的中间行包含在 CData 中,问题就会再次出现。

同样,我编写了以下测试 CFM 页面

<cfset DataManager = createObject("component","com.DataManager")>
<cfset ret = DataManager.GetItems(1)>

<cfinvoke webservice="http://localhost:8500/mysite/com/DataManager.cfc?wsdl" method="GetItems" language="1" returnVariable="ret2">

<cfdump var="#ret#">

<cfdump var="#ret2#">

如上所示,“ret1”的 cfdump 会按预期显示文本。 "ret2" 的 cfdump 存在上述问题。

任何帮助将不胜感激。

我要重写整个内容以返回 JSON!

【问题讨论】:

  • 只是补充一下,我发现它不是特定于 SOAP-UI 的。

标签: xml web-services soapui coldfusion-10 cdata


【解决方案1】:

是的,我最终完全靠运气解决了这个问题。

在 ColdFusion 10 中,为 Axis1 和 Axis2 添加了支持。

在之前的 ColdFusion 版本中,仅支持 Axis1。

ColdFusion 10 中的默认值为 Axis2

有一个设置可以添加到您的 CFC 以覆盖此设置并恢复到名为 wsversion 的 Axis1(请参见下面的示例)

<cfcomponent output="false" wsversion="1">

恢复到 Axis1 似乎已经解决了问题,我现在看到 CDATA 标记出现在 SOAP-UI 中

所以虽然上面解决了这个问题,但它并没有解释为什么它会导致 Axis2 出现问题

【讨论】:

    猜你喜欢
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多