Enviar List<Classe> como parâmetro para Web Service [RESOLVIDO]

Boa tarde,

estou usando KSOAP2 e estou tentando enviar um List para um Web Service, mas está dando o erro:

03-16 15:47:08.740: WARN/System.err(1510): java.lang.RuntimeException: Cannot serialize: [br.com.chb.ferracini.webservice.ModeloWS@4107b568]

Neste caso, teria que serializar a classe ModeloWS?
Se sim, como poderia fazer isso?

Desde já agradeço!

Abraço!

public class SuaClasse implements java.io.Serializable {

}

aproveite, e leia este conteudo: http://www.devmedia.com.br/introducao-a-serializacao-de-objetos/3050

[]'s

Continuou dando o erro.
Veja se estou fazendo corretamente:

...
          List<ModeloWS> listaws = new ArrayList<ModeloWS>();
							
		for(int i = 0; i < Itemped.listaModelosSelecionados.size(); i++){
			
			
			ModeloWS modelo = new ModeloWS();
			
			
			modelo.PC17Seq 		= 1;//i;
			modelo.PC17Modelo	= "teste";
			modelo.PC17Cor		= 1;
			modelo.PC13grade	= "Teste";
			modelo.PC17VrUnit	= 4;
			
			
			
			FileOutputStream fo = new FileOutputStream("/sdcard/Download/test.ser");
			ObjectOutputStream oo = new ObjectOutputStream(fo);
			oo.writeObject(modelo);
			
			listaws.add(modelo);
	
			oo.close();
		}
		
		
		soap.addProperty("Xsdt", listaws);

...

Porque você não tenta enviar pro um array de bytes? :slight_smile:
Ou então, por json?

Nunca utilizei json.
Poderia postar algum exemplo?

Opa
http://lmgtfy.com.br/?q=JsonArray+android

Amigo !!
a resolução do seu problema está aqui !!
é muito simples fazer isso !!
passar um objeto com ksoap 2.

Obrigado galera, ajudou bastante!

Consegui enviar para o webservice usando o KSOAP criando outros SoapObject e adicionando as propriedades com o PropertyInfo.
Só que o webservice esta me retornando isso:

