2017-07-16 4 views
0

Eh bien récemment, je débouchais mon application Android mais j'ai eu un problème lors de la réception des données de mon service web car dans les journaux, il dit que les paramètres que j'ai envoyés (une liste) étaient nuls ... la chose est .. Quand je teste ma méthode avec SOAP UI cela fonctionne !! et je reçois ce que je veux, mais à partir d'Android la demande XML est en cours de construction différent ici est le XML: (! This Works XML)Comment construire une demande SOAP à partir d'Android comme demande d'interface SOAP?

UI SOAP:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ws="http://ws.soap.net/"> 
    <soapenv:Header/> 
<soapenv:Body> 
    <ws:GetSomething> 
    <!--Zero or more repetitions:--> 
    <List> 
     <!--Optional:--> 
     <id>000001</id> 
     <!--Optional:--> 
     <type>Sign</type> 
    </List> 
    </ws:GetSomething> 

Comme vous pouvez le voir c'est le xml que SOAP UI construit comme demande à mes ws

Et c'est le XML que j'ai trouvé lors du débogage sur Android:

<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:GetSomething xmlns:n0="http://ws.soap.net/"> 
<n0:List> 
<id>000001</id> 
<tipo>sign</tipo> 
<id>000002</id> 
<tipo>sign</tipo> 
<id>000003</id> 
<tipo>sign</tipo> 
</n0:List> 
</n0:GetSomething> 
</v:Body> 
</v:Envelope> 

Ainsi, le XML généré par le débogage sur Android, quand je coller sur l'interface utilisateur SOAP, juste dit que les paramètres que je Sent (une liste) étaient nulles ...

J'ai testé le code XML généré dans Android et seulement fonctionne si je supprimer le préfixe "n0" avant "Liste" Je veux dire:

de ceci:

à ceci:

<List> 
</List> 

T son est ma requête SOAP Android:

private final String SOAP_NAMESPACE = "http://ws.soap.net/"; 
private final StringURL_SOAP="http://MI_IP:PORT/GetSomeRest/WebServiceTest"; 
private final String SOAP_SOMETHING = "GetSomething"; 
private final String SOAP_ACTION_GETSOMETHING = "http://ws.soap.net/" + SOAP_SOMETHING; 
    public SoapObject SendSigns(ArrayList<Signs> paramSigns) 
{  
SoapObject request = new SoapObject(SOAP_NAMESPACE, SOAP_SOMETHING); 

request.addSoapObject(buildArray(paramSigns)); 

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
     SoapEnvelope.VER11); 

new MarshalBase64().register(envelope); 
envelope.bodyOut = request; 
envelope.setOutputSoapObject(request); 
envelope.setAddAdornments(false); 
envelope.implicitTypes= true; 
envelope.dotNet=true; 
envelope.headerOut = new org.kxml2.kdom.Element[1]; 

HttpTransportSE androidHttpTransport = new HttpTransportSE(URL_SOAP); 

try { 
    androidHttpTransport.debug = true; 

    androidHttpTransport.call(SOAP_ACTION_GETSOMETHING, envelope); 

    SoapObject Object = (SoapObject) envelope.getResponse(); 

    if(Object!=null) 
    { 
     return Object; 
    } 

} catch (Exception e) { 
    Log.d("CALL DUMP", "requestError: "+androidHttpTransport.requestDump); 
    Log.d("CALL DUMP", "responseEror: "+androidHttpTransport.responseDump); 
    Log.e("ERROR: ", String.valueOf(e)); 

}   
return null; 

}

Répondre

0

mettrez-vous l'espace entre URL_SOAP et cordes?

ici est le code ur:

private final StringURL_SOAP="http://MI_IP:PORT/GetSomeRest/WebServiceTest"; 

correct:

private final String URL_SOAP="http://MI_IP:PORT/GetSomeRest/WebServiceTest";