2014-10-07 8 views
6

Próbuję użyć doposażenia w mojej aplikacji zadzwonić WSDL ZestawienieWywołanie WSDL usługi internetowej przy użyciu modernizację android

jak ten

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

ale otrzymuję wyjątek

modernizacji. RetrofitError: 400 Bad Request

jeśli ten sam kod próbowałem użyć żądania postu jako wykonaj, działa poprawnie.


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

Proszę o pomoc ...

+0

byłaś w stanie rozwiązać go za pomocą Retrofit? –

Odpowiedz

-1

dlaczego nie spróbować ksoap. to jest całkiem niesamowite. Dostosowałem go do mojej aplikacji, ale możesz uzyskać dostęp do biblioteki od here. Oto, jak to zrobić, używając mojej niestandardowej wersji ksoap lubię wywoływać minisoap. oto próbka

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

można uzyskać kopię minisoap z here i mam nadzieję, że nie jest to zbyt późno.

1

To jest możliwe przy użyciu prostych i modernizację biblioteki xml widać here