通过SoapUI使用ColdFusion编写的Web服务会丢失所有CDATA标记

时间:2015-03-25 15:58:43

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

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

我已将函数的responsetype设置为“XML”,并将responseformat设置为“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#">

上面的cfdump“ret1”显示了预期的文本。 “ret2”的cfdump具有所描述的问题。

非常感谢任何帮助。

我正在重写整个事情而不是返回JSON!

1 个答案:

答案 0 :(得分:2)

对,我终于设法通过愚蠢的运气来解决这个问题。

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

在ColdFusion的早期版本中,仅支持Axis1。

ColdFusion 10中的默认值是Axis2

有一个设置可以添加到你的CFC来覆盖它并恢复到名为wsversion的Axis1(见下面的例子)

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

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

因此,虽然上面解决了这个问题,但它并没有解释为什么它会导致Axis2的问题