olá,
bom eu já passei pelo problema do and_ts sobre ksoap e kxml, porém consegui superar fazendo um exemplo básico de um web service que lista livros cadastrados e apresenta os no aplicativo j2me.
A princípio há problemas realmente em um desses projetos, então eu alterei mas não havia reportado a equipe que mantém o projeto sobre o erro! Basicamente o erro que encontrei era a respeito de classes definidas de forma errada tipo por exemplo declarado uma “interface abstrata”.
Não tenho muito domínio sobre o projeto, mas creio que tenha sido gerado com alguma ferramenta e não fora revisado o código!
Eu alterei o erro pegando o código fonte e trazendo ele pro meu projeto fazendo as devidas modificações!
Abaixo colocarei um exemplo utilizando o ksoap e kxml
import java.util.Vector;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.TextBox;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransport;
import communicate.LivrosDTO;
/**
* @author Bruno
*
*/
public class TelaPrincipal extends MIDlet {
private Display display;
// url onde se encontra seu serviço instalado
private String url = "http://localhost:8080/axis/services/LivrariaFacade";
private TextBox textBox = null;
protected void destroyApp(final boolean arg0) throws MIDletStateChangeException {}
protected void pauseApp() {}
protected final void startApp() throws MIDletStateChangeException {
display = Display.getDisplay(this);
try {
// método que gera a chamada do web service e monta as informações na tela
testWebService();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public final void testWebService() throws Exception {
try{
StringBuffer stringBuffer = new StringBuffer();
// envelope soap a ser enviado na requisição ao web service
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
// mapeando tipos complexos, ou seja, tipos não definidos pela JSR que define o JAX-RPC.
envelope.addMapping(url, "LivrosDTO", new LivrosDTO().getClass());
//criando um objeto soap e definindo qual o serviço que irá ser requisitado
SoapObject soapObject = new SoapObject(url, "listaLivros");
// adicionando o parâmetro ao objeto soap, pois meu serviço depende de um parâmetro
soapObject.addProperty("nome", new String(""));
// adicionando o objeto soap ao corpo do envelope
envelope.bodyOut = soapObject;
// instanciando o objeto que faz a chamada via http, lembrando que o soap trabalha
// em cima de uma arquitetura já criada ou seja protocolos que transitam na internet
HttpTransport transport = new HttpTransport(url);
// fazendo a chamada e passando o envelope soap
transport.call("", envelope);
// com isso após a chamada o envelope é alterado e pode apresentar uma resposta
// como meu serviço tem como retorno um array ele foi interpretado como
// retorno um Vector
Vector response = (Vector) envelope.getResponse();
// a partir daqui crio um array de livros para montar uma resposta
LivrosDTO[] livros = new LivrosDTO[response.size()];
for (int i = 0; i < livros.length; i++){
// criando um objeto soap e recuperando cada elemento da resposta
SoapObject tmp = (SoapObject) response.elementAt(i);
livros[i] = new LivrosDTO();
// aqui deve se pegar cada propriedade/atributo de acordo com a definição
// desse tipo complexo no wsdl gerado daquele web service
livros[i].setAutor((String) tmp.getProperty(0));
livros[i].setIsbn((String) tmp.getProperty(1));
livros[i].setNome((String) tmp.getProperty(2));
livros[i].setResenha((String) tmp.getProperty(3));
}
// aqui percorro o array de livros e monto uma resposta simples
for (int i = 0; i < livros.length; i++){
stringBuffer.append("Nome do livro: "+livros[i].getNome()+"\n"+
"Autor: "+livros[i].getAutor()+"\n"+
"ISBN: "+livros[i].getIsbn()+"\n"+
"Resenha: "+livros[i].getResenha()+"\n\n");
}
// mostra o valor do resultado na tela.
textBox = new TextBox("Teste WebService", stringBuffer.toString(), 1024, 0);
display.setCurrent(textBox);
} catch(Exception e){
e.printStackTrace();
}
}
}
Pra chegar a esse exemplo teoricamente simples tive que percorrer muita coisa!
Mas há uma ferramenta própria do Java Wireless Toolkit que gera classes que se conectam ao web service sem você se preocupar com este problema de como se conectar!
Para se criar um web service tem um facilitador a partir do Callisto Release que gera facilmente um web service, porém como aqui se pede no Netbeans não sei qual recurso poderia ser!
Bom falei bastante sobre o caso do and_ts ou pelo menos dei uma clareada ou pelo menos tentei!
Agora sobre o marco.itba,
Bom a princípio você poderia definir um serviço denominado logar passando como parâmetro o login e senha e retorno boolean (tipo primitivo do java reconhecido pelo JAX-RPC, ou seja, não será reconhecido como tipo complexo).
Existe uma forma que seria utilizar https como conexão pra tornar mais segura a transmissão de dados porém não sei como validaria esse usuário para manter aquela sessão do usuário com o provedor de web services!
Eu desenvolvi um estudo sobre isso, pois meu projeto final de faculdade visa na criação de web services e sua utilização por aparelhos portatéis.
Qualquer dúvida é só postar ou me adicionem ao msn para esclarecer dúvidas
Até mais