2012-03-06 18 views
5

मैं KSoap2 एंड्रॉइड का उपयोग कर एक डब्ल्यूसीएफ webservice पर एक जटिल ऑब्जेक्ट अपलोड करने की कोशिश कर रहा हूं और इसे करने में कुछ कठिनाई है। जब मैं सोपयूआई का उपयोग करता हूं और हाथ से डेटा भरता हूं तो मैंने webservice को सफल कॉल प्राप्त की हैं। सफल SoapUI-उत्पन्न अनुरोध इस प्रकार है:Ksoap2 एंड्रॉइड - एक जटिल वस्तु के बच्चे गुणों के लिए नामस्थान कैसे निर्दिष्ट करें?

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:fpm="http://schemas.datacontract.org/2004/07/FPMobileServices"> 
<soapenv:Header/> 
<soapenv:Body> 
    <tem:CommitOne> 
    <tem:qr> 
     <fpm:ClientID>8aa2f6a4-4d15-4b4c-9cac-fb2478d0d27a</fpm:ClientID> 
     <fpm:CreatedBy>admin</fpm:CreatedBy> 
     <fpm:CreatedDate>2012-03-01T19:50:37</fpm:CreatedDate> 
     <fpm:DimensionID>8a02a339-b5a7-4c76-b95f-5891ef57736d</fpm:DimensionID> 
     <fpm:ImageID>b76c7bcc-a8f8-49ff-94c6-08cd2e05b1a8</fpm:ImageID> 
     <fpm:IndicatorID>4637b333-701d-4d03-a708-4de48569be84</fpm:IndicatorID> 
     <fpm:LoanOperationNumber>6-2011-72978</fpm:LoanOperationNumber> 
     <fpm:ModifiedBy>admin</fpm:ModifiedBy> 
     <fpm:ModifiedDate>2012-03-01T19:50:37</fpm:ModifiedDate> 
     <fpm:QuestionaireCompletedDate>2012-03-01T19:50:54</fpm:QuestionaireCompletedDate> 
     <fpm:QuestionnaireID>99967f70-8161-4922-929f-03136a389ba6</fpm:QuestionnaireID> 
     <fpm:ResultID>95fa03b5-80af-479d-9dec-f2bf94baf3cd</fpm:ResultID> 
     <fpm:ResultWeighting>0</fpm:ResultWeighting> 
     <fpm:StatusLevelID>03a91cd6-93cd-4503-a676-efa2967e82a7</fpm:StatusLevelID> 
     <fpm:UploadID>141D6A1F-8FFD-4CA4-8073-009338F22B13</fpm:UploadID> 
    </tem:qr> 
    </tem:CommitOne> 
</soapenv:Body> 
</soapenv:Envelope> 

मेरी जावा कोड द्वारा उत्पन्न अनुरोध है:

<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"> 
<v:Header /> 
<v:Body> 
    <CommitOne xmlns="http://tempuri.org/" id="o0" c:root="1"> 
     <qr> 
      <ClientID>8aa2f6a4-4d15-4b4c-9cac-fb2478d0d27a</ClientID> 
      <LoanOperationNumber>6-2011-72978</LoanOperationNumber> 
      <CreatedBy i:null="true" /> 
      <CreatedDate>2012-03-01T19:50:37</CreatedDate> 
      <DimensionID>8a02a339-b5a7-4c76-b95f-5891ef57736d</DimensionID> 
      <ImageID>b76c7bcc-a8f8-49ff-94c6-08cd2e05b1a8</ImageID> 
      <IndicatorID>4637b333-701d-4d03-a708-4de48569be84</IndicatorID> 
      <ModifiedBy i:null="true" /> 
      <ModifiedDate i:null="true" /> 
      <QuestionnaireCompletedDate>2012-03-01T19:50:54</QuestionnaireCompletedDate> 
      <QuestionnaireID>99967f70-8161-4922-929f-03136a389ba6</QuestionnaireID> 
      <ResultID i:type="d:string">95fa03b5-80af-479d-9dec-f2bf94baf3cc</ResultID> 
      <ResultWeighting>0</ResultWeighting> 
      <StatusLevelID>03a91cd6-93cd-4503-a676-efa2967e82a7</StatusLevelID> 
      <UploadID i:type="d:string">8ffa3665-b691-486f-91a0-ebbe8575896c</UploadID> 
     </qr> 
    </CommitOne> 
</v:Body> 

दोनों के बीच मुख्य अंतर यह है उपसर्गों/नामस्थान हो रहा है । किसी कारण से जब "qr" ऑब्जेक्ट मेरे .NET कोड में आता है, तो इसकी सभी गुण शून्य/शून्य होती हैं।

