если кто то может то помогите мне. я в андроид разработки новенький и только учусь.
есть веб-сервис написаный на dotNet.
вот его запрос
Код: Выделить всё
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:apis="http://my.company.com/">
<soapenv:Header/>
<soapenv:Body>
<apis:GetInbox>
<!--Optional:-->
<apis:UserCode>Oleg</apis:UserCode>
<apis:WorkflowStatus>RUNNING</apis:WorkflowStatus>
<apis:IsTest>1</apis:IsTest>
</apis:GetInbox>
</soapenv:Body>
</soapenv:Envelope>
Код: Выделить всё
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetInboxResponse xmlns="http://my.company.com/">
<GetInboxResult>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Inbox">
<xs:complexType>
<xs:sequence>
<xs:element name="RowNumber" type="xs:long" minOccurs="0"/>
<xs:element name="WORKFLOWINSTANCE" type="xs:int" minOccurs="0"/>
<xs:element name="STEP" type="xs:int" minOccurs="0"/>
<xs:element name="INSTANCEDESCRIPTION" type="xs:string" minOccurs="0"/>
<xs:element name="STEPSTATUS" type="xs:string" minOccurs="0"/>
<xs:element name="STEPTYPE" type="xs:string" minOccurs="0"/>
<xs:element name="STARTTIME" type="xs:dateTime" minOccurs="0"/>
<xs:element name="SENTBY" type="xs:string" minOccurs="0"/>
<xs:element name="WORKFLOWVERSION" type="xs:int" minOccurs="0"/>
<xs:element name="STEPCODE" type="xs:string" minOccurs="0"/>
<xs:element name="WORKFLOWSTATUS" type="xs:string" minOccurs="0"/>
<xs:element name="WORKFLOWSTATUSDESCRIPTION" type="xs:string" minOccurs="0"/>
<xs:element name="WORKFLOW" type="xs:string" minOccurs="0"/>
<xs:element name="WORKFLOWDESCRIPTION" type="xs:string" minOccurs="0"/>
<xs:element name="STEPDESCRIPTION" type="xs:string" minOccurs="0"/>
<xs:element name="PRIORITY" type="xs:unsignedByte" minOccurs="0"/>
<xs:element name="STEPTYPEDESCRIPTION" type="xs:string" minOccurs="0"/>
<xs:element name="STEPSTATUSDESCRIPTION" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<Inbox diffgr:id="Inbox1" msdata:rowOrder="0" diffgr:hasChanges="modified">
<RowNumber>1</RowNumber>
<WORKFLOWINSTANCE>6833</WORKFLOWINSTANCE>
<STEP>113646</STEP>
<INSTANCEDESCRIPTION>Tgdfgfd</INSTANCEDESCRIPTION>
<STEPSTATUS>P</STEPSTATUS>
<STEPTYPE>N</STEPTYPE>
<STARTTIME>2012-06-08T15:43:51.4+03:00</STARTTIME>
<SENTBY>xxx</SENTBY>
<WORKFLOWVERSION>388</WORKFLOWVERSION>
<STEPCODE>GENERAL_ADMINISTRATOR</STEPCODE>
<WORKFLOWSTATUS>RUNNING</WORKFLOWSTATUS>
<WORKFLOWSTATUSDESCRIPTION>Running</WORKFLOWSTATUSDESCRIPTION>
<WORKFLOW>TRANSFERS_FLOW</WORKFLOW>
<WORKFLOWDESCRIPTION>Transfers flow</WORKFLOWDESCRIPTION>
<STEPDESCRIPTION>General administrator</STEPDESCRIPTION>
<PRIORITY>5</PRIORITY>
<STEPTYPEDESCRIPTION>Normal</STEPTYPEDESCRIPTION>
<STEPSTATUSDESCRIPTION>In the pool</STEPSTATUSDESCRIPTION>
</Inbox>
<Inbox diffgr:id="Inbox2" msdata:rowOrder="1" diffgr:hasChanges="modified">
<RowNumber>2</RowNumber>
<WORKFLOWINSTANCE>6831</WORKFLOWINSTANCE>
<STEP>113634</STEP>
<INSTANCEDESCRIPTION>dfgfdgffg</INSTANCEDESCRIPTION>
<STEPSTATUS>P</STEPSTATUS>
<STEPTYPE>N</STEPTYPE>
<STARTTIME>2012-06-08T15:32:00.9+03:00</STARTTIME>
<SENTBY>dfgfdgfd</SENTBY>
<WORKFLOWVERSION>388</WORKFLOWVERSION>
<STEPCODE>GENERAL_ADMINISTRATOR</STEPCODE>
<WORKFLOWSTATUS>RUNNING</WORKFLOWSTATUS>
<WORKFLOWSTATUSDESCRIPTION>Running</WORKFLOWSTATUSDESCRIPTION>
<WORKFLOW>TRANSFERS_FLOW</WORKFLOW>
<WORKFLOWDESCRIPTION>Transfers flow</WORKFLOWDESCRIPTION>
<STEPDESCRIPTION>General administrator</STEPDESCRIPTION>
<PRIORITY>5</PRIORITY>
<STEPTYPEDESCRIPTION>Normal</STEPTYPEDESCRIPTION>
<STEPSTATUSDESCRIPTION>In the pool</STEPSTATUSDESCRIPTION>
</Inbox>
</NewDataSet>
<diffgr:before>
<Inbox diffgr:id="Inbox1" msdata:rowOrder="0" xmlns="">
<RowNumber>1</RowNumber>
<WORKFLOWINSTANCE>6833</WORKFLOWINSTANCE>
<STEP>113646</STEP>
<INSTANCEDESCRIPTION>dfgfdgfdgfd</INSTANCEDESCRIPTION>
<STEPSTATUS>P</STEPSTATUS>
<STEPTYPE>N</STEPTYPE>
<STARTTIME>2012-06-08T15:43:51.4+03:00</STARTTIME>
<SENTBY>dfgfdgfd</SENTBY>
<WORKFLOWVERSION>388</WORKFLOWVERSION>
<STEPCODE>GENERAL_ADMINISTRATOR</STEPCODE>
<WORKFLOWSTATUS>RUNNING</WORKFLOWSTATUS>
<WORKFLOWSTATUSDESCRIPTION>Running</WORKFLOWSTATUSDESCRIPTION>
<WORKFLOW>TRANSFERS_FLOW</WORKFLOW>
<WORKFLOWDESCRIPTION>Transfers flow</WORKFLOWDESCRIPTION>
<STEPDESCRIPTION>General administrator</STEPDESCRIPTION>
<PRIORITY>5</PRIORITY>
</Inbox>
<Inbox diffgr:id="Inbox2" msdata:rowOrder="1" xmlns="">
<RowNumber>2</RowNumber>
<WORKFLOWINSTANCE>6831</WORKFLOWINSTANCE>
<STEP>113634</STEP>
<INSTANCEDESCRIPTION>Tdfgfdfdgfdg</INSTANCEDESCRIPTION>
<STEPSTATUS>P</STEPSTATUS>
<STEPTYPE>N</STEPTYPE>
<STARTTIME>2012-06-08T15:32:00.9+03:00</STARTTIME>
<SENTBY>dfgfdgfdg</SENTBY>
<WORKFLOWVERSION>388</WORKFLOWVERSION>
<STEPCODE>GENERAL_ADMINISTRATOR</STEPCODE>
<WORKFLOWSTATUS>RUNNING</WORKFLOWSTATUS>
<WORKFLOWSTATUSDESCRIPTION>Running</WORKFLOWSTATUSDESCRIPTION>
<WORKFLOW>TRANSFERS_FLOW</WORKFLOW>
<WORKFLOWDESCRIPTION>Transfers flow</WORKFLOWDESCRIPTION>
<STEPDESCRIPTION>General administrator</STEPDESCRIPTION>
<PRIORITY>5</PRIORITY>
</Inbox>
</diffgr:before>
</diffgr:diffgram>
</GetInboxResult>
</GetInboxResponse>
</soap:Body>
</soap:Envelope>
для решения вопроса с отсылкой и парсингом soap воспользовался библиотекой ksoap2 - специально созданной для этого, как написал гугл.
вот мой код
Код: Выделить всё
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.textView2);
Category C = new Category();
SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
String login= "test";
String domain = "testDomain";
Request.addProperty("UserCode", "user");
Request.addProperty("IsTest", "1");
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.dotNet = true;
soapEnvelope.implicitTypes = true;
soapEnvelope.setOutputSoapObject(Request);
soapEnvelope.addMapping(NAMESPACE, "GetInboxResult", UserResponse.class);
// soapEnvelope.addMapping(NAMESPACE, "GetInbox", User.class);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
HttpTransportSE url = new HttpTransportSE(URL);
String loginn = "login";
String password = "xxx";
String dom = "domain";
HttpTransportBasicAuthSE url2 = new HttpTransportBasicAuthSE(URL, loginn, password);
NtlmTransport vv = new NtlmTransport() {};
vv.setCredentials(URL, loginn, password, dom, null);
try {
vv.debug = true;
vv.call(SOAP_ACTION, soapEnvelope);
Log.i("TESTTTT ","new_call ");
UserResponse response = (UserResponse)soapEnvelope.bodyIn;
Log.i("Response",response.toString() );
} catch (Exception e) {
e.printStackTrace();
}
}
Код: Выделить всё
package com.example.testtttttttttttttttttttt;
import java.util.Date;
import java.util.Hashtable;
import org.ksoap2.serialization.KvmSerializable;
import org.ksoap2.serialization.PropertyInfo;
import android.R.bool;
import android.text.method.DateTimeKeyListener;
public class UserResponse implements KvmSerializable {
public String UserCode;
public String WorkflowCode;
public String StepType;
public String StartTime;
public String EndTime;
public String IDList;
public String SearchKeys;
public String WorkflowStatus;
public int StartRecord;
public int MaxRecord;
public boolean IsTest;
//public User user;
public Object getProperty(int arg0) {
switch (arg0) {
case 0:
return UserCode;
case 1:
return WorkflowCode;
case 2:
return StepType;
case 3:
return StartTime;
case 4:
return EndTime;
case 5:
return IDList;
case 6:
return SearchKeys;
case 7:
return WorkflowStatus;
case 8:
return StartRecord;
case 9:
return MaxRecord;
case 10:
return IsTest;
default:
break;
}
return null;
}
public int getPropertyCount() {
return 3;
}
public void getPropertyInfo(int index, Hashtable arg1, PropertyInfo info) {
switch (index) {
case 0:
info.type = PropertyInfo.STRING_CLASS;
info.name = "UserCode";
break;
case 1:
info.type = PropertyInfo.STRING_CLASS;
info.name = "WorkflowCode";
break;
case 2:
info.type = PropertyInfo.STRING_CLASS;
info.name = "StepType";
break;
case 3:
info.type = PropertyInfo.STRING_CLASS;
info.name = "StartTime";
break;
case 4:
info.type = PropertyInfo.STRING_CLASS;
info.name = "EndTime";
break;
case 5:
info.type = PropertyInfo.STRING_CLASS;
info.name = "IDList";
break;
case 6:
info.type = PropertyInfo.STRING_CLASS;
info.name = "SearchKeys";
break;
case 7:
info.type = PropertyInfo.STRING_CLASS;
info.name = "WorkflowStatus";
break;
case 8:
info.type = PropertyInfo.INTEGER_CLASS;
info.name = "StartRecord";
break;
case 9:
info.type = PropertyInfo.INTEGER_CLASS;
info.name = "MaxRecord";
break;
case 10:
info.type = PropertyInfo.BOOLEAN_CLASS;
info.name = "IsTest";
break;
default:
break;
}
}
public void setProperty(int index, Object value) {
switch (index) {
case 0:
this.UserCode = value.toString();
break;
case 1:
this.WorkflowCode = value.toString();
break;
case 2:
this.StepType = value.toString();
break;
case 3:
this.StartTime = value.toString();
break;
case 4:
this.EndTime = value.toString();
break;
case 5:
this.IDList = value.toString();
break;
case 6:
this.SearchKeys = value.toString();
break;
case 7:
this.WorkflowStatus = value.toString();
break;
case 8:
this.StartRecord = Integer.parseInt(value.toString());
break;
case 9:
this.MaxRecord = Integer.parseInt(value.toString());
break;
case 10:
this.IsTest =Boolean.parseBoolean(value.toString());
default:
break;
}
}
}
Failed to parse soap message :double ID
действительно если глянуть на респонс на первый взгляд, то можно увидеть что здесь есть 2 тега с инбоксом
но они разделены
тегом
<diffgr:before>
я уже неделю мучаюсь никак не могу получить нормальный ответ, с которым можно было что то сделать.
может у вас есть какие то другие идеи как розпарсить этот респонс.
пожалуйста помогите.
Спасибо.