Ajuda - Celular conectando com WS no Apache Tomcat Axis2

0 respostas
F

Olá,

Estou tendo problemas ao consumir um Web Service.

Primeiramente eu quero dizer que tenho acesso tanto à aplicação quanto ao Web Service.

Estou utilizando o Apache Axis2 como servidor e a aplicação está sendo desenvolvida em J2ME.

Vamos ao que interessa.

Meu Web Service é composto por uma classe chamada ?DBConnect?. Dentro dela há alguns métodos, dentre eles:

Faz a conexão com o banco de dados.

public String connect(String banco, String user, String senha) {
        try {
            Class.forName("com.ibm.db2.jcc.DB2Driver");
            String connecturl = "jdbc:db2://localhost:50001/"+ banco;
            con = DriverManager.getConnection(connecturl, user, senha);
            return "Sucesso";
        } catch (ClassNotFoundException ex) {
            return "Erro, classe não encontrada" + ex.getMessage();
        } catch (SQLException e) {
            return "SQL Exception: "+ e.toString();
        }
    }

Efetua uma consulta.

public int[] executa(String coluna) {
        try {
            stmt = con.createStatement();
            res = stmt.executeQuery("select "+coluna+" from MEDIDAS order by datahora desc fetch first 20 rows only");
            int[] dados = new int[20];
            int i=0;
            while(res.next()) {
                int dado = res.getInt(coluna);
                dados[i] =  dado;
                i++;
            }
            return dados;
        } catch (SQLException ex) {
            return new int[] {0};
        }
    }

E faço um outro teste.

public String nome(String nome) {
        return "O nome eh: " + nome;
    }

O código completo do WS pode ser encontrado aqui!

Após publicar o Web Service, eu consigo gerar o seguinte WSDL em http://IP_ADDRESS:8080/axis2/services/DBConnect?wsdl:

Veja AQUI (pdf).

Ao acessar o endereço http://IP_ADDRESS:8080/axis2/services/DBConnect/connect?banco=bd&user=user&senha=pass e executar um método do WS no browser, eu recebo a seguinte resposta:

<ns:connectResponse>
<ns:return>Sucesso</ns:return>
</ns:connectResponse>

Ao acessar o endereço http://IP_ADDRESS:8080/axis2/services/DBConnect/executa?coluna=tensaoae executar um método do WS no browser, eu recebo a seguinte resposta:

<executaResponse>
<return>108</return>
<return>109</return>
<return>109</return>
<return>109</return>
<return>109</return>
<return>109</return>
<return>109</return>
<return>109</return>
<return>109</return>
<return>109</return>
<return>109</return>
<return>109</return>
<return>109</return>
<return>109</return>
<return>109</return>
<return>109</return>
<return>109</return>
<return>109</return>
<return>109</return>
<return>109</return>
</executaResponse>

Ao acessar o endereço http://IP_ADDRESS:8080/axis2/services/DBConnect/connect/nome?nome=Faccin e executar um método do WS no browser, eu recebo a seguinte resposta:

<ns:nomeResponse>
<ns:return>O nome eh: Faccin</ns:return>
</ns:nomeResponse>
Vocês podem ver que no browser eu consigo receber as respostas normalmente, porém na minha aplicação, as respostas enviadas pelo ?return? só funcionam caso esteja no seguinte formato (somente texto):
return "abcdefghijklmnopqrstuvwxyz";

caso contrário o valor retornado é nulo.

A estrutura da minha aplicação é a seguinte (Veja o código completo AQUI!)

package Monitoramento;

import??
import dbconnect.DBConnect;
import dbconnect.DBConnect_Stub;

public class GraficoTFA extends Canvas implements Runnable {

    Vars??

    /*private int[] vetorTemporario = new int[10];*/

    public GraficoTFA() {

        Criar o gráfico??


        Runnable run = new Runnable() {

            public void run() {
                
                //STUBs
                DBConnect stub = null;
                try {
                    stub = new DBConnect_Stub();
                } catch (Exception e) {
                    System.out.println("Não conseguiu criar o DBConnect_Stub()");
                }

                //Conexão com o servidor
                try {
                    String con = stub.connect("GAIC", "db2inst1", "gaic02");
                    System.out.println("Conexão stub.connect: " + con);
                } catch (Exception e) {
                    System.out.println("Erro stub.connect: " + e.getMessage());
                }


                while (parar == false) {

                    try {
                        nome = stub.nome("Faccin");
                    } catch (Exception e) {
                        System.out.println("Exception?");
                    }



                    System.out.println("Nome---: " + nome);


                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException ex) {
                        ex.printStackTrace();
                    }

                    Define os dados do gráfico.......

                    repaint();
                

                }
            }
        };
        (new Thread(run)).start();

    }

    // stop Thread
    public void parar() {
        parar = true;
    }

    public void run() {
    /*while (run){
    try {
    
    } catch (Exception e) {  //InterruptedException
    e.printStackTrace();
    }
    }*/
    }

    protected void paint(Graphics g) {
        
	Desenha o gráfico;

    }

    protected void keyPressed(int keyCode) {

	Teclas pressionadas??.        

        }
    }
}

Outro exemplo que estou utilizando:

Se eu chamar o método a seguir:

try {
                    String con = stub.connect("bd", "user", "pass");
                    System.out.println("Conexão stub.connect: " + con);
                } catch (Exception e) {
                    System.out.println("Erro stub.connect: " + e.getMessage());
                }

Eu receberei a resposta ?Sucesso!? e no console do NetBeans será exibido:

Conexão stub.connect: Sucesso!

Agora veja este outro exemplo quando eu chamo o método ?nome? e envio algum nome por parâmetro:

try {
                         nome = stub.nome("Faccin");
                    } catch (Exception e) {
                    }

E eu mandar mostrar no console através do comando

System.out.println("Nome---: " + nome);

A resposta será nula, como a seguir:

Nome---: O nome eh: null
Uncaught exception java/lang/NullPointerException.

Notem que o texto ?O nome eh:? faz parte da resposta do WS, portanto Strings passam e os outros valores não passam.

O que eu preciso fazer é receber os valores do método ?executa?, nem que seja um valor de cada vez, para que eu possa gerar gráficos a partir desses valores...

Muito obrigado pela atenção de todos!

abração

Criado 25 de novembro de 2009
Respostas 0
Participantes 1