четверг, 29 октября 2009 г.

Groovy and XML

К языку Groovy присматриваюсь давно. Очень удобный язык для программиста, который всю жизнь писал на Java. И синтаксис такой же, и работает под старой-доброй виртуальной машиной, и осваивать его через это легко. А тут - очередное задание. Надо приготовить XML определённой структуры. Должен признаться, что создание XML в Java - дело достаточно простое, да вот только скучное и рутинное. А нельзя ли для этого использовать Groovy? Конечно можно! Код получается довольно красивым и изящным.
Смотрим:

package test
import groovy.xml.StreamingMarkupBuilder

/**
* Created by IntelliJ IDEA.
* User: andrei nikulin
* Date: 29.10.2009
*/
class XmlCreator
{
void create()
{
String dtdDeclaration = '''<!DOCTYPE InboundRequest [>!ELEMENT InboundRequest (APIHeader, BusinessObject)>
<!ENTITY % APIHeader SYSTEM "http://apifw//xml/APIHeader.Inbound.Request.V060000.dtd">%APIHeader;
<!ENTITY % BusinessObject SYSTEM "http://apifw//xml/WorkOrder.Read.Request.V060000.dtd">%BusinessObject;]>
'''
StreamingMarkupBuilder xml = new StreamingMarkupBuilder( )
xml.encoding = "UTF-8"

String s = xml.bind
{
mkp.xmlDeclaration()
mkp.yieldUnescaped( dtdDeclaration)

InboundRequest
{
APIHeader(ReplyTypeOK:"A", ReplyTypeError:"N")
{
apiAPIVersion("V060000")
apiBusinessObject("WorkOrder")
apiBusObjectMethod("Read")
apiBusObjectVersion("V060000")
apiUserID("")
apiExtSystemID("")
apiExtRequestID("")
apiRoutingInfo("")
}
BusinessObject
{
WoHeader
{
ExtSystemId()
ExternalKey()
WorkOrderNbr("00211997")
SubMethod()
WoTaskHeader
{
WorkOrderTask("01")
}
}
}
}
}

System.out.print s
}


public static void main(String [] args)
{new XmlCreator().create() }
}


Проблема Groovy - из рук вон плохая документация. ДжаваДок, который идёт вместе с дистрибутивом - практически бесполезен. Такое чувство, что создатели Groovy даже комментариев не пишут. А так - вполне себе жизнеспособный язык.
Статья о том, как работать в Groovy с XML-ом.

Комментариев нет:

Отправить комментарий