WebService: funciona OK, as vezes não

[size=24][/size]
Olá pessoal!

Bom, já encontrei a solução para muitos problemas por aqui no GUJ, agora é minha vez de perguntar! :smiley:

Estou finalizando um sistema que posteriormente será locado para clientes. Esse sistema funcionará com licensa de uso a ser paga mensalmente. Para controlar quem paga e quem deixa de pagar (restringindo o acesso aos inadimplentes) utilizaremos um webService que faz uma consulta simples e retorna um Boolean correspondente à disponibilidade do sistema para uso por determinado usuário.

Código para Login.jws:

public class Login {
	public Boolean autoriza(String username, String senha){
	System.out.println("tentando logar: "+System.currentTimeMillis());
		if (username.equals("francisco") && senha.equals("fracisquinho")){
			System.out.println("logado: "+System.currentTimeMillis());
			return new Boolean(true);
		}
		System.out.println("erro login: "+System.currentTimeMillis());
		return new Boolean(false);
	}

}

Instalei o pacote axi no TomCat 5.5, implementei a classe do webService (Login.java), a renomeei para Login.jws. Fiz o teste do webService. Funciona perfeitamente, tanto em uma aplicação java simples do Eclipse puro quanto em um projeto Dinâmico da Web (Rational Software Architect), rodando em WAS.

Código para UseWS.java (cliente):

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class UseWS {
	public static void main(String[] args) {
		autorizado();//
	}
	
	public static boolean autorizado() {
		try {
			String urlWS = "http://192.168.0.44:8080/axis/Login.jws";
			Object[] params = { new String("francisco"), new String("fracisquinho") };
			Service service = new Service();
			Call call = (Call) service.createCall();
			call.setTargetEndpointAddress(urlWS);
			call.setOperationName("autoriza");
			Boolean ret = (Boolean) call.invoke(params);
			System.out.println("Resultado: " + ret);
			return ret.booleanValue();
		} catch (Exception ex) {
			ex.printStackTrace();
			return false;
		}
	}
}

Porém, quando importo a classe cliente da aplicação Java simples para o projeto do eclipe puro que contém o sistema que irá chamar o webService (no caso é um sistema J2SE, interface SWING, conexão a banco DB2), ele não funciona. É feita a conexão com o servidor do web service (gera log no TomCat), porém não chega a acessar o corpo do método. Importei corretamente todos os jars de cliente do axi exigidos, e tudo mais. Cheguei até a importar os jars activation e mail para parar de dar a mensagem de warning (e parou). Porém, o web service mesmo, que interessa, continua retornando null…

Saída gerada pelo cliente quando rodado em um projeto eclipse separado:

Resultado: true

Saída gerada pelo cliente quando rodado em no projeto do aplicatovo:

Resultado: null

*Obs: já tentei exportar o projeto java separado para um jar (utilizando fatJar), importá-lo para o projeto do sistema (mesmo resultado) e também incluir o projeto java separado dentro do build path do projeto do sistema (mesmo resultado).
:cry:

Já considerou utilizar REST para seus WebServices?
Levando em conta que isso será locado para os clientes, vai te poupar muuuuuuuita dor de cabeça.

Bom cara, na verdade não… onde entra o REST? no lugar do AXI??

Vou fazer uma pesquisa sobre isso em breve para ver, mas se você tiver algo já mais rápido para indicar, agradeço!!!

:idea:

Axis2 já suporta requisições ‘REST’, CXF você implementar serviços REST, tem alguns outros frameworks: Restlet, Jboss RestEasy, Jersey.

Bom, resolvi o problema, pelo menos pra minha aplicação. Removi um Jar do classpath (gnujaxp.jar), e agora não há mais problemas em conexão. Possivelmente esse jar servia pra alguma coisa, mas pelo menos em tempo de compilação e execução básicas não encontro problema.

Mas, claro, se ela estava ali, era por alguma razão. A pergunta que fica agora é a seguinte:

Já que tenho rodando meu web service em um servidor TomCat com Axi, há algum outro conjunto de jars para o cliente (sem ser os do Axi) para poder acessar esse web service? Digo isso porque acredito que esteja acontecendo um problema entre o jar do axi e o gnujaxp.jar… E realmente não pretendo deixar a aplicação seguir pra produção sem esse jar… arriscado demais, já que o sistema é um tanto quanto grande e é quase impossível saber ao certo a que parte dele esse jar se refere…

Bom, por enquanto é só.

Att, Cristiano

Estou com este mesmo problema. Web service, axis.jar e gnujaxp.jar conflitando.
Não posso simplismente excluir o gnujarxp.jar

Alguém sabe a solução??