Bonjour,

j'ai voulu utiliser le web service pour authentifier un client mobile (développé en J2ME), un serveur Tomcat et KSoap

pour ce la,

j'ai commencé par créer le web service, pour le moment, et pour simplifier les taches, j'ai crée
une simple méthode getResponse qui retourne dans tout les cas un String="True".
Le fichier WSDL généré est le suivant:


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
47
48
49
50
51
52
53
54
55
56
<!--
Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.4-b01-.
-->
−
<!--
Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.4-b01-.
-->
−
<definitions targetNamespace="http://MyPackage/" name="MyServiceService">
−
<types>
−
<xsd:schema>
<xsd:import namespace="http://MyPackage/" schemaLocation="http://localhost:8080/WebApplication2/MyService?xsd=1"/>
</xsd:schema>
</types>
−
<message name="getResponse">
<part name="parameters" element="tns:getResponse"/>
</message>
−
<message name="getResponseResponse">
<part name="parameters" element="tns:getResponseResponse"/>
</message>
−
<portType name="MyService">
−
<operation name="getResponse">
<input message="tns:getResponse"/>
<output message="tns:getResponseResponse"/>
</operation>
</portType>
−
<binding name="MyServicePortBinding" type="tns:MyService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
−
<operation name="getResponse">
<soap:operation soapAction=""/>
−
<input>
<soap:body use="literal"/>
</input>
−
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
−
<service name="MyServiceService">
−
<port name="MyServicePort" binding="tns:MyServicePortBinding">
<soap:address location="http://localhost:8080/WebApplication2/MyService"/>
</port>
</service>
</definitions>

Les caractéristique de ce service sont:




Endpoint
Service Name: {http://MyPackage/}MyServiceService
Port Name: {http://MyPackage/}MyServicePort

Information
Address: http://localhost:8080/WebApplication2/MyService
WSDL: http://localhost:8080/WebApplication2/MyService?wsdl
Implementation class: MyPackage.MyService

La MIDlet à partir de laquelle je vais appeler le service est la suivante:




/
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
 
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransport;
 
 
public class Midlet extends MIDlet implements CommandListener {
 
private Form form;
private Display disp;
private StringBuffer tamponEcriture;
private Command ok, exit;
private Object resultatRequeteSOAP = null;
private SoapObject objetSOAPHello;
private HttpTransport connexionServeur;
private SoapSerializationEnvelope envelope;
private String urlService = "http://localhost:8080";
private String nomService = "url:http://localhost:8080/WebApplication2/MyService?wsdl";
private TextField enter1;
private TextField enter2;
 
public Midlet() {
// super();
form = new Form("Welcome Form");
exit = new Command("Exit", Command.SCREEN, 1);
ok = new Command("OK", Command.SCREEN, 1);
enter1 = new TextField("Tapez un Login", "", 20,
TextField.ANY);
enter2 = new TextField("Tapez un Mot de passe", "", 20,
TextField.ANY);
form.append(enter1);
form.append(enter2);
form.addCommand(ok);
form.addCommand(exit);
form.setCommandListener(this);
tamponEcriture = new StringBuffer("");
 
}
 
public void startApp() {
disp = Display.getDisplay(this);
disp.setCurrent(form);
 
}
 
public void pauseApp() {
}
 
public void destroyApp(boolean unconditional) {
}
 
public void commandAction(Command c, Displayable d) {
if (c == ok) {
System.out.println("aaaaaaaaaaaaa");
InvokeService();
System.out.println("bbbbbbbbbbbbbbb");
afficherResultat();
System.out.println("cccccccccccc");
}
}
 
private void InvokeService() {
try {
 
connexionServeur = new HttpTransport(urlService);
connexionServeur.debug = true;
objetSOAPHello = new SoapObject(nomService, "getResponse");
envelope = new SoapSerializationEnvelope(SoapSerializationEnvelope.VER11);
envelope.bodyOut = objetSOAPHello;
 
 
} catch (Exception aE) {
System.out.println("Erreur : " + aE.getMessage());
aE.printStackTrace();
return;
}
 
try {
// invoquation de la méthode sur le serveur
connexionServeur.call(null, envelope);
//connexionServeur.call(urlService, envelope);
 
// recuperation de la réponse du serveur
resultatRequeteSOAP = envelope.getResponse();
this.tamponEcriture.append("\nCon : " + resultatRequeteSOAP);
 
} catch (Exception aE) {
System.out.println("Erreur : " + aE.getMessage());
aE.printStackTrace();
}
}
 
public void afficherResultat() {
System.out.println( tamponEcriture.toString());
}
}


Quand je fait un Run, j'obtient un erreur signalant la ligne:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
connexionServeur.call(null, envelope);


Il parait que c'est un problème d'url ,touchant


private String urlService = "http://localhost:8080";
private String nomService = "url:http://localhost:8080/WebApplication2/MyService?wsdl";

L'erreur que j'obtient aprés l'appui de la commande OK pour s'authentifier est:

Citation : erreur
aaaaaaaaaaaaa
Erreur : expected: END_TAG {http://schemas.xmlsoap.org/soap/envelope/}Body (position:END_TAG </{http://schemas.xmlsoap.org/soap/envelope/}S:Fault>@1:277 in java.io.InputStreamReader@e5125d64)
org.xmlpull.v1.XmlPullParserException: expected: END_TAG {http://schemas.xmlsoap.org/soap/envelope/}Body (position:END_TAG </{http://schemas.xmlsoap.org/soap/envelope/}S:Fault>@1:277 in java.io.InputStreamReader@e5125d64)
at org.kxml2.io.KXmlParser.exception(), bci=44
at org.kxml2.io.KXmlParser.require(), bci=80
at org.ksoap2.SoapEnvelope.parse(), bci=150
at org.ksoap2.transport.Transport.parseResponse(), bci=27
at org.ksoap2.transport.HttpTransport.call(), bci=291
at Midlet.InvokeService(Midlet.java:91)
at Midlet.commandAction(Midlet.java:64)
at javax.microedition.lcdui.Display$ChameleonTunnel.callScreenListener(), bci=46
at com.sun.midp.chameleon.layers.SoftButtonLayer.processCommand(), bci=74
at com.sun.midp.chameleon.layers.SoftButtonLayer.soft1(), bci=37
at com.sun.midp.chameleon.layers.SoftButtonLayer.keyInput(), bci=36
at com.sun.midp.chameleon.CWindow.keyInput(), bci=38
at javax.microedition.lcdui.Display$DisplayEventConsumerImpl.handleKeyEvent(), bci=17
at com.sun.midp.lcdui.DisplayEventListener.process(), bci=277
at com.sun.midp.events.EventQueue.run(), bci=179
at java.lang.Thread.run(Thread.java:619)
bbbbbbbbbbbbbbb
ccccccccccccc



Quelqu'un a une idée?
Merci