2012-01-18 2 views
2

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

Пример Grails Код:

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

ответ

6

Наивный пример делать это с 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

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

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

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

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

Смежные вопросы