Зацикливание и проверка данных Weaver с использованием ESB mule

Я попытался реализовать простой цикл, проверив значение null для переменной и установив результат.

Моя порция мулового потока выглядит так, как показано ниже.

База данных (выберите) -> Преобразовать сообщение (DataWeave- преобразовать в xml)

База данных имеет значение, как показано ниже:

Book1 Book2 Book3 Book4 Book5
abc   cde   fgh   ijk   lmn
opq   rst   NULL  NULL  NULL

Код Dataweaver выглядит следующим образом:

ns0#LibraryDetails:{
                ns0#User: payload."Book1",
                ns0#User: payload."Book2",
                ns0#User: payload."Book3",
                ns0#User: payload."Book4",
                ns0#User: payload."Book5"
            }

Ожидаемый результат1

<LibraryDetails>
   <User>abc</User>
   <User>cde</User>
   <User>fgh</User>
   <User>ijk</User>
   <User>lmn</User>
</LibraryDetails>

Ожидаемый результат 2

<LibraryDetails>
   <User>opq</User>
   <User>rst</User>
</LibraryDetails>

Как мы можем избежать только нулевых значений и создания цикла в переплетении данных. Я также попробовал функцию карты. Не могли бы вы пролить свет на это.


person Simbu    schedule 16.01.2016    source источник


Ответы (2)


Чтобы получить ожидаемый результат, используйте map, а затем skipNullOn="everywhere", если вы хотите, чтобы эта логика использовалась для всех элементов. Следующее дает мне ваш ожидаемый результат

%dw 1.0
    %output application/xml skipNullOn="everywhere"

    %namespace ns0 http://something.com
    ---

    ns0#LibraryDetails: { (payload map {
          ns0#User: $.Book1,
          ns0#User: $.Book2,
          ns0#User: $.Book3,
          ns0#User: $.Book4,
          ns0#User: $.Book5
    } )  }
person Ryan Carter    schedule 16.01.2016

Вы можете попробовать это:

ns0#LibraryDetails:{
                ns0#User: when null != payload."Book1" then payload."Book1" ,
                ns0#User: when null != payload."Book2"then payload."Book2",
                ns0#User: when null != payload."Book3"then payload."Book3",
                ns0#User: when null != payload."Book4"then payload."Book4",
                ns0#User: when null != payload."Book5"then payload."Book5"
            }

Иначе: используйте инструкцию beow:% output application / xml skipNullOn = "везде"

person ShravanthiBhaskara    schedule 16.01.2016
comment
Вышеупомянутое решение не работает для меня. ns0#User: when null != payload."Book1" then payload."Book1", Multiple markers at this line - Invalid input 'n', expected is, *, <=, replace, zip, map, <, >=, as, or, >>, ~=, attributes, -, filter, mapObject, ==, +, !=, :, pluck, and, / or > - no viable alternative at input 'then' - person Simbu; 17.01.2016