WSO2 EI новый xml-тег с использованием медиатора Enrich и при динамическом использовании xml-тега

#wso2 #wso2esb #wso2ei #ei

Вопрос:

Можно ли добавить новый xml-тег в полезную нагрузку xml с помощью посредника enrich.

мой образец полезной нагрузки —

 <courses>
   <id>181</id>
   <formatted_name>Learning</formatted_name>
   <score>0</score>
   <status>in_progress</status>
   <issued_certificate />
   <from_timestamp>1626083705</from_timestamp>
   <to_timestamp />
</courses>
 

Новый тег будет

 <link> www.google.com </link>
 

Я не могу использовать inline в качестве источника, так как ссылка берется динамически.
Поэтому я добавляю новый тег в полезную нагрузку, а затем в свойство.

 <payloadFactory media-type="xml">
    <format>
        <link xmlns="">$1</link>
    </format>
    <args>
        <arg evaluator="xml" expression="get-property('login_link')"/>
    </args>
</payloadFactory>
<property description="Get login link payload" expression="//root/*" name="login_link_xml" scope="default" type="STRING"/>
// get original payload back
<enrich description="Restore original payload">
    <source clone="false" property="course_payload" type="property"/>
    <target type="body"/>
</enrich>
// assign property as a new node inside the courses
<enrich>
    <source clone="true" property="login_link_xml" type="property"/>
    <target action="child" type ="custom" xpath="//courses"/>
</enrich>
 

Это дает ту же полезную нагрузку после обогащения

Ответ №1:

Вы можете сделать это немного по-другому. Создайте свой » тег » как тип свойства OM, используя выражение xpath и функцию: concat, с закодированным символом

 <property name="my_link" value="devintegra.com" scope="default" type="STRING"/>
<property name="linkNode" 
          type="OM" 
          expression="concat('amp;<linkamp;>',get-property('my_link'),'amp;</linkamp;>')" 
          scope="default" />
        
 

И с помощью этого свойства вы можете обогатить свое тело:

 <enrich>
  <source type="property" clone="true" property="linkNode"/>
  <target action="child" xpath="//courses"/>
</enrich>
 

Это должно сработать так, как вы ожидаете.