2012-06-24 4 views
1

J'ai un problème avec l'enveloppe créée en utilisant SoapSerializationEnvelope de ksoap2-android lib. Ce que je dois obtenir (ce serveur attend) est que:personnalisation de l'enveloppe ksoap2-android

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soa="http://agh.edu.pl/soa"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <soa:getCompanyById> 
     <id>1</id> 
     </soa:getCompanyById> 
    </soapenv:Body> 
</soapenv:Envelope> 

Ce que je reçois en fait est que:

<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"> 
<v:Header /> 
<v:Body> 
    <n0:getCompanyById id="o0" c:root="1" xmlns:n0="http://agh.edu.pl/soa"> 
     <id i:type="d:int">5</id> 
    </n0:getCompanyById> 
</v:Body> 
</v:Envelope> 

Mon code Java:

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

     PropertyInfo id = new PropertyInfo(); 
     id.setName("id"); 
     id.setValue(5); 
     id.setType(int.class); 
     request.addProperty(id); 

     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.setOutputSoapObject(request);  

     HttpTransportSE httpTransport = new HttpTransportSE(URL); 
     httpTransport.debug = true; 

     try { 
      httpTransport.call(request.getNamespace() + "/" + request.getName(), envelope); 
     } catch (Exception e) 
     { 
      System.out.println(httpTransport.requestDump); 
      System.out.println(httpTransport.responseDump); 
      System.out.println(e.getMessage()); 
     } 

Qu'est-ce que je dois faire change chaque v: quelque chose en soapenv: quelque chose et n0: getCompanyById en soa: getCompanyById. Une idée? Merci d'avance. Cya

Répondre

1

Ces enveloppes sont pour la plupart identiques - elles utilisent simplement des préfixes différents. Ce que je suggère est d'utiliser quelque chose comme SoapUI: étape par étape, changer l'enveloppe de travail pour ce que vous obtenez du code. Au moment où les choses vont mal, vous saurez ce qui cause le problème. D'après mon expérience i: type = "d: int" peut également causer le problème.

+3

Comme vous l'avez dit, le problème était i: type = "d: int". La solution consiste à convertir la valeur en long: "id.setValue ((long) value)". Le savon est si retardé. J'espère que les gens qui l'ont créé brûleront en enfer. Thx, tu es mon dieu – pawelo