2014-10-07 16 views
6

Ich versuche Retrofit in meiner Anwendung verwenden WSDL WebserviceWSDL Web Service aufrufen Retrofit mit Android

wie diese

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

Aber ich immer

Ausnahme

Retrofit am nennen. RetrofitError: 400 Schlechte Anfrage

Wenn der gleiche Code ich habe versucht, Post-Anfrage als folge, es funktioniert einwandfrei.


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

Bitte helfen ...

+0

Haben Sie in der Lage, es zu lösen Retrofit mit? –

Antwort

-1

, warum Sie nicht versuchen ksoap. es ist ziemlich erstaunlich. Ich habe es an meine App angepasst, aber Sie können von here auf die Bibliothek zugreifen. Hier ist, wie ich es mit meiner benutzerdefinierten Version von KSOAP ich mag Minisoap aufrufen. Hier ist ein Beispiel

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

Sie eine Kopie minisoap von here bekommen kann und ich hoffe, es ist nicht zu spät.

1

Dies ist möglich, Retrofit und einfache XML-Bibliothek verwenden, können Sie here sehen