【问题标题】:Convery URL parameterst o XML in Mule ESB在 Mule ESB 中将 URL 参数转换为 XML
【发布时间】:2015-09-16 08:29:06
【问题描述】:

我有一个 REST 服务在后台调用 SOAP Web 服务的场景。我正在寻找一种使用 URL 中的一些参数来构造 XML 文件(将成为对 SOAP 的请求)的方法。

从 URL 获取调用

http://myurl/changeAddress?id=1001&name=Steve&salary=3

SOAP 网络服务的 XML 请求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:unk="http://unknown.namespace/">
   <soapenv:Header/>
   <soapenv:Body>
      <unk:changeAddress>
         <arg0>1001</arg0>
         <arg1>Steve</arg1>
      </unk:changeAddress>
   </soapenv:Body>
</soapenv:Envelope>

我已经试用了 MLE,并且能够从 URL 中提取键值对。但不确定如何从这些参数构造 XML。

任何指针将不胜感激。

【问题讨论】:

    标签: xml web-services soap mule mule-studio


    【解决方案1】:

    除了 Ryan 提到的另一种方法是直接使用 set-payload 您可以直接在 payload 中创建 SOAP 请求,并将 入站属性idname 在其中动态如下:-

     <set-payload value="&lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:unk=&quot;http://unknown.namespace/&quot;&gt;&lt;soapenv:Header/&gt;&lt;soapenv:Body&gt;&lt;unk:changeAddress&gt;&lt;arg0&gt;#[message.inboundProperties.id]&lt;/arg0&gt;&lt;arg1&gt;#[message.inboundProperties.name]&lt;/arg1&gt;&lt;/unk:changeAddress&gt;&lt;/soapenv:Body&gt;&lt;/soapenv:Envelope&gt;" doc:name="Set Payload"/>
    

    在创建 SOAP 请求时,这将是简单动态 所以,完整的例子如下:-

    <flow name="setSOAPRequestFlow">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/changeAddress" doc:name="HTTP"/>
    <set-payload value="&lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:unk=&quot;http://unknown.namespace/&quot;&gt;&lt;soapenv:Header/&gt;&lt;soapenv:Body&gt;&lt;unk:changeAddress&gt;&lt;arg0&gt;#[message.inboundProperties.id]&lt;/arg0&gt;&lt;arg1&gt;#[message.inboundProperties.name]&lt;/arg1&gt;&lt;/unk:changeAddress&gt;&lt;/soapenv:Body&gt;&lt;/soapenv:Envelope&gt;" doc:name="Set Payload"/>
    <logger level="INFO" message="#[message.payload]" doc:name="Logger"/>     
    </flow>  
    

    【讨论】:

    • 那非常混乱且难以维护。
    • 是的 .. 但您可以轻松创建它 .. 您只需将 SOAP 请求复制到 set-payload 并将入站属性放入 args .. 您可以更好地了解这一点来自图形流的数据,如果您选择 set-payload,您可以看到 SOAP 请求。无论如何,您可以使用您感觉更好的方法
    【解决方案2】:

    有很多选择。 XSLT、Jaxb 或 Datamapper 转换器。对于这个简单的用例,一种简单的方法是使用 Groovy 的 XML MarkupBUilder 或 MVEL 解析模板转换器:

    <scripting:transformer>
                <scripting:script engine="Groovy">
                    <scripting:text>
                        def writer = new StringWriter()
                        def xml = new groovy.xml.MarkupBuilder(writer)
    
                        xml.'soap:Envelope'('xmlns:soap':'http://schemas.xmlsoap.org/soap/envelope/') {
                            'soap:Body'{
                                'unk:changeAddress'('xmlns:unk':'http://unknown.namespace/'){
                                    'arg0'(message.inboundProperties.id)
                                    'arg1'(message.inboundProperties.name)
                                }
                            }
                        }
                        return writer.toString()
                    </scripting:text>
                </scripting:script>
            </scripting:transformer>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 2023-03-16
      • 1970-01-01
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多