dúvida ao acessar webservice através do ksoap

Construí um aplicativo J2ME que consome um webservice (servidor GlassFish 2.1.1). O servidor está funcionando, já testei!

São enviados 3 parâmetros ao método (int, int e String) e é retornado um único parâmetro String. Estou utilizando ksoap.

Pergunta: para enviar os três parâmetros, está correta a minha lógica nas linhas 8, 9 e 10 ? Ou tenho de passar tudo de uma vez? Por aqui assim, não está dando certo, está retornando null (tfLogin e tfSenha são TextFields)

[code]
class ConnectionThread extends Thread {

    public void run() {
        try {
            Integer wlogin = Integer.valueOf(getTfLogin().getString());
            SoapObject soapObject = new SoapObject("http://192.168.0.118:8080/ServiceSBBeanService/Service?wsdl", "login");

            soapObject.addProperty("arg0", Integer.valueOf(tfLogin.getString()));
            soapObject.addProperty("arg1", Integer.valueOf("0"));
            soapObject.addProperty("arg2", tfSenha.getString());
            
            HttpTransport httptransport = new HttpTransport("http://192.168.0.118:8080/ServiceSBBeanService/Service?wsdl", "login");
            
            String result = (String) httptransport.call(soapObject);

            System.out.println(result);
        } catch (IOException ex) {
            ex.printStackTrace();
            System.out.println("Erro: " + ex.getMessage());
        }

    }

}[/code]

Seria por que o ksoap só aceita parâmetros String?

[quote=dsavia] soapObject.addProperty("arg0", Integer.valueOf(tfLogin.getString())); soapObject.addProperty("arg1", Integer.valueOf("0")); soapObject.addProperty("arg2", tfSenha.getString()); }[/quote]

os parametros do ksoap é um Object e tem que estar de acordo com o o seu WebService.
Os parametros tem que estar na ordem e no tipo do Object iguais ao seu metodo que recebe no webservice.

Qual versão do ksoap voce esta utilizando ?

[quote=godinez]os parametros do ksoap é um Object e tem que estar de acordo com o o seu WebService.
Os parametros tem que estar na ordem e no tipo do Object iguais ao seu metodo que recebe no webservice.
[/quote]

godinez, estou meio confuso em relação ao que vc disse, preciso enviar três parâmetros ao webservice para obter um retorno String. O webservice espera receber três parâmetros do tipo, int, int e String… Conceitualmente falando, o que significa converter um int em um object? ou um String em object? object também é um tipo de dado? :roll:

int é um tipo primitivo, Integer é um Object, então você deve trabalhar com enviar e receber um Integer e não um int.
Para “facilitar”, envie e receba String, ai dentro do seu metodo você converte para o tipo que precisar.

[quote=godinez]int é um tipo primitivo, Integer é um Object, então você deve trabalhar com enviar e receber um Integer e não um int.
Para “facilitar”, envie e receba String, ai dentro do seu metodo você converte para o tipo que precisar.[/quote]

Putz, entendi! Fui reler meu livro e agora entendi, String não é primitivo, é object! Erro de principiante. Enfim, alterei tudo para String, e o webservice agora recebe os três parâmetros como String também. Porém, continua apresentando problema. Vejam como ficou o código:

[code] class ConnectionThread extends Thread {

    public void run() {
        try {
            Integer wlogin = Integer.valueOf(getTfLogin().getString());
            SoapObject soapObject = new SoapObject("http://192.168.0.118:8080/ServiceSBBeanService/Service?wsdl", "login");
           
            soapObject.addProperty("arg0", tfLogin.getString());
            soapObject.addProperty("arg1", "0");
            soapObject.addProperty("arg2", tfSenha.getString());
            
            HttpTransport ht = new HttpTransport("http://192.168.0.118:8080/ServiceSBBeanService/Service?wsdl", "login");
           
            String result =  String.valueOf(ht.call(soapObject));
            
            System.out.println(result);

        } catch (IOException ex) {
            ex.printStackTrace();
            System.out.println("Erro: " + ex.getMessage());
        }

    }

}

[/code]

Ao executar, surge o erro:

[color=red]org.ksoap.SoapFault
at org.ksoap.transport.HttpTransport.call(HttpTransport.java:269)
at LojistaMopis$ConnectionThread.run(LojistaMopis.java:802)
Erro: null
[/color]

O webservice está funcionando, testei com http://192.168.0.118:8080/ServiceSBBeanService/Service?tester e rodou perfeitamente no browser. Porém, será que o caminho do webservice é mesmo aquele que está no código-fonte? Utilizei tomcat axis uma vez num outro teste e o caminho era com extensão jws no final do path… ou não tem nada a ver?

qual versãao do ksoap voce esta utilizando ?

quando voce chama http://192.168.0.118:8080/ServiceSBBeanService/Service?tester, aparece o xml do webservice?

tente chamar com http://192.168.0.118:8080/ServiceSBBeanService/Service.jws?wsdl

se não der certo, tente com a versão mais recente do ksoap2, a 2.1.2.

e tente assim:

   class ConnectionThread extends Thread {
	
	public void run() {  
	    try {  
		SoapObject soapObject = new SoapObject("", "login");//login = nome do metodo
		SoapSerializationEnvelope envelope = null;
		
		//lembrando que voce tem que receber 3 String no metodo webservice!
		soapObject.addProperty("arg0", tfLogin.getString());  //param 1
		soapObject.addProperty("arg1", "0");  //param 2
		soapObject.addProperty("arg2", tfSenha.getString());  //param 3
		
		envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
		envelope.setOutputSoapObject(soapObject);
		
		HttpTransport httptransport = new HttpTransport("http://192.168.0.118:8080/ServiceSBBeanService/Service.jws?wsdl");  
		httptransport.call("", envelope);
		
		String result = (String) envelope.getResponse();   
		
		System.out.println(result);  
	    } catch (IOException ex) {  
		ex.printStackTrace();  
		System.out.println("Erro: " + ex.getMessage());  
	    }  
	}  
    }

[quote=godinez]qual versãao do ksoap voce esta utilizando ?

[/quote]

Vou olhar qual a versão e posto, mas acredito ser a ultima, baixei faz duas semanas…

um amigo me disse q o problema pode ser pq o webservice está utilizando “complex types” e o ksoap pode não trabalhar bem com isso. Será q essa informação procede?

[quote=dsavia][quote=godinez]qual versãao do ksoap voce esta utilizando ?

[/quote]

Vou olhar qual a versão e posto, mas acredito ser a ultima, baixei faz duas semanas…

um amigo me disse q o problema pode ser pq o webservice está utilizando “complex types” e o ksoap pode não trabalhar bem com isso. Será q essa informação procede? [/quote]

pelo que eu sei, pode ser isso apenas se você trabalhar com tipos de dados que normalmente são uma coleção, um BEAN, Array por exemplo.
Nesse caso, você só esta trabalhando com String, acredito que não seja esse o problema.

Com qual webservice você está trabalhando ?

GlassFish 2.1