Então o método do webservice é esse, eu busco no banco e alimento um objeto e esse objeto alimento uma lista de objetos, até ai tudo certo.
Mas o retorno dessa classe é do tipo MensagemVeiculo[], não consegui passar o result com a lista, dai tentei lista.get() mas num funciona. O result tem que ser +- assim
MensagemVeiculo[] teste = new MensagemVeiculo[]{obj1,obj2........obj200};
Result teste;
a classe:
publicstaticMensagemVeiculo[]obtemMensagensVeiculos(IntegeridMensagemInicial){Stringdriver="net.sourceforge.jtds.jdbc.Driver";//ural = jdbc:jtds:sqlserver://endereço_ip:porta/nome_do_bancoStringurl="jdbc:jtds:sqlserver://server:1433/Integracao";Stringusuario="sa";Stringsenha="sa";inti=0;Connectionconexao;Statementstatement=null;ResultSetresultset;List<MensagemVeiculo>lista=newArrayList<MensagemVeiculo>();//MensagemVeiculo[] teste = null;// = new MensagemVeiculo[]{};try{Class.forName(driver);conexao=DriverManager.getConnection(url,usuario,senha);statement=conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);resultset=statement.executeQuery("select b.placa, b.mct,a.IIPOS_TimePosition, a.IIPOS_Latitude, a.IIPOS_Longitude from qtracsbrposicaoup a, integracao.ApoioF b where a.IIPOS_MCTAddress=1085258 and b.MCT=1085258");// while(resultset.next())// {// i++;// }// resultset.last();while(resultset.next()){MensagemVeiculom1=newMensagemVeiculo();m1.setId(1);m1.setPlaca(resultset.getString("placa"));m1.setRastreador("113134512");m1.setDataHora(Calendar.getInstance());m1.setLatitude(-19.000);m1.setLongitude(-45.000);m1.setEstado("MG");m1.setCidade("Beo Horizonte");m1.setLogradouro("Rua Tal");lista.add(m1);}}catch(ClassNotFoundExceptionDriver){}catch(SQLExceptionFonte){}intj=0;MensagemVeiculo[]teste=null;for(j=0;j<=lista.size();j++){teste=newMensagemVeiculo[]{lista.get(j)};}returnteste;}
E o senhor não pode mudar o tipo de retorno do método?
E iterar a lista e preencher o array, também não?
T
tedeski
drsmachado:
E o senhor não pode mudar o tipo de retorno do método?
E iterar a lista e preencher o array, também não?
esse metodo foi passado pela empresa, no caso tem que ser desse modo.
drsmachado
Bom, então dê uma lida na documentação da interface List e da interface Collection, tenho certeza que você poderá encontrar uma ótima solução para isto.
gomesrod
MensagemVeiculo[] teste = null;
for(j=0;j<=lista.size();j++){
teste = new MensagemVeiculo[]{lista.get(j)};
}
Uma confusão aqui, você não deve inicializar o array INTEIRO para cada elemento. Inicializa apenas o elemento em questão.
MensagemVeiculo[] teste = new MensagemVeiculo[lista.size()]; // Inicializa só uma vez, com o tamanho da lista.
for(j=0;j<=lista.size();j++){
// Agora pega da lista apenas o elemento em questão.
teste[j] = lista.get(j);
}
Assim já deve funcionar. Na verdade tem um jeito muito mais simples e performático, mas eu me recuso a contar enquanto você tiver variáveis com nome TESTE !!!
fredericomaia10
Siga este conselho e será mais feliz.
T
tedeski
gomesrod:
MensagemVeiculo[] teste = null;
for(j=0;j<=lista.size();j++){
teste = new MensagemVeiculo[]{lista.get(j)};
}
Uma confusão aqui, você não deve inicializar o array INTEIRO para cada elemento. Inicializa apenas o elemento em questão.
MensagemVeiculo[] teste = new MensagemVeiculo[lista.size()]; // Inicializa só uma vez, com o tamanho da lista.
for(j=0;j<=lista.size();j++){
// Agora pega da lista apenas o elemento em questão.
teste[j] = lista.get(j);
}
Assim já deve funcionar. Na verdade tem um jeito muito mais simples e performático, mas eu me recuso a contar enquanto você tiver variáveis com nome TESTE !!!
Assim deu certo para dar o result, mas tentando executar o metodo no WS, se mando 1 objeto somente alimentado a mão sem dados do banco e retornar certinho, mas desse jeito dá esse erro.
MensagemVeiculo[] teste = new MensagemVeiculo[lista.size()]
lista.toArray(teste);
T
tedeski
Kazdum:
MensagemVeiculo[] teste = new MensagemVeiculo[lista.size()]
lista.toArray(teste);
assim ele retorna em branco.
gomesrod
tedeski:
gomesrod:
for(j=0;j<=lista.size();j++) {
//....
Assim já deve funcionar.
Assim deu certo para dar o result, mas tentando executar o metodo no WS, se mando 1 objeto somente alimentado a mão sem dados do banco e retornar certinho, mas desse jeito dá esse erro.
for(j=0;j<=lista.size();j++) {
//....
Assim já deve funcionar.
Assim deu certo para dar o result, mas tentando executar o metodo no WS, se mando 1 objeto somente alimentado a mão sem dados do banco e retornar certinho, mas desse jeito dá esse erro.
for(j=0;j<=lista.size();j++) {
//....
Assim já deve funcionar.
Assim deu certo para dar o result, mas tentando executar o metodo no WS, se mando 1 objeto somente alimentado a mão sem dados do banco e retornar certinho, mas desse jeito dá esse erro.
Descobri algo , quando eu busco no banco em um projeto aparte com a mesma classe funciona nomalmente mostra todas informações,
mas no Webservice dá problema, fiz o seguinte teste alimentando manualmente com um for como mostrado abaixo.
e no retorno trouxe tudo certo, tem alguma dica, o banco é SqlServer 2008, conectando com o library jtds.
packageservico;importjava.util.Calendar;importentidade.MensagemVeiculo;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.ArrayList;importjava.util.Calendar;importjava.util.Iterator;importjava.util.List;importjavax.swing.JOptionPane;publicclassLocalizadorWSM{staticStringdriver="net.sourceforge.jtds.jdbc.Driver";//ural = jdbc:jtds:sqlserver://endereço_ip:porta/nome_do_bancostaticStringurl="jdbc:jtds:sqlserver://server:1433/Integracao";staticStringusuario="sa";staticStringsenha="sa";staticinti=0;staticConnectionconexao;staticStatementstatement=null;staticResultSetresultset;staticList<MensagemVeiculo>lista=newArrayList<MensagemVeiculo>();publicstaticMensagemVeiculo[]obtemMensagensVeiculos(IntegeridMensagemInicial){//MensagemVeiculo[] teste = null;// = new MensagemVeiculo[]{};// try{// Class.forName(driver);// conexao = DriverManager.getConnection(url, usuario, senha);// statement = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,// ResultSet.CONCUR_READ_ONLY);// resultset = statement.executeQuery("select b.placa, b.mct,a.IIPOS_TimePosition, a.IIPOS_Latitude, a.IIPOS_Longitude from qtracsbrposicaoup a, integracao.ApoioF b where a.IIPOS_MCTAddress=1085258 and b.MCT=1085258");// while(resultset.next())// {// i++;// }// resultset.last();// while(resultset.next())for(intj=0;j<=10;j++){MensagemVeiculom1=newMensagemVeiculo();m1.setId(j);m1.setPlaca("teste");m1.setRastreador("113134512");m1.setDataHora(Calendar.getInstance());m1.setLatitude(-19.000);m1.setLongitude(-45.000);m1.setEstado("MG");m1.setCidade("Beo Horizonte");m1.setLogradouro("Rua Tal");lista.add(m1);}// }// catch(ClassNotFoundException Driver) // {// // }// catch(SQLException Fonte) // {// // }MensagemVeiculo[]teste=newMensagemVeiculo[lista.size()];// Inicializa só uma vez, com o tamanho da lista. for(intj=0;j<lista.size();j++){// Agora pega da lista apenas o elemento em questão. teste[j]=lista.get(j);}// lista.toArray(teste); returnteste;}}
T
tedeski
Até o momento sem solução. Mais alguem tem dicas???
gomesrod
Isso está muito estranho!
O problema não é mais na transformação de lista em array. Para isso o código abaixo deveria ter funcionado:
Kazdum:
MensagemVeiculo[] teste = new MensagemVeiculo[lista.size()]
lista.toArray(teste);
Essa lista já deve estar chegando errada ao fim do método! Você deveria debugar para acompanhar os valores passo-a-passo, e ver em que momento a informação se perde. Ou então incluir algumas mensagens de log (pode até ser System.println), tantas quantas forem necessárias para saber exatamente o que está acontecendo.
T
tedeski
gomesrod:
Isso está muito estranho!
O problema não é mais na transformação de lista em array. Para isso o código abaixo deveria ter funcionado:
Kazdum:
MensagemVeiculo[] teste = new MensagemVeiculo[lista.size()]
lista.toArray(teste);
Essa lista já deve estar chegando errada ao fim do método! Você deveria debugar para acompanhar os valores passo-a-passo, e ver em que momento a informação se perde. Ou então incluir algumas mensagens de log (pode até ser System.println), tantas quantas forem necessárias para saber exatamente o que está acontecendo.
tentei fazer o debug, mas o eclipse não esta deixando.
em uma aplicação normal, copiei a classe e funciona normalmente.
Failed to connect to remote VM. Connection timed out.
org.eclipse.jdi.TimeoutException
T
tedeski
bom dia, até o momento não resolvi o problema, queria saber se estou certo usando a busca sql assim, ou devo implementar JPA??
gomesrod
Tente “debugar” usando mensagens de log. Acho que é algum erro simples em algum lugar do código que está fazendo os dados se perderem… certifique-se que os dados chegam até o final da execução do método!
T
tedeski
gomesrod:
tedeski:
tentei fazer o debug, mas o eclipse não esta deixando.
Tente "debugar" usando mensagens de log. Acho que é algum erro simples em algum lugar do código que está fazendo os dados se perderem.... certifique-se que os dados chegam até o final da execução do método!
Obrigado. consegui ..... depois de tanto sacrificio é uma coisa boba...aff. não acredito.
O JTDS não estava na Pasta WEB-INF/LIB.
foi só fazer a copia e magica. (não acredito).
Mas mesmo assim obrigado, pela ajuda .
packageservico;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.ArrayList;importjava.util.Calendar;importjava.util.List;importentidade.MensagemVeiculo;publicclassLocalizadorWSM{staticStringdriver="net.sourceforge.jtds.jdbc.Driver";//ural = jdbc:jtds:sqlserver://endereço_ip:porta/nome_do_banco staticStringurl="jdbc:jtds:sqlserver://server:1433/Integracao";staticStringusuario="sa";staticStringsenha="sa";staticinti=0;staticintj=0;staticConnectionconexao;staticStatementstatement=null;staticResultSetresultset;staticList<MensagemVeiculo>lista=newArrayList<MensagemVeiculo>();publicstaticMensagemVeiculo[]obtemMensagensVeiculos(IntegeridMensagemInicial)throwsClassNotFoundException,SQLException{Class.forName(driver);conexao=DriverManager.getConnection(url,usuario,senha);statement=conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);resultset=statement.executeQuery("select b.placa, b.mct,a.IIPOS_TimePosition, a.IIPOS_Latitude, a.IIPOS_Longitude from qtracsbrposicaoup a, integracao.ApoioF b where a.IIPOS_MCTAddress=b.MCT");intj=0;// while(resultset.next())// {// j++; // }while(resultset.next())// for(int j = 0;j<=10000;j++) {MensagemVeiculom1=newMensagemVeiculo();m1.setId(1);m1.setPlaca(resultset.getString("placa"));m1.setRastreador(resultset.getString("mct"));m1.setDataHora(Calendar.getInstance());m1.setLatitude(-19.000);m1.setLongitude(-45.000);m1.setEstado("MG");m1.setCidade("Beo Horizonte");m1.setLogradouro("Rua Tal");lista.add(m1);}// MensagemVeiculo m1 = new MensagemVeiculo();// m1.setId(1);// m1.setPlaca("ABC1234dd");// m1.setRastreador("113134512");// m1.setDataHora(Calendar.getInstance());// m1.setLatitude(-19.000);// m1.setLongitude(-45.000);// m1.setEstado("MG");// m1.setCidade("Beo Horizonte");// m1.setLogradouro("Rua Tal");// // MensagemVeiculo m2 = new MensagemVeiculo();// m2.setId(2);// m2.setPlaca("ABC1234wew");// m2.setRastreador("113134512"); // m2.setDataHora(Calendar.getInstance());// m2.setLatitude(-19.000);// m2.setLongitude(-45.000);// m2.setEstado("MG");// m2.setCidade("Beo Horizonte");// m2.setLogradouro("Rua Tal");MensagemVeiculo[]teste=newMensagemVeiculo[lista.size()];// Inicializa só uma vez, com o tamanho da lista. for(j=0;j<lista.size();j++){// Agora pega da lista apenas o elemento em questão. teste[j]=lista.get(j);}//return new MensagemVeiculo[] {m1,m2};returnteste;}}