没有看到KSOAP2复杂请求属性



我在从android设备向第三方公司服务器(服务器可以没有更改)发送复杂的SOAP请求时遇到问题。我正在使用KSOAP2库,其中一个属性缺失(服务器在klausimainull时出现错误)。当KSOAP2生成XML时,我的请求中的相同名称空间也会重复多次,因为我传递了大量的PropertyInfo。我的问题是,为什么服务器可以看到其他属性(它也会给出一个关于null的错误),但看不到klausimai ?

服务器公司给出的WS请求XML示例

?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <teiktiTemineAtaskaita xmlns="http://tempuri.org/">
         <userName>apps</userName>
         <password>mob2015*</password>
         <uzduotiesNr>24287</uzduotiesNr>
         <inspektavimas xmlns:a="http://schemas.datacontract.org/2004/07/DssisMP" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <a:apsilankymuObjekteSkaicius i:nil="true" />
            <a:atstovai i:nil="true" />
            <a:darbdavioBuveinesAdresas i:nil="true" />
            <a:darbdavioGimimoData i:nil="true" />
            <a:darbdavioKodas>110871120</a:darbdavioKodas>
            <a:darbdavioLytis i:nil="true" />
            <a:darbdavioPagrindineEkonomineVeikla i:nil="true" />
            <a:darbdavioPavadinimas i:nil="true" />
            <a:darbdavioPavarde i:nil="true" />
            <a:darbdavioTipas i:nil="true" />
            <a:darbdavioVardas i:nil="true" />
            <a:inspektavimoNr>11112245</a:inspektavimoNr>
            <a:inspektavimoPradzia>2015-07-23T00:00:00+03:00</a:inspektavimoPradzia>
            <a:inspektavimoTiksloKodas>111</a:inspektavimoTiksloKodas>
            <a:institucijos i:nil="true" />
            <a:savivaldybesKodas i:nil="true" />
            <a:temineAtaskaita>
               <a:klausimai>
                  <a:TAKlausimas>
                     <a:atsakymas>2</a:atsakymas>
                     <a:eilNr>1.</a:eilNr>
                     <a:klausimas i:nil="true" />
                     <a:kodas>1000</a:kodas>
                     <a:komentaras i:nil="true" />
                  </a:TAKlausimas>
                  <a:TAKlausimas>
                     <a:atsakymas>1</a:atsakymas>
                     <a:eilNr>1.1.</a:eilNr>
                     <a:klausimas i:nil="true" />
                     <a:kodas>1001</a:kodas>
                     <a:komentaras i:nil="true" />
                  </a:TAKlausimas>
                  <a:TAKlausimas>
                     <a:atsakymas>3</a:atsakymas>
                     <a:eilNr>2.</a:eilNr>
                     <a:klausimas i:nil="true" />
                     <a:kodas>1002</a:kodas>
                     <a:komentaras i:nil="true" />
                  </a:TAKlausimas>
               </a:klausimai>
               <a:nr>BIOCIDŲ PRIEŽIŪRA-0050-0007</a:nr>
               <a:rekomendacijos i:nil="true" />
               <a:surasymoData>2015-07-23T00:00:00+03:00</a:surasymoData>
               <a:tipas>9</a:tipas>
            </a:temineAtaskaita>
            <a:tikrintaEkonomineVeikla i:nil="true" />
            <a:tikrintaNakti i:nil="true" />
            <a:tikrintasObjektas i:nil="true" />
            <a:tikrintoObjektoAdresas i:nil="true" />
            <a:tikrintoObjektoPavadinimas i:nil="true" />
            <a:vadovoAsmensKodas i:nil="true" />
            <a:vadovoGimimoData i:nil="true" />
            <a:vadovoLytis i:nil="true" />
            <a:vadovoPareigos i:nil="true" />
            <a:vadovoPavarde i:nil="true" />
            <a:vadovoVardas i:nil="true" />
         </inspektavimas>
      </teiktiTemineAtaskaita>
   </s:Body>
