передача аргументов в замыкание для StreamingMarkupBuilder

Groovy 2.4, Весна 5.3.13

Не повезло с использованиемStreamingMarkupBuilderсоздать некоторый XML, сериализовать его и распечатать

      public void createMsgToStreamOut( String strCreatedAt, String strEntity, String strIdNum, String strEvent) {
    def streamBuilder = new StreamingMarkupBuilder();
    streamBuilder.encoding = "UTF-8"
    def xml = streamBuilder.bind{ strCreatedAt, strEntity, strIdNum, strEvent -> 
        >> some magic goes here
    }
    def xmlStr = XmlUtil.serialize( xml)
    println xmlStr;
}

createMsgToStreamOut( "2022-09-10T12:13:14.567", "Matter", "907856", "create");

должен дать

      <?xml version="1.0" encoding="UTF-8"?>
<message>
  <timestamp>2022-09-10T12:13:14.567</timestamp>
  <entity>Matter</entity>
  <number>907856</number>
  <event>create</event>
</message>

Следующим шагом является потоковая передача вывода производителю Kafka.

1 ответ

Магия, которую вы ищете, выглядит так, я полагаю:

      def xml = streamBuilder.bind {
    message {
        timestamp(strCreatedAt)
        entity(strEntity)
        number(strIdNum)
        event(strEvent)
    }
}

Вот полностью рабочий скрипт:

      import groovy.xml.*

createMsgToStreamOut( "2022-09-10T12:13:14.567", "Matter", "907856", "create");

void createMsgToStreamOut(String strCreatedAt, String strEntity, String strIdNum, String strEvent) {
    def streamBuilder = new StreamingMarkupBuilder();
    streamBuilder.encoding = "UTF-8"
    def xml = streamBuilder.bind {
        message {
            timestamp(strCreatedAt)
            entity(strEntity)
            number(strIdNum)
            event(strEvent)
        }
    }
    def xmlStr = XmlUtil.serialize( xml)
    println xmlStr;
}

Дайте мне знать, если это поможет.

Другие вопросы по тегам