logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!

Groovy XmlSlurper & invokeMethod

Colocado por DClick Team na(s) categoria(s): 1, 4, 6, api, AR, arte, bar, BI, blog, class, demo, email, exemplo, for, html, IE, int, Java, Javascript, lista, lite, O, on, print, pt, rails, RIA, Ria’s Geral, ruby, string, TAT, Twitter, XML em 03 30th, 2010 | Sem comentários

Twitter!

Grande parte do dinamismo do groovy se deve ao invokeMethod. Quando declarado, este método será executado caso um método inexistente for chamado, no objeto em questão. (Method missing no Ruby ou Python).

“invokeMethod(String name, Object args) is at the heart of Groovy metaprogramming.” – Groovy Recipes

Vamos ao exemplo:

PLAIN TEXT
CODE:

  1. class Sample {
  2.     Object invokeMethod( String name, Object params ) {
  3.         println “method ${name} with params ${params}”
  4.     }
  5. }

Podemos agora chamar qualquer método em um objeto Sample:

PLAIN TEXT
CODE:

  1. def sample = new Sample()
  2. sample.anything “arg1″, “arg2″

E devido ao “method missing” do groovy, podemos navegar em um XML de forma elegante usando o XmlSlurper (navegação semelhante ao E4X):

PLAIN TEXT
CODE:

  1. def xml = “”“
  2. <users>
  3.     <user id=”1“>
  4.         <name>Bruno</name>
  5.         <email>bruno.fuster@dclick.com.br</email>
  6.     </user>
  7.     <user id=”2“>
  8.         <name>Fuster</name>
  9.         <email>bruno.fuster@dclick.com.br</email>
  10.     </user>
  11. </users>
  12. ““”
  13.  
  14. def users = new XmlSlurper().parseText(xml)
  15.  
  16. users.user.each {
  17.     println it.@id
  18.     println it.name
  19. }

Também poderiamos utilizar bibliotecas Java (XStream, JDOM, etc) para serializar objetos para XML e vice-versa, mas vamos brincar com groovy agora para obter uma lista de objetos:

PLAIN TEXT
CODE:

  1. def objects = users.user.collect { xmlUser ->
  2.      new User(id: xmlUser.@id, name: xmlUser.name, email: xmlUser.email)
  3. }

E serializar objetos para XML/JSON fica fácil com grails.converters e content negotiation:

PLAIN TEXT
CODE:

  1. import grails.converters.*
  2.     …
  3.     def list = {
  4.         withFormat {
  5.             xml(contentType:“text/xml”) {
  6.                 render User.list() as XML
  7.             }
  8.             json(contentType:“text/json”) {
  9.                 render User.list() as JSON
  10.             }
  11.         }
  12.     }
  13.     …

Produtivo, não ?



Veja o post original no blog do autor aqui!  

DClick Team

Escrito por DClick Team @ http://blog.dclick.com.br/pt/
Saiba mais sobre o autor na sua pagina de perfil
Outros posts do autor:
» Hello World iPhone
» JodaTime – Java Date que funciona!
» Adobe Max 2009: Flash Multitouch

Deixe um comentário



Spam Protection by WP-SpamFree

ACERCA

O que é o RedeRIA ?

O redeRIA não é nada mais que um agregador de feed's que disponibiliza o conteudo de varios blogs e autores ao redor do mundo RIA, actualmente agregamos mais de 2795 entradas vindas de 53 blogs especializados em ria’s, pelo que só fica a ganhar em assinar o feed ou seguir a comunidade no twitter.

Se acha que o seu blog ou um blog de um amigo é interessante e util para os leitores o redeRIA, faça a sua submissão aqui.

Feed: assine já
Twitter: siga-nos

GOOGLE

Votação


Deveria o RedeRia agregar conteúdo em inglês?
Ver Resultados

AUTORES


Eduardo KrausAlexandre TadashiBindableCognitiva SoluçõesDaniel LopesDaniel SchmitzDanielPedrinhaDClick TeamEbercomEdgard DavidsonElvis FernandesErko BrideeFabiel PrestesFábio Batista da SilvaFabio da SilvaFabriccio BernardesFelipe BorellaFlavia MoreiraGabriel VersalliniGabriela T. PerryIgor MusardoJanderson CardosoJoão AugustoJose Carlos FielKelps SousaLeonardo FrançaLucas MarçalLuis MessiasLuiz TarabalMario JuniorMário SantosMauro MartinsPablo SouzaPedro ClaudioreneRia BrazilriaPTRicardo CerqueiraRobson FernandesRodrigo Pereira FragaSaintBrSamuelFacchinelloSergio SouzaSilva DeveloperStefan HorochovecTech CaffeTecinforThiago BuenoVedVinícius SandimWillian ManoXAML Cast

PUBLICIDADE








Powered by Wordpress & msdevstudio.com