</s:Envelope>

KSOAP2生成的HTTPTransport请求转储XML

<?xml version="1.0" encoding="UTF-8"?>
<v:Envelope xmlns:v="http://schemas.xmlsoap.org/soap/envelope/" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
   <v:Header />
   <v:Body>
      <teiktiTemineAtaskaita xmlns="http://tempuri.org/">
         <userName>apps</userName>
         <password>mob2015*</password>
         <uzduotiesNr>212855</uzduotiesNr>
         <n0:inspektavimas xmlns:n0="http://tempuri.org/">
            <inspektavimoNr i:null="true" />
            <n1:inspektavimoPradzia xmlns:n1="http://schemas.datacontract.org/2004/07/DssisMP" i:type="d:dateTime">2015-07-26T21:00:00.000Z</n1:inspektavimoPradzia>
            <inspektavimoTiksloKodas>1101</inspektavimoTiksloKodas>
            <darbdavioKodas>120163917</darbdavioKodas>
            <darbdavioPavadinimas>Statybos ir remonto uždaroji akcinė bendrovė "RISTATYBA"</darbdavioPavadinimas>
            <darbdavioTipas>1</darbdavioTipas>
            <darbdavioBuveinesAdresas i:null="true" />
            <darbdavioPagrindineEkonomineVeikla i:null="true" />
            <vadovoAsmensKodas>721788222</vadovoAsmensKodas>
            <vadovoVardas>tvt</vadovoVardas>
            <vadovoPavarde>gtvt</vadovoPavarde>
            <vadovoPareigos>5</vadovoPareigos>
            <n2:vadovoGimimoDiena xmlns:n2="http://schemas.datacontract.org/2004/07/DssisMP" i:type="d:dateTime">2015-07-22T21:00:00.000Z</n2:vadovoGimimoDiena>
            <vadovoLytis>0</vadovoLytis>
            <tikrintasObjektas>3</tikrintasObjektas>
            <tikrintoObjektoPavadinimas i:null="true" />
            <tikrintoObjektoAdresas i:null="true" />
            <savivaldybesKodas>46</savivaldybesKodas>
            <tikrintaEkonomineVeikla i:null="true" />
            <apsilankymuObjekteSkaicius i:null="true" />
            <tikrintaNakti>0</tikrintaNakti>
            <n3:temineAtaskaita xmlns:n3="http://schemas.datacontract.org/2004/07/DssisMP">
               <n3:nr i:null="true" />
               <n3:tipas i:type="d:int">18</n3:tipas>
               <n3:surasymoData i:type="d:dateTime">2015-07-22T09:53:59.822Z</n3:surasymoData>
               <n3:klausimai>
                  <n3:TAKlausimas>
                     <n3:kodas i:type="d:string">3183</n3:kodas>
                     <n3:eilNr i:type="d:string">1.1.</n3:eilNr>
                     <n3:klausimas i:null="true" />
                     <n3:atsakymas i:type="d:int">1</n3:atsakymas>
                     <n3:komentaras i:null="true" />
                  </n3:TAKlausimas>
                  <n3:TAKlausimas>
                     <n3:kodas i:type="d:string">3184</n3:kodas>
                     <n3:eilNr i:type="d:string">1.1.1.</n3:eilNr>
                     <n3:klausimas i:null="true" />
                     <n3:atsakymas i:type="d:int">2</n3:atsakymas>
                     <n3:komentaras i:null="true" />
                  </n3:TAKlausimas>
               </n3:klausimai>
               <n3:rekomendacijos i:type="d:string">Gyghugyb</n3:rekomendacijos>
            </n3:temineAtaskaita>
         </n0:inspektavimas>
      </teiktiTemineAtaskaita>
   </v:Body>
</v:Envelope>

创建请求的Java代码

