Rcupera valor de web service - quase lá!

7 respostas
R

Galera,

Tenho esse método em meu web service:

public Usuario[] getAutentica() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{ 
		
			ConectaBanco cb = new ConectaBanco();
			ResultSet rs = cb.ExecutaSelect("select * from usuarios");
		    rs.next();   
		    Usuario[] usuario = null;
		    int i = 0;
		    while(rs.next()) {     
		    	usuario[i] = new Usuario();   
		        usuario[i].setNome(rs.getString("nome"));
		        usuario[i].setSenha(rs.getString("senha"));
		        usuario[i].setUltimoacesso(rs.getString("UltimoAcesso"));
		        i++;   
		    }
		return usuario;   
	}

Depois eu dei deploy do serviço e criei um cliente para consumir esse serviço, com esse código:

package com.tcc;

import java.rmi.RemoteException;

import javax.xml.rpc.ServiceException;


public class Teste {
	
	public static void main(String[] args) throws RemoteException, ServiceException {   
		  
		UsuarioAutenticaServiceLocator locator = new UsuarioAutenticaServiceLocator();
		System.out.println("aqui 1");
		Usuario[] usu = locator.getUsuarioAutentica().getAutentica();
		System.out.println("aqui 2");
		System.out.println(usu.length);
		System.out.println(usu[0].getNome());
		System.out.println(usu[1].getNome());

	}   
}

Ocorre que estou recebendo uma mensagem de erro e não faço a mínima idéia do que seja, vejam:

17/10/2008 17:57:17 org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
aqui 1
Exception in thread "main" AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: java.lang.NullPointerException
 faultActor: 
 faultNode: 
 faultDetail: 
	{http://xml.apache.org/axis/}hostname:FELIPES

java.lang.NullPointerException
	at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
	at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
	at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
	at javax.xml.parsers.SAXParser.parse(Unknown Source)
	at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
	at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
	at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
	at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
	at org.apache.axis.client.Call.invoke(Call.java:2767)
	at org.apache.axis.client.Call.invoke(Call.java:2443)
	at org.apache.axis.client.Call.invoke(Call.java:2366)
	at org.apache.axis.client.Call.invoke(Call.java:1812)
	at com.tcc.UsuarioAutenticaSoapBindingStub.getAutentica(UsuarioAutenticaSoapBindingStub.java:268)
	at com.tcc.Teste.main(Teste.java:14)

Alguma dica ? Por favor !

7 Respostas

T
public Usuario[] getAutentica() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{ 
		
			ConectaBanco cb = new ConectaBanco();
			ResultSet rs = cb.ExecutaSelect("select * from usuarios");
		    rs.next();   
		    Usuario[] usuario = null;
		    int i = 0;
		    while(rs.next()) {     
		    	usuario[i] = new Usuario();    // o null pointer ocorre aqui - vou dar uma dica: o problema está na linha 6 do seu código.
		        usuario[i].setNome(rs.getString("nome"));
		        usuario[i].setSenha(rs.getString("senha"));
		        usuario[i].setUltimoacesso(rs.getString("UltimoAcesso"));
		        i++;   
		    }
		return usuario;   
	}
R

Tinha dois rs.next....

Mas o erro continua.

17/10/2008 18:04:19 org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
aqui 1
Exception in thread "main" AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: java.lang.NullPointerException
 faultActor: 
 faultNode: 
 faultDetail: 
	{http://xml.apache.org/axis/}hostname:FELIPES

java.lang.NullPointerException
	at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
	at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
	at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
	at javax.xml.parsers.SAXParser.parse(Unknown Source)
	at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
	at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
	at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
	at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
	at org.apache.axis.client.Call.invoke(Call.java:2767)
	at org.apache.axis.client.Call.invoke(Call.java:2443)
	at org.apache.axis.client.Call.invoke(Call.java:2366)
	at org.apache.axis.client.Call.invoke(Call.java:1812)
	at com.tcc.UsuarioAutenticaSoapBindingStub.getAutentica(UsuarioAutenticaSoapBindingStub.java:268)
	at com.tcc.Teste.main(Teste.java:14)
R

show, obrigado...

olha só, agora funcionou:

public Usuario[] getAutentica() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{ 
		
			ConectaBanco cb = new ConectaBanco();
			ResultSet rs = cb.ExecutaSelect("select * from usuarios");
		    Usuario[] usuario = new Usuario[2];
		    int i = 0;
		    while(rs.next()) {     
		    	usuario[i] = new Usuario();   
		        usuario[i].setNome(rs.getString("nome"));
		        usuario[i].setSenha(rs.getString("senha"));
		        usuario[i].setUltimoacesso(rs.getString("UltimoAcesso"));
		        i++;   
		    }
		return usuario;   
	}

Mas tem uma pergunta que não quer calar, como eu pego o 2 automático do resultset ? pois não achei um .size nele.

T

Eu faria assim:

public Usuario[] getAutentica() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{ 
		
			ConectaBanco cb = new ConectaBanco();
			ResultSet rs = cb.ExecutaSelect("select * from usuarios");
                    List<Usuario> usuarios = new ArrayList<Usuario>();
                    
		    while(rs.next()) {     
		        Usuario usuario = new Usuario();

		        usuario.setNome(rs.getString("nome"));
		        usuario.setSenha(rs.getString("senha"));
		        usuario.setUltimoacesso(rs.getString("UltimoAcesso"));
                        usuarios.add (usuario);
		    }
		return usuarios.toArray (new Usuario[0]);
	}
R

o thingol…tu é charope em java hein meu ! kct…

obrigado, …só quero entender uma coisa, oq tu fez aqui ?

return usuarios.toArray (new Usuario[0]);

Tu tá convertendo o arraylist “usuarios” para um array bidimensional que é esperado pela declaração: public Usuario[] getAutentica() ?

T

toArray

Eu passo um array vazio, só para toArray poder saber que tem de criar um array de Usuario.

E você não está sabendo contar* - o array é unidimensional (1 dimensão), não bidimensional (2 dimensões) - não existem arrays bidimensionais em Java.

  • Só estou zoando um pouco, não fique triste. É claro que você sabe contar.
R

hehe, depois q eu dei o clique q meu liguei…

bom, pra encerrar, tu saberia me dizer como seria (pode ser uma idéia) esse mesmo código para uma página JSP ?

Criado 17 de outubro de 2008
Ultima resposta 17 de out. de 2008
Respostas 7
Participantes 2