Authentification avec KSOAP
Bonjour,
J'utilise KSOAP pour consommer un WebService.
Voici mon code
Code:
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:
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:
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:
1 2
| Mot_De_Passe = null
utilisateur = null |
Les solutions testées :
Créer un header
Code:
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.