Bonjour,

J'utilise KSOAP pour consommer un WebService.

Voici mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    int SDK_INT = android.os.Build.VERSION.SDK_INT;
    if (SDK_INT > 8) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
 
        SoapSerializationEnvelope envelope = null;
        String NAMESPACE ="http://tempuri.org/";
 
        String METHOD_NAME = "Cree_Repas";
 
        String SOAP_ACTION = "http://..../" ;
 
        String URL = "mon url";
 
        AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL);
 
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
 
        PropertyInfo _dateProperty = new PropertyInfo();
 
        _dateProperty.type =  MarshalDate.class;  
        _dateProperty.name = "dateHeure_Demande";
        request.addProperty(_dateProperty);  
 
        request.addProperty("Repas", Constant.Last);
        envelope.dotNet = true; 
        //envelope.headerOut = header;
        envelope.setOutputSoapObject(request);
 
        envelope.setAddAdornments(false);
        envelope.implicitTypes = true;
 
                try
                {
                    httpTransportSE.call(SOAP_ACTION, envelope,);
 
                    Object response = (Object)envelope.getResponse();
 
                    return true;
                }
                catch (Exception e)
                {
                    e.printStackTrace();
 
                    return false;
                }
Le webservice expose l'opération comme suit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
<wsdl:operation name="Cree_Repas">
    <wsdl:input wsaw:Action="http://tempuri.org/IService/Cree_Repas" message="tns:IService_Cree_Repas_InputMessage"/>
    <wsdl:output wsaw:Action="http://tempuri.org/IService/Cree_RepasResponse" message="tns:IService_Cree_Repas_OutputMessage"/>
</wsdl:operation>
et dans un autre URL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
<xs:complexType name="Auth_Hvx">
<xs:sequence>
<xs:element minOccurs="0" name="Mot_De_Passe" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="Utilisateur" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
En créant un client en Java EE, j'appelle Cree_Repas tout simplement en appellant le classe auto-generée et je lui passe un objet Auth_Hvx qui prend le mot de passe et le nom d'utilisateur.

Mon problème est dans le cas de KSOAP sous Android, le serveur me retourne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Mot_De_Passe = null
utilisateur = null
Les solutions testées :
Créer un header
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
org.kxml2.kdom.Element[] header = new   org.kxml2.kdom.Element[1];
header[0] = new Element().createElement("http....", "Auth_Hvx");
 
Element username = new Element().createElement("http:..", "Utilisateur");
username.addChild(Node.TEXT, "user");
header[0].addChild(Node.ELEMENT, username);
 
Element password = new Element().createElement("http://...", "Mot_De_Passe");
password.addChild(Node.TEXT, "monPassword");
header[0].addChild(Node.ELEMENT, password);
 
envelope.headerOut = header;
Même erreur.

2ème test, utiliser un propertyInfo utilisateur et faire un addProperty de l'enveloppe et toujours le même problème.

Est-ce le httpTransportSE qui a besoin d'une chaîne d'authentification ?

Le serveur expose aussi une opération d'authentification mais j'ai la même erreur en essayant de consommer le service d'authentification.

Quelqu'un aurait-il une idée sur comment intégrer l'authentification ?

J'ai parcouru les forums, sans succès.

Merci d'avance pour votre aide.