2013-08-19 26 views
0

我需要將此soap請求轉換爲java(Android)。我正在使用kso​​ap2庫來做到這一點,但我不斷收到需要的錯誤認證。 對Java的安全請求(Android)

我的Java代碼

 SoapObject remoteUser = new SoapObject(NAMESPACE, "RemoteUser"); 
       remoteUser.addProperty("UserLogin", "ws_admin"); 
       remoteUser.addProperty("UserPassword", "Password1"); 

       SoapObject userContact = new SoapObject(NAMESPACE, "UserContact"); 
       userContact.addProperty("UserLogin", "sqa101"); 
       userContact.addProperty("UserPassword", "Password1"); 

       request.addSoapObject(remoteUser); 
       request.addSoapObject(userContact); 
       SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
       envelope.dotNet = true; 
       envelope.setOutputSoapObject(request); 
       HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
       androidHttpTransport.debug = true; 
       androidHttpTransport.call(SOAP_ACTION, envelope); 
       SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); 
       webResponse = response.toString(); 

這是錯誤我得到: 九月八日至19日:58:35.690:W/System.err的(737):的SOAPFault - 的faultcode:「SOAP-ENV :服務器'faultstring:'3001:未知用戶試圖執行消息類型UserAuthenticationRequest。需要認證。' faultactor:'null'detail:[email protected]

任何幫助將不勝感激。

更新:我找到了答案。問題在於我使用的格式。以下代碼工作。

 PropertyInfo remoteUser =new PropertyInfo(); 
       remoteUser.setName("RemoteUser"); 
        SoapObject login = new SoapObject(); 
        login.addProperty("UserLogin", "admin"); 
        login.addProperty("UserAuthenticator", "Password"); 
       remoteUser.setValue(login); 
       remoteUser.setType(String.class); 
       request.addProperty(remoteUser); 

       PropertyInfo userContact =new PropertyInfo(); 
       userContact.setName("UserContact"); 
        SoapObject login2 = new SoapObject(); 
        login2.addProperty("UserLogin", "username"); 
        login2.addProperty("UserPassword", "Password"); 
       userContact.setValue(login2); 
       userContact.setType(String.class); 
       request.addProperty(userContact); 

回答

0

試試這個,

public SoapObject GetMethodDataWithParameter(String URL , String SoapAction , 
       String WebService , String MethodName , 
       String ParameterName[] , String ParameterValue[]) 
     { 
      WebServiceConfig objWSConfig = new WebServiceConfig(); 
      int ArryIndex = 0; 

      SoapObject resultsRequestSOAP = null ; 

      try 
      { 

       SoapObject request = new SoapObject(ws_Namespace,ws_Method); 

       for(ArryIndex = 0 ; ArryIndex < ParameterName.length ; ArryIndex ++) 
       { 
        PropertyInfo ParaObj = new PropertyInfo(); 
        ParaObj.type = PropertyInfo.OBJECT_CLASS; 
        ParaObj.namespace = ws_Namespace; 
        ParaObj.setName(ParameterName[ArryIndex].toString()); 
        ParaObj.setValue(ParameterValue[ArryIndex].toString()); 
        request.addProperty(ParaObj);  
       } 

       System.setProperty("http.keepAlive", "false"); 

       SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
       envelope.setOutputSoapObject(request); 
       envelope.dotNet = true; 
       //envelope.encodingStyle = SoapSerializationEnvelope.XSD; 
       envelope.setAddAdornments(true); 

       HttpTransportSE androidHttpTransport = new HttpTransportSE(ws_URL); 
       androidHttpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); 

       try 
       { 
        androidHttpTransport.call(ws_SOAPAction , envelope); 
       } 
       catch(SocketException se) 
       { 
        ERRORMSG = "Error in network connection." ; 
        Log.e(TAG, "Error in network connection."); 
        return resultsRequestSOAP; 
       } 
       androidHttpTransport.debug = true; 

       resultsRequestSOAP = (SoapObject) envelope.bodyIn; 

      } 
      catch (OutOfMemoryError e) 
      { 
       e.printStackTrace(); 
       ERRORMSG = "Application running in out of memory.." ; 
       Log.e(TAG , ERRORMSG); 
       return resultsRequestSOAP; 
      } 
      catch(SocketException e) 
      { 
       e.printStackTrace(); 
       ERRORMSG = "Error in network connection." ; 
       Log.e(TAG, ERRORMSG); 
       return resultsRequestSOAP; 
      } 
      catch (Exception e) 
      { 
       ERRORMSG = "Error while getting data." ; 
       Log.e(TAG, ERRORMSG); 
       e.printStackTrace(); 
      } 
      return resultsRequestSOAP; 
     } 

希望它會幫助你。