मैं अपने जावा कोड में 2 अलग-अलग दृष्टिकोण की कोशिश की है, एक PropertyInfo के रूप में मेरे "QR" वस्तु सेट करने का प्रयास:

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

    // build request object 
    PropertyInfo qrPi = new PropertyInfo(); 
    qrPi.setName("qr"); 
    qrPi.setType(qr.getClass()); 
    qrPi.setValue(qr); 

    request.addProperty(qrPi); 

और यह भी एक SoapObject के रूप में मेरे "QR" सेटिंग और फिर .addProperty का उपयोग कर:

SoapObject result = new SoapObject(NAMESPACE, "qr"); 
    result.addProperty("ClientID", (String) qr.getClientID()); 
    result.addProperty("CreatedBy", (String) qr.getCreatedBy()); 
    result.addProperty("CreatedDate", (String) qr.getCreatedDate()); 
    result.addProperty("DimensionID", (String) qr.getDimensionID()); 
    result.addProperty("ImageID", (String) qr.getImageID()); 
    result.addProperty("IndicatorID", (String) qr.getIndicatorID()); 
    result.addProperty("LoanOperationNumber", (String) qr.getLoanOperationNumber()); 
    result.addProperty("ModifiedBy", (String) qr.getModifiedBy()); 
    result.addProperty("ModifiedDate", (String) qr.getModifiedDate()); 
    result.addProperty("QuestionnaireCompletedDate", (String) qr.getQuestionnaireCompletedDate()); 
    result.addProperty("QuestionnaireID", (String) qr.getQuestionnaireID()); 
    result.addProperty("ResultID", (String) qr.getResultID()); 
    result.addProperty("ResultWeighting", qr.getResultWeighting()); 
    result.addProperty("StatusLevelID", (String) qr.getStatusLevelID()); 
    result.addProperty("UploadID", (String) qr.getUploadID()); 

    request.addSoapObject(result); 

लेकिन इन तरीकों के दोनों ही परिणाम मिल - जब यह मेरे वेब सेवा में हो जाता है सब मेरे "qr" वस्तु के क्षेत्रों अशक्त हैं। मैं स्टैक ओवरफ्लो पर समान प्रश्नों की तलाश कर रहा हूं और this पाया लेकिन मैं यह नहीं समझ सकता कि इसे अपने मामले में कैसे लागू किया जाए।

कोई भी स्थिति पर किसी भी प्रकाश को बहाल करने में मदद कर सकता है?

उत्तर

11

मुझे यकीन नहीं है कि मुझे अपने प्रश्न का उत्तर देना है, लेकिन मुझे एक समाधान पता चला है और इसे यहां किसी भी व्यक्ति के लिए छोड़ दिया जाएगा।

कुंजी अलग-अलग नामस्थान हैं। सोपयूआई उत्पन्न उदाहरण में हम देख सकते हैं कि बाल तत्व (क्लाइंट आईडी) एफपीएम नेमस्पेस का उपयोग करते हैं, जबकि उनके ऊपर के तत्व टेम्प नामस्थान का उपयोग करते हैं। इन बच्चों के तत्वों के लिए नेमस्पेस को स्पष्ट रूप से निर्दिष्ट करने के लिए, मैंने ऊपर चर्चा की गई दूसरी दृष्टिकोण को बदल दिया - मैंने प्रत्येक बच्चे तत्व के लिए PropertyInfo ऑब्जेक्ट्स बनाए और उन्हें सोप ऑब्जेक्ट में जोड़ा।

उपयोग करने के बजाय

:

result.addProperty(String "ClientID", Object qr.getClientID()); 

मैं प्रयोग किया है:

PropertyInfo pi = new PropertyInfo(); 
pi.setNamespace(QR_NAMESPACE); 
pi.setType(PropertyInfo.STRING_CLASS); 
pi.setName("ClientID"); 
pi.setValue(qr.getClientID()); 
result.addProperty(pi); 

जब मैं सभी गुणों के साथ ऐसा किया, यह ठीक काम किया।

आशा है कि यह किसी और दिन किसी और की मदद करेगी!

+0

हाय ब्रेडबिन, आपके उदाहरण में नेमस्पेस में "tem" और "fpm" जैसे उपसर्ग हैं। हम इन उपसर्गों को हमारे PropertyInfo में कैसे जोड़ सकते हैं? या पुस्तकालय द्वारा स्वयं की देखभाल की जाएगी? – silwar

+0

@ सिलवार, ऊपर दिए गए कोड में "pi.setNameSpace (QR_NAMESPACE)" पंक्ति देखें - यह PropertyInfo ऑब्जेक्ट के नामस्थान के रूप में एक स्ट्रिंग सेट कर रहा है। – breadbin