Bonjour,
J'utilise KSOAP pour consommer un WebService.
Voici mon code
Le webservice expose l'opération comme suit
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; }
et dans un autre URL
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>
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.
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>
Mon problème est dans le cas de KSOAP sous Android, le serveur me retourne
Les solutions testées :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Mot_De_Passe = null utilisateur = null
Créer un header
Même erreur.
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;
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.
Partager