2014-10-07 18 views
6

Sto cercando di utilizzare retrofit nella mia richiesta di chiamare WSDL webservicechiamata servizio Web WSDL utilizzando retrofit Android

come questo

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 ""; 
     } 

Ma sto ottenendo eccezione

retrofit. RetrofitError: 400 Bad Request

se stesso codice ho provato a utilizzare post richiesta come seguire, funziona correttamente.


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(); 
     } 

Aiutateci ...

+0

Avete in grado di risolverlo utilizzando retrofit? –

risposta

-1

perché non provare ksoap. è piuttosto sorprendente. L'ho personalizzato per adattarlo alla mia app, ma puoi accedere alla libreria da here. Ecco come lo faccio usando la mia versione personalizzata di ksoap che mi piace chiamare minisoap. Ecco un esempio

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; 
} 

È possibile ottenere una copia di minisoap da here e la sua non sperate troppo tardi.

1

Questo è possibile utilizzando retrofit e libreria XML semplice che si può vedere here

Problemi correlati