如何在Flex中向SOAP请求添加XML

时间:2010-06-21 22:39:14

标签: xml flex soap

我有一个像这样定义的Flex服务:

    <mx:operation name="postTableDetails" resultFormat="e4x" result="event.token.resultHandler(event);" fault="event.token.faultHandler(event);">
        <mx:request>
            <catalog></catalog>
            <schema></schema>
            <table></table>
            <details></details>

无论如何,我基本上无法重置参数看起来更像:

<details create_time="x" table_type="x">
    <column name="c1" datatype="INT" />
    ...
</details>

在我最终加载参数并调用服务的AS函数中,我正在做这样的事情:

var o:AbstractOperation = service.getOperation("postTableDetails");
o.arguments.catalog = catalog;
...
 o.arguments.details = new XML(details);

如果我跟踪我的“details”var然后是o.arguments.details,那么两者都是我期望的有效XML。但实际的请求会将其截断为:

<details><column /></details>

我已经成功处理了简单的请求,我只是用一个字符串填充了一些类似于schema的东西,但是这个更复杂的请求现在让我感到难过。

2 个答案:

答案 0 :(得分:0)

首先尝试将以下内容放入您的服务中

contentType="application/xml"

然后如果没有锻炼,那么最好还是

request="{details}"

试试看,知道。

答案 1 :(得分:0)

所以我最终使用Ravz的建议。我将服务定义更改为:

    <mx:operation id="postTableDetails" name="postTableDetails" resultFormat="e4x" result="event.token.resultHandler(event);" fault="event.token.faultHandler(event);">
    </mx:operation>

(添加了id并删除了请求。)然后在委托中,我将参数分配给:

service.postTableDetails.request = XMLList(
           "<ns0:postTableDetails xmlns:ns0=\"http://nslinkfromwsdl/\">" +
           "<catalog>"+cat+"</catalog>" +
           "<schema>"+schema+"</schema>" +
           "<table>" + table + "</table>" +
           details +
           "</ns0:postTableDetails>"
           );

这使它正常工作。我不想在那里硬编码那个链接,但我可以在另一天找到它!