Как конвертировать pojo в xml, используя ключевое слово «as» - PullRequest
2 голосов
/ 18 января 2012

У меня есть требование отправить объект в виде xml на веб-сервис.У меня уже есть Pojo, теперь мне нужно преобразовать его в XML с помощью Groovy.В Grails я использовал ключевое слово as. Какой эквивалентный код используется для этого в Groovy?

Пример кода Grails:

import grails.converters.*
render Airport.findByIata(params.iata) as XML

Ответы [ 2 ]

6 голосов
/ 18 января 2012

Наивным примером выполнения этого с StreamingMarkupBuilder будет:

class Airport {
  String name
  String code
  int id
}

Writable pogoToXml( object ) {
  new groovy.xml.StreamingMarkupBuilder().bind {
    "${object.getClass().name}" {
      object.getClass().declaredFields.grep { !it.synthetic }.name.each { n ->
        "$n"( object."$n" )
      }
    }
  }
}

println pogoToXml( new Airport( name:'Manchester', code:'MAN', id:1 ) )

Который должен напечатать:

<Airport><name>Manchester</name><code>MAN</code><id>1</id></Airport>
1 голос
/ 18 января 2012

Ключевое слово as фактически является частью спецификации языка Groovy.Часть, которую вам не хватает, это класс XML, который выполняет преобразование.На самом деле это просто модный класс, который прогуливает POJO и пишет XML (возможно, с использованием MarkupBuilder).

Groovy не имеет встроенного класса, такого как grails.converters.XML, который делает его таким простым.Вместо этого вам нужно будет вручную создать XML, используя MarkupBuilder или StreamingMarkupBuilder.

. Ни один из них автоматически не преобразует POJO или POGO в XML, вам придется либо обрабатывать это самостоятельно вручную, либо использовать отражение для автоматизации процесса.

Я бы предположил, что вы можете скопировать конвертер grails, но он может иметь много зависимостей.,Тем не менее, это открытый исходный код, который может стать отправной точкой, если вам нужен более многократно используемый компонент.

...