How to consume WebServices with Groovy

Primeiro instale o sdk groovy na sua máquina, usando o tar (ou zip) fornecido em http://groovy.codehaus.org/Download e instale como descrito em http://groovy.codehaus.org/Tutorial+1+-+Getting+started.

Após estar tudo ok, você conseguirá abrir um console de linha de comando digitando groovysh ou um console gráfico digitando groovyConsole.

Para realmente comecar a consumir você deverá baixar um jar da página http://groovy.codehaus.org/GroovyWS [TODO: explicar para que servem cada jar] e coloca-lo em algum lugar do seu classpath. (que pode ser em $HOME/.groovy/lib — , em $GROOVY_HOME/lib)

Voce pode já comecar a consumir webservices em wsdl, mas o jeito mais facil de comecar a fazer testes é criar um servidor wsdl local — para faze-lo, comece criando uma
classe de servico simples como essa:

class SystemService {
String ifconfig(lan){
def interface_lan = (lan ? lan : “-a”)
“/sbin/ifconfig ${interface_lan}”.execute().text
}

String top(){
“top -bn1”.execute().text
}
}

Essa é uma classe simples com dois metodos, que retornam os comandos top e ifconfig na máquina local.
Para abrir seu servidor wsdl, simplesmente rode esse script no mesmo diretorio que voce criou a class SystemService:

import groovyx.net.ws.WSServer

