Как избежать символов XML - PullRequest
0 голосов
/ 28 сентября 2018

Как перескочить "<" и ">", используя MEL или Dataweave?

Ниже исходного xml

<dem>
                <action dos="600" nom="infos_infinity">
                    <entite nom="GetAccount" lire_tout="oui">
                        <groupe_filtres op="ET">
                            <filtre op="OU">
                                <critere nom="Equal_TIERS">
                                    <param><![CDATA[C0000033]]></param>
                                </critere>
                                <critere nom="Equal_TIERS">
                                    <param><![CDATA[C0000016]]></param>
                                </critere>
                            </filtre>
                            <filtre op="ET">
                                <critere nom="Equal_DOS">
                                    <param><![CDATA[600]]></param>
                                </critere>
                            </filtre>
                        </groupe_filtres>
                        <tri nom="BY_PK" />
                    </entite>
                </action>
            </dem>

и ожидаемого XML

<web:param>&lt;dem&gt;
                &lt;action dos="600" nom="infos_infinity"&gt;
                    &lt;entite nom="GetAccount" lire_tout='oui'&gt;
                        &lt;groupe_filtres op='ET'&gt;
                            &lt;filtre op='OU'&gt;
                                &lt;critere nom="Equal_TIERS"&gt;
                                    &lt;param&gt;
                                        &lt;![CDATA[C0000033]]&gt;
                                    &lt;/param&gt;
                                &lt;/critere&gt;
                                &lt;critere nom="Equal_TIERS"&gt;
                                    &lt;param&gt;
                                        &lt;![CDATA[C0000016]]&gt;
                                    &lt;/param&gt;
                                &lt;/critere&gt;
                            &lt;/filtre&gt;
                            &lt;filtre op='ET'&gt;
                                &lt;critere nom="Equal_DOS"&gt;
                                    &lt;param&gt;
                                        &lt;![CDATA[600]]&gt;
                                    &lt;/param&gt;
                                &lt;/critere&gt;
                            &lt;/filtre&gt;
                        &lt;/groupe_filtres&gt;
                        &lt;tri nom="BY_PK" /&gt;
                    &lt;/entite&gt;
                &lt;/action&gt;
            &lt;/dem&gt;</web:param>

Я пытался использовать замену «<» на «<», но похоже, что dataweave может заменить только строки, так как я получил xml, он не работал. </p>

Есть ли способ преобразовать его без создания кода Javaили Groovy код?

1 Ответ

0 голосов
/ 02 октября 2018

Да, вы можете использовать MEL и установить входящую полезную нагрузку как строковое значение.Ниже приведен пример потока, но важной частью является компонент Set Payload с выражением MEL #[message.payloadAs(System.String)]

<flow name="/xml-encoding">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/xml-encoding" doc:name="HTTP"/>
    <set-payload value="&lt;dem&gt;
            &lt;action dos=&quot;600&quot; nom=&quot;infos_infinity&quot;&gt;
                &lt;entite nom=&quot;GetAccount&quot; lire_tout=&quot;oui&quot;&gt;
                    &lt;groupe_filtres op=&quot;ET&quot;&gt;
                        &lt;filtre op=&quot;OU&quot;&gt;
                            &lt;critere nom=&quot;Equal_TIERS&quot;&gt;
                                &lt;param&gt;&lt;![CDATA[C0000033]]&gt;&lt;/param&gt;
                            &lt;/critere&gt;
                            &lt;critere nom=&quot;Equal_TIERS&quot;&gt;
                                &lt;param&gt;&lt;![CDATA[C0000016]]&gt;&lt;/param&gt;
                            &lt;/critere&gt;
                        &lt;/filtre&gt;
                        &lt;filtre op=&quot;ET&quot;&gt;
                            &lt;critere nom=&quot;Equal_DOS&quot;&gt;
                                &lt;param&gt;&lt;![CDATA[600]]&gt;&lt;/param&gt;
                            &lt;/critere&gt;
                        &lt;/filtre&gt;
                    &lt;/groupe_filtres&gt;
                    &lt;tri nom=&quot;BY_PK&quot; /&gt;
                &lt;/entite&gt;
            &lt;/action&gt;
        &lt;/dem&gt;" mimeType="text/xml" doc:name="Set Payload"/>
    <set-payload value="#[message.payloadAs(System.String)]" doc:name="Set Payload"/>
    <dw:transform-message doc:name="Transform Message">
        <dw:set-payload><![CDATA[%dw 1.0
            %output application/xml
            ---
            {
                'web:param': payload
            }]]></dw:set-payload>
    </dw:transform-message>
</flow>
...