Seguinte: tenho um Web Service que retorna todos os clientes de um determinado usuário, então passo o usuário, e o web service retorna uma lista de clientes. Quando vou tentar acessar o web service via aplicação Java ME, acontece o seguinte erro:
org.ksoap2.SoapFault
at org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(), bci=56
at org.ksoap2.SoapEnvelope.parse(), bci=139
at org.ksoap2.transport.Transport.parseResponse(), bci=27
at org.ksoap2.transport.HttpTransport.call(), bci=291
at cliente.ClienteMID.getLista(ClienteMID.java:209)
at cliente.ClienteMID.startMIDlet(ClienteMID.java:60)
at cliente.ClienteMID.startApp(ClienteMID.java:339)
at javax.microedition.midlet.MIDletTunnelImpl.callStartApp(), bci=1
at com.sun.midp.midlet.MIDletPeer.startApp(), bci=7
at com.sun.midp.midlet.MIDletStateHandler.startSuite(), bci=269
at com.sun.midp.main.AbstractMIDletSuiteLoader.startSuite(), bci=52
at com.sun.midp.main.CldcMIDletSuiteLoader.startSuite(), bci=8
at com.sun.midp.main.AbstractMIDletSuiteLoader.runMIDletSuite(), bci=161
at com.sun.midp.main.AppIsolateMIDletSuiteLoader.main(), bci=26
o código que gera esse erro é :
try {
String operation = "listaCliente";
String ServiceNamespace = "http://tempuri.org";
String ServiceEndpointURL = "http://127.0.0.1:8080/CalculatorWS/CalculatorWS";
String Soap_Action = ServiceNamespace + "/"+ operation;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
HttpTransport ht = new HttpTransport(ServiceEndpointURL);
SoapObject soapBody = new SoapObject(ServiceNamespace, operation);
soapBody.addProperty("nome", "teste");
envelope.dotNet = false;
envelope.bodyOut = soapBody;
envelope.bodyIn = null;
ht.debug = true;
ht.call(Soap_Action, envelope);
if (envelope.bodyIn instanceof SoapFault) {
SoapFault soapFault = (SoapFault) envelope.bodyIn;
System.out.println(soapFault.faultstring);
} else {
SoapObject result = (SoapObject) envelope.bodyIn;
System.out.println(result.toString());
}
} catch (Exception ex) {ex.printStackTrace();}
estou utilizando kSOAP e kXML.
O código do web service é esse:
package org.west.calculator;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.ejb.Stateless;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import persistencia.Cliente;
import persistencia.Imobiliaria;
import persistencia.Usuario;
@WebService(serviceName = "CalculatorWS")
@Stateless()
public class CalculatorWS {
/**
* Operação de serviço web
*/
@WebMethod(operationName = "listaCliente")
public java.util.List listaCliente(@WebParam(name = "nome") String nome) {
List lista = new ArrayList();
try{
Calendar calendar = new GregorianCalendar();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_YEAR, -30);
AnnotationConfiguration config = new AnnotationConfiguration();
config.configure("hibernate.cfg.xml");
config.addAnnotatedClass(Cliente.class);
config.addAnnotatedClass(Imobiliaria.class);
config.addAnnotatedClass(Usuario.class);
Session session = config.buildSessionFactory().openSession();
Criteria criteria = session.createCriteria(Imobiliaria.class);
criteria.add(Restrictions.gt("dataentrada", calendar.getTime()));
criteria.createCriteria("usuario").add(Restrictions.ilike("nome", nome, MatchMode.ANYWHERE));
for (Object object : criteria.list()) {
Imobiliaria imob = (Imobiliaria) object;
lista.add(imob.getImovel());
}
}
catch(Exception ex){
ex.printStackTrace();
}
return lista;
}
}
No servidor quando eu tento acessar o web service, o seguinte erro aparece no console:
AVISO: Received WS-I BP non-conformant Unquoted SoapAction HTTP header: http://tempuri.org/listaCliente
vlw