List<Questionnaire> questionnaireList = new ArrayList<>();
String METHOD_NAME = "teiktiTemineAtaskaita";
String SOAP_ACTION = "http://tempuri.org/IDssisMP/" + METHOD_NAME;
String A_NAMESPACE = "http://schemas.datacontract.org/2004/07/DssisMP";
String I_NAMESPACE = "http://www.w3.org/2001/XMLSchema-instance";
String NAMESPACE = "http://tempuri.org/";
String URL = "http://dvs/dssis_ws_test/DssisMP.svc";
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
UserInfo userInfo = UserInfo.getAll().get(0);
request.addProperty("userName", userInfo.getUserName());
request.addProperty("password", userInfo.getPassword());
request.addProperty("uzduotiesNr", taskId);
CompanyInfo ci = CompanyInfo.getByTaskCompanyId(taskId, companyId);
if (ci == null) {
    sendResponseFailed(responseHandler);
//starter validation
} else {
    //adding all the non-complex properties
    SoapObject inspektavimas = new SoapObject(NAMESPACE, "inspektavimas");
    if (ci.getInspectationId() != 0) {
        inspektavimas.addProperty("inspektavimoNr", ci.getInspectationId());
    } else {
        inspektavimas.addProperty("inspektavimoNr", null);
    }
    if (ci.getDateInspectation() != null) {
        PropertyInfo p = new PropertyInfo();
        p.setNamespace(A_NAMESPACE);
        p.setName("inspektavimoPradzia");
        p.setType(MarshalDate.class);
        p.setValue(ci.getDateInspectation());
        inspektavimas.addProperty(p);
    } else {
        sendResponseFailed(responseHandler);
    }
    if (ci.getGoalId() != 0) {
        inspektavimas.addProperty("inspektavimoTiksloKodas", ci.getGoalId());
    } else {
        sendResponseFailed(responseHandler);
    }
    if (ci.getObjectName() != null) {
    inspektavimas.addProperty("tikrintoObjektoPavadinimas", ci.getObjectName());
    } else {    inspektavimas.addProperty("tikrintoObjektoPavadinimas", null);
    }
    if (ci.getObjectAddress() != null) {
        inspektavimas.addProperty("tikrintoObjektoAdresas", ci.getObjectAddress());
    } else {
        inspektavimas.addProperty("tikrintoObjektoAdresas", null);
    }

    //...
    SoapObject soTemineAtaskaita = new SoapObject(A_NAMESPACE, "temineAtaskaita");
    TemineAtaskaita temineAtaskaita = TemineAtaskaita.getByTaskCompanyThemeCode(taskId, companyId, themeCode);
    PropertyInfo p = new PropertyInfo();
    p.setNamespace(A_NAMESPACE);
    p.setName("nr");
    if (temineAtaskaita != null && temineAtaskaita.getAtaskaitosNr() != null) {
        p.setValue(temineAtaskaita.getAtaskaitosNr());
        soTemineAtaskaita.addProperty(p);
    } else {
        p.setValue(null);
        soTemineAtaskaita.addProperty(p);
    }
    Theme theme = Theme.getByTaskCompanyThemeCode(taskId, companyId, themeCode);
    if (theme != null) {
        PropertyInfo pType = new PropertyInfo();
        pType.setNamespace(A_NAMESPACE);
        pType.setName("tipas");
        pType.setValue(theme.getThemeCode());
        soTemineAtaskaita.addProperty(pType);
        PropertyInfo pDate = new PropertyInfo();
        pDate.setNamespace(A_NAMESPACE);
        pDate.setName("surasymoData");
        pDate.setValue(theme.getDate());
        pDate.setType(MarshalDate.class);
        soTemineAtaskaita.addProperty(pDate);
    }
    //adding klausimai property which is not seen
    SoapObject klausimai = new SoapObject(A_NAMESPACE, "klausimai");
    List <Answer> answers = Answer.getByTaskCompanyThemeCode(taskId, companyId, themeCode);
    for (Answer answer : answers) {
        SoapObject soTAKlausimas = new SoapObject(A_NAMESPACE, "TAKlausimas");
        PropertyInfo pCode = new PropertyInfo();
        pCode.setNamespace(A_NAMESPACE);
        pCode.setName("kodas");
        pCode.setValue(answer.getQuestionId());
        soTAKlausimas.addProperty(pCode);
        Questionnaire questionnaire = Questionnaire.getById(answer.getQuestionId()).get(0);
        PropertyInfo pEilNr = new PropertyInfo();
        pEilNr.setNamespace(A_NAMESPACE);
        pEilNr.setName("eilNr");
        pEilNr.setValue(questionnaire.getPosition());
        soTAKlausimas.addProperty(pEilNr);
        PropertyInfo pKlausimas = new PropertyInfo();
        pKlausimas.setNamespace(A_NAMESPACE);
        pKlausimas.setName("klausimas");
        pKlausimas.setValue(null);
        soTAKlausimas.addProperty(pKlausimas);
        PropertyInfo pAnswer = new PropertyInfo();
        pAnswer.setNamespace(A_NAMESPACE);
        pAnswer.setName("atsakymas");
        pAnswer.setValue(questionnaire.getPosition());
        if (answer.getAnswer() == QuestionItem.STATUS.YES.ordinal())
            pAnswer.setValue(1);
        else if (answer.getAnswer() == QuestionItem.STATUS.NO.ordinal())
            pAnswer.setValue(2);
        else if (answer.getAnswer() == QuestionItem.STATUS.UNKNOWN.ordinal())
            pAnswer.setValue(3);
        else if (answer.getAnswer() == QuestionItem.STATUS.PLAIN.ordinal())
            pAnswer.setValue(null);
        soTAKlausimas.addProperty(pAnswer);
        PropertyInfo pComment = new PropertyInfo();
        pComment.setNamespace(A_NAMESPACE);
        pComment.setName("komentaras");
        if (answer.getComment() != null && !answer.getComment().replace(" ", "").replace(" ", "").isEmpty()) {
            pComment.setValue(answer.getComment());
        } else {
            pComment.setValue(null);
        }
        soTAKlausimas.addProperty(pComment);
        klausimai.addSoapObject(soTAKlausimas);
    }
    soTemineAtaskaita.addSoapObject(klausimai);
    if (theme != null) {
        PropertyInfo pSuggestions = new PropertyInfo();
        pSuggestions.setNamespace(A_NAMESPACE);
        pSuggestions.setName("rekomendacijos");
        if (theme.getSuggestions() != null && !theme.getSuggestions().replace(" ", "").replace(" ", "").isEmpty()) {
            pSuggestions.setValue(theme.getSuggestions());
        } else {
            pSuggestions.setValue(null);
        }
        soTemineAtaskaita.addProperty(pSuggestions);
    }
    inspektavimas.addSoapObject(soTemineAtaskaita);
    request.addSoapObject(inspektavimas);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setAddAdornments(false);
    envelope.implicitTypes = true;
    envelope.setOutputSoapObject(request);
    new MarshalDate().register(envelope);
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL, 45 * 1000);
    androidHttpTransport.debug = true;
    androidHttpTransport.call(SOAP_ACTION, envelope);
    final SoapObject response = (SoapObject) envelope.getResponse();
    ****//...****
    }

事实证明,我设法与服务器公司一起工作,问题是temineAtaskaita标签内订购klausimai属性应该是第一个属性,尽管在inspektavimas标签之外,排序并不重要,这是令人困惑的。

现在发生的另一个问题是,inspektavimas中的所有内容都是null,因为属性没有名称空间。并且将它们添加为PropertyInfo会在XML请求转储中提供大量重复的名称空间(n0, n1,…,n20),并且服务器无法处理它。但这是另一个问题。

相关内容

  • 没有找到相关文章

最新更新