anyType{faultcode=SOAP-ENV:Client; faultstring=Error reading n0:Execute

onde o “Execute” é o método que estou chamando.
Alguém sabe o que poderia ser? Já procurei em vários lugares e não achei a solução.

Obrigado mais uma vez!

Abraço!

C;k ,
após serializar a classe dessa maneira, é só adicionar elas em um List<> ( ou ArrayList<>) e adicionar nas propriedades do SoapObject?

Não use ArrayList como parâmetros de WebService. Use arrays mesmo pois o webservice precisa ser independente da linguagem (o PHP, por exemplo, não ‘saberia’ criar um ArrayList).

Se você realmente precisar expor coisas relativas à linguagem, creio que RMI possa ser mais útil nesse caso.

Sim mas a sua classe de ArrayList que você passará por parametro tem que estar identica igualzinha a sua classe de ArrayList que recebe como parametro.

ficaria assim no caso !!! tipo simulando

[b] Usuario usuario = new Usuario();

		usuario.Codigo = 156;
		usuario.Login = Ck;
		usuario.Senha = 123456; [/b]
		
      
		PropertyInfo propertyInfo  = new PropertyInfo();
 	  
		propertyInfo.setName("usuario"); > Parametro do seu Ws.
		propertyInfo.setValue(usuario); > Seu objeto como parametro.
		propertyInfo.setType(Usuario.class); > Sua classe serializada.

Isto que o Ataxexe disse é fato.

Post 26/03/2012 18:30:07 Assunto: Re:Enviar List como parâmetro para Web Service
Não use ArrayList como parâmetros de WebService. Use arrays mesmo pois o webservice precisa ser independente da linguagem (o PHP, por exemplo, não ‘saberia’ criar um ArrayList).

Se você realmente precisar expor coisas relativas à linguagem, creio que RMI possa ser mais útil nesse caso.

[quote=matheusms]C;k ,
após serializar a classe dessa maneira, é só adicionar elas em um List<> ( ou ArrayList<>) e adicionar nas propriedades do SoapObject? [/quote]

Tentei desse jeito mas deu erro:

03-28 10:07:00.820: WARN/System.err(3419): java.lang.RuntimeException: Cannot serialize: [br.com.webservice.ModeloWS@408e5ef8, br.com.webservice.ModeloWS@408e6cb0, br.com.webservice.ModeloWS@408e76d8]

...

int seq = 1;
				for(int m = 0; m < listaItensPedido.size(); m++){
					PedidoItem item = listaItensPedido.get(m);
					
					ModeloWS modelo = new ModeloWS();
					
					modelo.PC17Seq 		= seq;
					modelo.PC17Modelo	= item.modeloVariacao;
					modelo.PC17Cor		= item.idCor;
					modelo.PC13grade	= item.gradeCodigo;
					modelo.PC17VrUnit	= item.pedidoItemValor;
					modelo.PC17Tam		= item.pedidoItemQuantidade;

					
					listaItens.add(modelo);
					
					seq += 1;
				}
				
				PropertyInfo propertyInfo  = new PropertyInfo();
				
				propertyInfo.setName("Xsdt");
				propertyInfo.setValue(listaItens);
				propertyInfo.setType(ModeloWS.class);
				
				soap.addProperty(propertyInfo);

...

Desculpe minha ignorância, mas sou iniciante em webservice ainda e estou apanhando muito disso hauhau
Se puderem ajudar novamente eu agradeço!

Abraço!

Tem esses massetes aqui tambem.
você cololou a sua classe de list identica a do web service !
tudo até os parametros Letras maisculas e minusculas.?
a classe que vai ser serializada como parametro tem que ser identica a classe que será recebida pelo Ws.


Usuario usuario = new Usuario();

usuario.Codigo = 156;
usuario.Login = Ck;
usuario.Senha = 123456;


PropertyInfo propertyInfo = new PropertyInfo();

propertyInfo.setName("usuario"); > Parametro do seu Ws.
propertyInfo.setValue(usuario); > Seu objeto como parametro.
propertyInfo.setType(Usuario.class); > Sua classe serializada.

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
envelope.dotNet = true;
envelope.setOutputSoapObject(request); 
envelope.addMapping(NAMESPACE, "Usuario",new Usuario().getClass()); 
HttpTransportSE transport = new HttpTransportSE(URL);
envelope.implicitTypes = true; <<<
transport.call(SOAP_ACTION, envelope);

[quote=matheusms]Tentei desse jeito mas deu erro:

03-28 10:07:00.820: WARN/System.err(3419): java.lang.RuntimeException: Cannot serialize: [br.com.webservice.ModeloWS@408e5ef8, br.com.webservice.ModeloWS@408e6cb0, br.com.webservice.ModeloWS@408e76d8]

...

int seq = 1;
				for(int m = 0; m < listaItensPedido.size(); m++){
					PedidoItem item = listaItensPedido.get(m);
					
					ModeloWS modelo = new ModeloWS();
					
					modelo.PC17Seq 		= seq;
					modelo.PC17Modelo	= item.modeloVariacao;
					modelo.PC17Cor		= item.idCor;
					modelo.PC13grade	= item.gradeCodigo;
					modelo.PC17VrUnit	= item.pedidoItemValor;
					modelo.PC17Tam		= item.pedidoItemQuantidade;

					
					listaItens.add(modelo);
					
					seq += 1;
				}
				
				PropertyInfo propertyInfo  = new PropertyInfo();
				
				propertyInfo.setName("Xsdt");
				propertyInfo.setValue(listaItens);
				propertyInfo.setType(ModeloWS.class);
				
				soap.addProperty(propertyInfo);

...

Desculpe minha ignorância, mas sou iniciante em webservice ainda e estou apanhando muito disso hauhau
Se puderem ajudar novamente eu agradeço!

Abraço![/quote]

Cara, consegui aqui finalmente!!! haha

Não cheguei a testar esse exemplo que você mandou por ultimo, mas depois vou ver se fica melhor, value mesmo!
Fiz da seguinte maneira aqui:

...

SoapObject soap  = new SoapObject(NAMESPACE, "Execute");
				SoapObject soap2 = new SoapObject(NAMESPACE, "SdtItem.SdtItemItem");
				SoapObject soap3 = new SoapObject(NAMESPACE, "SdtItem");

int seq = 1;
				for(int m = 0; m < listaItensPedido.size(); m++){
					soap2 = new SoapObject(NAMESPACE, "SdtItem.SdtItemItem");
					
					PedidoItem item = listaItensPedido.get(m);
					
					ModeloWS modelo = new ModeloWS();
					
					modelo.PC17Seq 		= seq;
					modelo.PC17Modelo	= item.modeloVariacao;
					modelo.PC17Cor		= item.idCor;
					
					
					soap2.addProperty("PC17Seq", modelo.PC17Seq);
					soap2.addProperty("PC17Modelo", modelo.PC17Modelo);
					soap2.addProperty("PC17Cor", modelo.PC17Cor);
					
					soap3.addSoapObject(soap2);
					
					
					seq += 1;
				}
				
				PropertyInfo propertyInfo  = new PropertyInfo();
				
				propertyInfo.setName("Xsdt");
				propertyInfo.setType(soap3);
				propertyInfo.setValue(soap3);
								
				soap.addProperty(propertyInfo);

...

Demorou mais deu certo! hehe
Valeu a todos que me ajudaram, qualquer coisa to ai pra ajudar no que eu puder tbm!

Abraço!