Entra

View Full Version : [J2ME] Richiesta SOAP a web services


djdedo86
04-03-2010, 17:16
Salve a tutti ragazzi, sto provando a scrivere una applicazioncina in j2me che si interfacci con dei web services, in particolare quelli di via michelin.
Ho creato un metodo che mi invia una richiesta soap in un messaggio http ma il server mi ritorna un errore.
In particolare il metodo che mi fa la richiesta è questo

private void getAuthenticationId() {

HttpsConnection connection;
InputStream is;
OutputStream os;

try {
// apro connessione al server
connection = (HttpsConnection) Connector.open(this.urlServerAuthentication, Connector.READ_WRITE);

// setto header e tipo di comunicazione
connection.setRequestMethod(HttpConnection.POST);
connection.setRequestProperty("User-agent", "Dedo Michelin Guide");
connection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
connection.setRequestProperty("SOAPAction", "\"\"");

// setto e invio la richiesta al server
String request = XmlAccessManagementCreator.getAuthenticationId(this.username, this.password, "60");
os = connection.openDataOutputStream();
os.write(request.getBytes());

// leggo la risposta del server
is = connection.openDataInputStream();
String response = "";
int ch;
while ((ch = is.read()) != -1) {
response += (char) ch;
}

System.out.println(response);
} catch (IOException e) {
e.printStackTrace();
}
}

il metodo che mi ritorna l'xml della richiesta è questo

public static final String getAuthenticationId(String username, String password, String duration) {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?>\n"+
"<SOAP-ENV:Envelope\n"+
"xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"\n"+
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n"+
"<SOAP-ENV:Body>"+
"<impl:getAuthenticationIdRequest soapenv:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:impl=\"http://service.security.ws2.viamichelin.com\">\n"+
"<impl:getAuthenticationId\n"+
"<login xsi:type=\"xsd:string\">"+username+"</login>"+
"<password xsi:type=\"xsd:string\">"+password+"</password>"+
"<duration xsi:type=\"xsd:int\">"+duration+"</duration>"+
"<impl:getAuthenticationId>"+
"</SOAP-ENV:Body>\n"+
"</SOAP-ENV:Envelope>";
return xml;
}


e l'errore che mi ritorna il server è questo


<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server.userException</faultcode>
<faultstring>org.xml.sax.SAXParseException: The prefix &quot;soapenv&quot; for attribute &quot;soapenv:encodingStyle&quot; associated with an element type &quot;impl:getAuthenticationIdRequest&quot; is not bound.</faultstring>
<detail/>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>


Sinceramente non so che pesci pigliare, a chi interessasse questo è il link per il file wsdl
link (https://webservices.viamichelin.com/ws2/services/AccessManagement?wsdl)

P.S. mi scuso per il lungo post :P

djdedo86
07-03-2010, 09:23
Nessuno può darmi una mano? :(

djdedo86
08-03-2010, 16:27
Ragazzi ho risolto, sbagliavo un pò a fare delle dichiarazioni, questo è l'xml corretto

public static final String getAuthenticationId(String username, String password, String duration) {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?>\n"+
"<soapenv:Envelope " +
"xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" "+
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n"+
"<soapenv:Body>"+
"<impl:getAuthenticationId xmlns:impl=\"http://schemas.xmlsoap.org/soap/encoding/\">\n"+
"<login xsi:type=\"xsd:string\">"+username+"</login>"+
"<password xsi:type=\"xsd:string\">"+password+"</password>"+
"<duration xsi:type=\"xsd:int\">"+duration+"</duration>"+
"</impl:getAuthenticationId>"+
"</soapenv:Body>\n"+
"</soapenv:Envelope>";
return xml;
}