Llamar al servicio web WSDL mediante el uso de retrofit android
Estoy tratando de usar retrofit en mi aplicación para llamar a WSDL webservice
Me gusta esto
- Crear sobres de jabón con encabezado de seguridad en android utilizando ksoap2
- Generar Java desde WSDL para usarlo en Android con el cliente SOAP ksoap2-android?
- Cómo generar clase java simple de WSDL?
- Ksoap2: java.lang.IllegalArgumentException: size <= 0 mientras hace una http.call
- Cómo llamar a un servicio web usando phonegap para android
public static String callWebservice(String username,String password) { String soapMessage="<?xml version=\"1.0\" encoding=\"utf-8\"?>"+ "<Envelope xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\">"+ "<Body>"+ "<AuthenticateUser xmlns=\"http://tempuri.org/\">"+ "<userName>"+username+"</userName>"+ "<password>"+Helper.md5(password).toUpperCase(Locale.getDefault())+"</password>"+ "</AuthenticateUser>"+ "</Body>"+ "</Envelope>"; RequestInterceptor requestInterceptor = new RequestInterceptor() { @Override public void intercept(RequestFacade request) { // request.addHeader("User-Agent", "Retrofit-Sample-App"); request.addHeader("SOAPAction", "http://tempuri.org/IAuthenticate/AuthenticateUser"); request.addHeader("Content-Type", "application/soap+xml;charset=utf-8"); request.addHeader("Content-Type", "text/xml;charset=utf-8"); } }; RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(Constants.WEBSERVICE_URL) .setRequestInterceptor(requestInterceptor) .build(); LoginApi loginApi=restAdapter.create(LoginApi.class); loginApi.getLogin(soapMessage,new Callback<String>() { @Override public void success(String arg0, Response arg1) { Helper.Log("Response==>", arg0); } @Override public void failure(RetrofitError arg0) { Helper.Log("error==>", arg0.toString()); } }); return ""; }
Pero estoy recibiendo una excepción
Retrofit.RetrofitError: 400 Petición incorrecta
Si el mismo código que he intentado usar la petición del poste como sigue, trabaja correctamente.
StringBuffer stringResponse = new StringBuffer(); try { HttpURLConnection connection; connection = (HttpURLConnection)new URL(Constants.WEBSERVICE_URL).openConnection(); connection.setUseCaches(false); connection.setDoOutput(true); connection.setDoInput(true); connection.setConnectTimeout(20000); connection.setReadTimeout(20000); connection.setRequestProperty("SOAPAction", "http://tempuri.org/IAuthenticate/AuthenticateUser"); connection.setRequestProperty("Content-Type", "application/soap+xml;charset=utf-8"); connection.setRequestProperty("Content-Type", "text/xml;charset=utf-8"); //connection.setRequestProperty("Accept-Encoding", "gzip"); connection.setRequestProperty("Content-Length", "" + soapMessage.length()); connection.setFixedLengthStreamingMode(soapMessage.length()); connection.setRequestMethod("POST"); OutputStream os = connection.getOutputStream(); os.write(soapMessage.getBytes("UTF-8"), 0, soapMessage.length()); os.flush(); os.close(); int status = connection.getResponseCode(); if(status==200) { BufferedReader reader = new BufferedReader( new InputStreamReader(connection.getInputStream()), 8 * 1024); String line = null; while ((line = reader.readLine()) != null) { stringResponse.append(line); } Helper.Log("Response==>", stringResponse.toString()); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
Por favor ayuda…
- Buscar SOAPAction desde un WSDL
- Cómo convertir wsdl a java?
- Cómo generar clases java desde el archivo WSDL
- "AndroidHttpTransport no se puede resolver a un tipo" error en ksoap2
- Cliente de servicio WSDL / SOAP de Android
Esto es posible utilizando retrofit y biblioteca simple xml que puede ver aquí
¿Por qué no intentas ksoap. es bastante asombroso. Lo personalizé para adaptarlo a mi aplicación, pero puedes acceder a la biblioteca desde aquí . Aquí es cómo lo hago usando mi versión de encargo de ksoap me gusta llamar minisoap. Aquí hay una muestra
void fetch() { MiniSoap soap_client = new MiniSoap(URL, NAMESPACE, METHOD); soap_client.addProperty("", ""); soap_client.addProperty("", ""); //true for Dotnet and false for other webservices soap_client.queryWS(IS_DOTNET, TIMEOUT); //if you just wish to test/view results System.out.println(soap_client.envelope.bodyIn); // or you can get them from a list List<String> responce = soap_client.full_report; // or like this List<String> response_2 = soap_client.results; // or you can get the xml results String xml_request = soap_client.androidHttpTransport.requestDump; String xml_response = soap_client.androidHttpTransport.responseDump; }
Usted puede obtener una copia de minisoap de aquí y espero que no sea demasiado tarde.