def server = new WSServer()
server.setNode(“SystemService”, “http://localhost:8888/SystemService”)

Pronto! Seu servidor já está rodando e voce pode acessar os seu wsdl pela url http://localhost:8888/SystemService?wsdl

Para realmente ver a “mágica” groovy funcionar, abra um terminal digitando groovysh e digite os seguintes comandos:

import groovyx.net.ws.WSClient
proxy = new WSClient(“http://localhost:8888/SystemService?wsdl”, this.class.classLoader)
proxy.top()
proxy.ifconfig()
proxy.ifconfig(“eth0”)

Essas linhas fazem exatamente:

  1. Importa a classe necessaria para utilizar o webservice
  2. cria as classes proxy on-the-fly utilizando o wsdl
  3. Invoca o metodo top da classe SystemService definida acima na máquina do webservice server
  4. Faz a mesma coisa com o metodo ifconfig (tanto sem parametros, quanto passando uma interface

A mesma coisa pode ser feita com outros webservices como http://www.webservicex.net/CurrencyConvertor.asmx?WSDL que é um conversor de currency bem fiel.

(Nota:  para conseguir os códigos das moedas desse webservice, você terá que executar:

symbols = Thread.currentThread().getContextClassLoader().loadClass(“net.webservicex.Currency”)

c.values().each { println it }

Já que a classe Currency é uma enumeracao, logo não pode ser instanciada, e nem utilizada diretamente, já que todas as classes necessárias para o webservice ser consumido foram criadas em memória.)

(Nota 2: Caso você queira compilar seu webservice server, para que ela seja “portável”, utilize o comando: groovyc SeuScriptWebService. Para rodar a classe resultante, utilize java -classpath /path/para/o/arquivo/groovy-all-1.5.5.jar:/path/para/o/arquivo/groovyws-standalone-0.3.1.jar:. SeuScriptWebServiceCompilado )

Posted in groovy, technology | Tagged , | Leave a comment

the Holy Grails!

What’s it?

Well, Grails is a web-framework based on a JVM (Java Virtual Machine, or just VM that’s how Jonathan Schwartz, Sun’s CEO is calling it) scripting language called Groovy.

Groovy?

I think is better to start explaning what’s Groovy.

Groovy is an scripting language that adds powerful additions to Java language like virtual methods, meta-programming, closures and lot more!

Why Groovy?

Well, Groovy is an excelent tool for Java programmers. Why have i said JAVA PROGRAMMERS and not just PROGRAMMERS?
I know that you have already heard of Ruby (and Ruby on Rails), Python (and Turbo Gears/Django) or even Scala (and maybe Lift). They’re incredible powerful scripting languages, and their frameworks are as good as them.

But they’re not Java. Their syntax not even looks like Java.

Ok, they all have counterparts on (J)VM, but… it’s not the same as programming in our favorite language.

Well, now imagine all the power of those language in a Java syntax. That’s Groovy.

A class in Ruby looks like this:

class Person
attr_reader :name, :address

def initialize name,address
@name    = name
@address = address
end

def rent_a_new_house address
@address = address if address
end

def to_s
“Name:#{@name} — Address: #{@address}”
end

end

For an guy comming from Java, that’s hebraic.
Now, if i say this’s a Groovy class:

class Person implements Comparable{
String name
String address

String toString(){
“Name: ${this.name} — Address: ${this.address}”
}

int compareTo(other){
name?.compareTo(other?.name)
}
}

The same guy cannot say he cannot understand this.
It’s Java.
But it’s not.

It’s Groovy!

Groovy adds a thing to Java called code by convention, a thing that came a long time a go in a far language… (that, i have to be honest, i don’t remember the name)

If you look to that Person class, you will say:

Where are the privates?
Where are the getters and setters?
Where is the constructor?
And WTF is that ToString?

Imagine something like that:

Everytime you create a class on your IDE of choice, you have to declare each attribute private, and them, see which one of them needs a getter or a setter. Then, you create a toString, and equals.

That’s boring, and still, you have to do it.

With Groovy’s coding by covention, to declare an private attribute along with its getter and setter all you have to say is: String name. or int age.

That’s it.

I know that there’re other things on that class that are not Java.
I’ll explain those.

First, toString:

String toString(){
“Name: ${this.name} — Address: ${this.address}”
}

The first thing you will notice on that method is there’s no return statement.
(The other thing is the ${} thing.)

On Groovy, as on another languages, you don’t have to explicitly say return name — all you have to do is add the thing you and to return as the last line of your method, i.e.:

def getName(){
this.name //return name!
}

The other thing, the ${} thing is called GString expression and it’s just like an JSP EL or and JSF EL. The variable name inside the curly brackets will be resolved and the string will be a lot prettier than something like:

“Name: ” + name + ” Address : ” + address

And with the benefit of calling methods insed the #{}!

There’s a lot more with Groovy. Too much, i think so from now, that’s it.
For more info: http://groovy.codehaus.org/

Stay tuned!

Posted in technology | Tagged , , | Leave a comment

Adding Auto Complete to A Django-PyDev Project on Eclipse

Today i was trying to use eclipse 3.3 w/ pydev to develop an app with django, but i really couldn’t make the code-completion (the main reason (along with the debugger) i was using eclipse!).

The main thing problem was that i had to add ALL folders to the pydev project settings. And, i didn’t have time (and patience) to add one folder by one to the config screen, sooo, i created this script to do that for me:

#!/usr/bin/env python

import dircache, os

def listdr(_dir):
try:
dir_list  = dircache.listdir(os.path.realpath(_dir))
dir_list = [_dir + “/” + d for d in dir_list]
only_dirs = filter(lambda d: os.path.isdir(d), dir_list)

file = os.path.realpath(_dir)
print “<path>%s</path>” % file

for dir in dir_list:
listdr(dir)

except:
return

if __name__ == “__main__”:
listdr(“/usr/lib/python2.5/site-packages/django/”)

This script will show all folders under /usr/lib/python2.5/site-packages/django/ with that tags <path>, ready to add to the .pydevproject configuration file (that’s under your project file).

Posted in technology | Tagged , , , | 1 Comment

Japones é preso por ligar para companhia telefonica… 2 600 vezes.

Saiu na Folha.

O coitado do japônes é solteiro, tem 37 anos e tem o bilau orgao genital pequeno.

Obviamente ele não tem ninguém na vida, porque se aos 37 anos você ainda é solteiro, provavelmente é porque você é pobre. Ou chato. Ou ambos.

Alias, a reportagem disse que: “(Ele) tinha o hábito de ligar para o serviço por ele ser gratuito.” e que “O serviço de informação da NTT (a companhia telefonica) cobra apenas para informar números telefônicos, e não por conversar com seus clientes.”

Ok então.

Posted in funny | 1 Comment

Can You Find Chuck Norris?

chuck_norris

Para acessar essa página:
Entre em Google.com, digite find Chuck Norris e clique em “Estou com Sorte”

Achei excelente!

Vi em TecnoTrash

Posted in funny, technology | Tagged , | Leave a comment

Youtorrent.com

youtorrent.com

Eu sempre senti e sempre sentirei falta do Demonoid.com.

Pra quem não sabe, Demonoid era um site de torrent, fechado pela CRIA ano passado.Eu sempre preferi ele a o thePirateBay para torrents pelo simples motivo de que para acessa-lo, era necessario login. E a temporada de registro era aberta somente de tempos em tempos.

Pelo fato de ser necessario registro, sempre que voce fazia downloads/uploads seu ratio ficava guardado no seu perfil e toda vez que alguém ficava abaixo de um certo numero durante um tempo era simplesmente kickado do site.

Além disso, ele tinha uma colecão inigualavel de torrents… Eu achei lá a discografia do Postal Service, Neverwinter Nights For Linux, e a trilha sonora de The Legend of Zelda: Ocarina of Time.

Mas, como eu disse, o site foi fechado no ano passado.

Desde então, eu fiquei meio orfão — e tenho pulado de um site para o outro, mas nunca ficando fiel a um só.

Maas, hoje, saiu uma matéria no TorrentFreak.com falando de uma ferramente chamada YouTorrent.com.

O que ela faz?

Ela busca em 13 sites de torrents (dos mais conhecidos como Mininova.org e IsoHunt.com até os menos como LegitTorrents e myBittorrent) o que voce quiser e, eu posso dizer, que fiquei fascinado tanto pela velocidade da busca, quanto pela interface Web2.0/Ajax, que além de um logo de espera durante a busca, mostra em quais ferramentas ele já efetuou a busca, as frases relacionadas e as palavras mais buscadas.

Eu testei e consegui um cd do Rancid Live, e o ultimo show do Ramones, coisas que eu nunca tinha conseguido.

Segundo o blog deles, o site efetuou 150 000 buscas em 3 dias. Um numero realmente impressionante.

Eu recomendo muito

4 estrelinhas de 5.

Obs: O servico ainda é Beta, ok?

Posted in technology | Tagged , | 1 Comment

Ruby (Java, Python) or Not To Ruby (Java, Python)?

Eu sou um programador Java.
E eu tô me sentindo meio excluido do mundo.

Deixa eu explicar:

Eu sou programador Java a quase dois anos e sempre me senti feliz, contente e realizado com Java — continuo me sentindo assim, mas nos ultimos dois meses eu ando vendo como Java está se tornando um linguagem “ultrapassada” em relacão a outras.
Obviamente, eu não estou falando que Java é o novo Cobol.. longe disso. Eu só acho que a linguagem poderia se modernizar, mas sem perder a sua personalidade.

Um exemplo é a adicão de properties.
Outro, closures.

Mas eu não quero que Java fique parecendo um Ruby bombado.
Eu quero que Java seja Java.

Quero que a sintaxe seja a mesma de sempre, não algo como Groovy, que dizem que é Java, mas não parece com nada já visto.

E mais importante, eu quero um framework web poderoso e facil de usar.
Ok, eu não estou reclamando do JSF — eu adoro JSF.
E eu não quero algo como Database-Driven-Development; eu já tenho JPA e funciona perfeitamente.

O problema, é que desenvolver com JSF pode ser tornar um pé-no-saco, porque toda hora que voce quer alguma coisa, simplesmente ela não existe e quando existe, não funciona.
Ah! E eu não quero algo como Adobe Flex. Flex é Flash e cacete, eu não sou programador Flash.

Sou programador Java.

E não vou abandonar Java por qualquer outra linguagem.

Não que eu seja preconceituoso contra outras coisas… Recentemente eu aprendi Python e me senti em casa. É uma linguagem rápida e precisa e junto com Turbogears, fica extremamente fácil desenvolver .

(O resultado de três dias com TurboGears está aqui.)

Eu não vou abandonar Java por Ruby e nem por outra linguagem.
Porque eu não conheco uma linguagem de programacao tão forte, robusta e rápida como Java.

E tenho dito.

Technorati Tags: , , ,

Continue reading

Posted in technology | Tagged , , , | 1 Comment