StreamingMarkupBuilderでXML宣言を出力

前回のg*workshopでは「StreamingMarkupBuilderはXML宣言を出力してくれない」と言いましたが、実はありました。id:kskyさんからTwitterでやりかたを教えていただきましたのでメモ。

import java.nio.charset.*
import groovy.xml.*

def xml = new StreamingMarkupBuilder().bind{
  mkp.xmlDeclaration()
  message("Hello World")
}

def writer = new OutputStreamWriter(System.out, Charset.forName('UTF-8'))
writer << xml

これで、

<?xml version="1.0" encoding="UTF-8"?>
<message>Hello World</message>

が出力されます。encodingのところは、ちゃんと出力先Writerのencodingにあわせて出力されるようです。
調べてみたら、ここにも情報ありましたね。。。調査不足でした。
http://www.ibm.com/developerworks/jp/java/library/j-pg05199/