работа с dotNet веб-сервисом.

Ответить
Danylo
Сообщения: 1
Зарегистрирован: 25 янв 2013, 11:50

работа с dotNet веб-сервисом.

Сообщение Danylo » 29 янв 2013, 13:05

добрый день.

если кто то может то помогите мне. я в андроид разработки новенький и только учусь.

есть веб-сервис написаный на 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>

я уже неделю мучаюсь никак не могу получить нормальный ответ, с которым можно было что то сделать.

может у вас есть какие то другие идеи как розпарсить этот респонс.
пожалуйста помогите.

Спасибо.

Ответить