2012-01-18 32 views
2

我有一个要求将xml发送到webservice的对象。我已经有了pojo,现在我需要使用Groovy将其转换为xml。在Grails中我使用了as关键字,在Groovy中做什么等效代码?如何使用“as”关键字将pojo转换为xml

实施例的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这样的内置类,使它变得如此简单。相反,您需要使用MarkupBuilderStreamingMarkupBuilder手动构建XML。

这些都不会自动将POJO或POGO转换为XML,您必须自己手动处理,或者使用反射来自动化处理。

我建议你或许可以复制grails转换器,但它可能有很多依赖关系。不过,它是开源的,如果你需要一个更可重用的组件,这可能是一个起点。