Alguém aqui manja de Ruby + SOAP (Soap4R)?

Alguém aqui saberia consumir o seguinte serviço utilizando Soap4R ? http://saoj-office.dyndns.org:8080/ts?wsdl

O serviço está no ar, então fique a vontade para consumi-lo e me mostrar o código que vc utilizou para conseguir essa proeza.

Segue o post completo:

O meu serviço está aqui para qualquer um acessar: http://saoj-office.dyndns.org:8080/ts?wsdl

Quero consumi-lo (acessá-lo) usando Ruby (Soap4R).

O trivial eu consigo, mas quando chamo os métodos com parâmetros não funciona. Quando tenho que passar um Objeto User então não funciona nem a pau.

Alguém experiente com WebServices + Ruby pode dar uma luz?

Veja o meu código abaixo:

require 'rubygems'
gem 'soap4r'
require 'soap/wsdlDriver'

url = 'http://saoj-office.dyndns.org:8080/ts?wsdl'
service = SOAP::WSDLDriverFactory.new(url).create_rpc_driver
puts service.sayHello(nil).m_return # OK
puts service.sayHelloTo("Sergio").m_return # Does not work
u = service.getUserFromEmail("s...@saoj.com").m_return # OK
puts u.username
# Como envio um objeto User para o método sayHelloToUser ???

c:\eclipse\workspace\HelloWS\ruby>ruby client.rb
Hi there! Now is: Tue Jun 16 16:12:09 BRT 2009
Hi null! Now is: Tue Jun 16 16:12:09 BRT 2009
saoj

Problemas:

  • Veja o Hi null acima (segunda linha do output)
  • Como envio o objeto User no método sayHelloToUser ???

Bom, o serviço está online. Vamos ver se tem alguém bom aqui que consegue consumi-lo em Ruby. hehehe (apenas para motivar)

Implementação do serviço em Java (servidor):

package ws.hello;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.jws.WebService;

@WebService(endpointInterface = "ws.hello.Hello")
public class HelloImpl implements Hello {
	
	public String sayHello() {
		return "Hi there! Now is: " + new Date();
	}
	
	public String sayHelloTo(String to) {
		return "Hi " + to + "! Now is: " + new Date();
	}
	
	public String sayHelloToUser(User user) {
		return "Hi " + user.getUsername() + "! Now is: " + new Date();
	}
	
	public User getUserFromEmail(String email) {
		// pretend you went to the database and found the user...
		return new User("saoj", email);
	}
	
	public List<User> getAllUsers() {
		// pretend you went to the database and fetched all users...
		List<User> list = new ArrayList<User>(2);
		list.add(new User("saoj", "saoj@saoj.com.br"));
		list.add(new User("azenha", "rubem@azenha.com.br"));
		
		return list;
	}
}

Putz tem que usar os objetos gerados automaticamente como parâmetro…

Consegui aqui depois de 3 horas… :frowning:

Ex: para o método sayHello() que não tem nenhum parametro ele gera um objeto SayHello que vc precisa instanciar e passar como parametro.

Para todo método vc tem que fazer isso… O problema é que eu não sabia disso… :frowning:

A quem interessar possa:

http://blogs.mentaframework.org/posts/list/14404.page#370798

Fala sérgio blz? Muito legal o tutorial , atualmente estou estudando o livro do Nicolai SOA in practice, e ver código assim funcionando ajuda muito a absorver os conceitos por trás da SOA.