2012-08-31 50 views
2

我必須做出以下肥皂請求,但我們不能成功,我嘗試了幾種方式並失敗,我總是得到一個空白字段作爲迴應。如何在Android中創建一個具有多個屬性的ksoap2請求?

請求應該是這樣的:

POST /service.asmx HTTP/1.1 
Host: host 
Content-Type: text/xml; charset=utf-8 
Content-Length: length 
SOAPAction: "SOAPAction" 

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <GetQuickParkEvents xmlns="NAMESPACE"> 
     <User> 
     <ID>int</ID> 
     <Name>string</Name> 
     <UserName>string</UserName> 
     <Password>string</Password> 
     </User> 
     <Filter> 
     <TimeSpan> 
      <Since>dateTime</Since> 
      <To>dateTime</To> 
     </TimeSpan> 
     <Reg>string</Reg> 
     <Nalog>string</Nalog> 
     <Status>string</Status> 
     <Value>string</Value> 
     </Filter> 
    </GetQuickParkEvents> 
    </soap:Body> 
</soap:Envelope> 

我有這樣的代碼現在:

public static Object vrati_ds(String id, String name, String username, String password, String since, String to, String reg, String korisnik, String nalog, String nameString status, String value){ 
    try{ 
     SoapObject _client = new SoapObject(Konstante.NAMESPACE1, Konstante.METHOD_NAME); 
     _client.addProperty("ID", id); 
     _client.addProperty("Name", name); 
     _client.addProperty("UserName", username); 
     _client.addProperty("Password", password); 
     _client.addProperty("Since", since); 
     _client.addProperty("To", to); 
     _client.addProperty("Reg", reg); 
     _client.addProperty("Korisnik_app", korisnik); 
     _client.addProperty("Nalog", nalog); 
     _client.addProperty("Status", status); 
     _client.addProperty("Value", value); 
     SoapSerializationEnvelope _envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     _envelope.dotNet = true; 
     _envelope.setOutputSoapObject(_client); 
     HttpTransportSE _ht = new HttpTransportSE(Konstante.URL1); 
     _ht.call(Konstante.SOAP_ACTION, _envelope); 
     return _envelope.getResponse(); 
    } catch(Exception e) { 
     return null; 
    } 
} 

我感謝你在前進,如果有人能幫助我!

回答

2

現在我手動硬編碼XML請求,所以如果有人能幫助,這裏是源代碼的工作原理:

public static Object getEvent2(int id, String name, String username, String password, String since, String to, 
     String reg, String nalog, String status, String value) throws Exception { 

    String response= null; 
    String xml = null; 

    HttpClient httpClient = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost(Konstante.URL); 

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.encodingStyle = SoapSerializationEnvelope.ENC; 

    String bodyOut = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"; 
    bodyOut += "<soap:Body><"+Konstante.EVENS_METHOD_NAME+" xmlns=\"" + Konstante.NAMESPACE + "\">"; 
    bodyOut += "<User><ID>" + id + "</ID><Name>" + name + "</Name><UserName>"; 
    bodyOut += username + "</UserName><Password>" + password + "</Password></User>"; 
    bodyOut += "<Filter><TimeSpan><Since>" + since + "+02:00" + "</Since><To>" + to + "+02:00" +"</To></TimeSpan>"; 
    bodyOut += "<Reg>" + reg + "</Reg><Nalog>" + nalog + "</Nalog><Status>" + status + "</Status><Value>" + value + "</Value></Filter>"; 
    bodyOut += "</"+Konstante.EVENS_METHOD_NAME+"></soap:Body></soap:Envelope>"; 

    xml = bodyOut; 

    StringEntity se = new StringEntity(xml, HTTP.UTF_8); 
    se.setContentType("text/xml"); 
    httpPost.addHeader(Konstante.EVENS_SOAP_ACTION, Konstante.URL); 
    httpPost.setEntity(se); 

    HttpResponse httpResponse = httpClient.execute(httpPost); 
    HttpEntity resEntity = httpResponse.getEntity(); 
    response = EntityUtils.toString(resEntity); 

    return response; 
} 
1

我也遇到了同樣的問題。看起來信封對SOAP長度有限制,不允許大於500 ...不確定。

1

有點晚了,但這裏有一個答案。 根據this tips,您可以按照一些示例進行操作。對於你的情況,我認爲這應該工作:

SoapObject request = new SoapObject(Konstante.NAMESPACE1, "GetQuickParkEvents"); 

SoapObject user = new SoapObject(Konstante.NAMESPACE1, "User"); 
user.addProperty("ID", "int"); 
user.addProperty("Name", "string"); 
user.addProperty("UserName", "UserName"); 
user.addProperty("Password", "Password"); 

SoapObject filter = new SoapObject(Konstante.NAMESPACE1, "Filter"); 

SoapObject timeSpan = new SoapObject(Konstante.NAMESPACE1, "TimeSpan"); 
timeSpan.addProperty("Since", "dateTime"); 
timeSpan.addProperty("To", "dateTime"); 

filter.addSoapObject(timeSpan); 
filter.addProperty("Reg", "string"); 
filter.addProperty("Nalog", "string"); 
filter.addProperty("Status", "string"); 
filter.addProperty("Value", "string"); 


request.addSoapObject(user); 
request.addSoapObject(filter); 
相關問題