2011-08-15 11 views
9

मैं जावा वेब सेवा, और एक वेब विधि के लिए एक पैरामीटर है एक कस्टम जावा प्रकारसी # ग्राहक - डेटा अंतर मुद्दा

public class KeyList { 
public Integer key; 
public Integer[] nums ; 
public Integer result; 
} 

वेब सेवा को अद्यतन करता परिणाम मूल्य है और KeyList ऑब्जेक्ट ग्राहक के लिए।

मेरे पास इस वेब सेवा के लिए सी # क्लाइंट है (सेवा संदर्भ जोड़कर और विजुअल स्टूडियो में उत्पन्न WSdl url को इंगित करके)। जब मुझे सी # में कीलिस्ट ऑब्जेक्ट प्राप्त होता है, तो पहला भाग (इंटीजर कुंजी) 0. के रूप में आता है यदि मैं कुंजी कस्टम प्रकार में इंट कुंजी (इंटीजर कुंजी की बजाय) का उपयोग करने के लिए जावा कस्टम प्रकार बदलता हूं, तो यह ठीक काम करता है सी # ग्राहक।

मैं देखना चाहता था कि wsdl दो मामलों (int और Integer का उपयोग करके) के बीच काफी अलग था, लेकिन यह पता चला कि केवल अंतर एक minOccurs विशेषता है।

जब पूर्णांक कुंजी

<xs:element name="key" type="xs:int" minOccurs="0" /> 

का उपयोग कर का उपयोग करते समय पूर्णांक कुंजी

<xs:element name="key" type="xs:int" /> 

सही ढंग से सेवा से वापसी मान में अद्यतन पूर्णांक प्राप्त नहीं सी # ग्राहक के लिए कारण क्या है? कहने की जरूरत नहीं है कि यह किसी भी तरह से जावा क्लाइंट के लिए ठीक काम करता है।


संपादित करें: सी # KeyList के लिए वी.एस. द्वारा उत्पन्न वर्ग:

सार्वजनिक वर्ग keyList: INotifyPropertyChanged {

private int keyField; 
private bool keyFieldSpecified; 

private int?[] numsField; 
private PropertyChangedEventHandler PropertyChanged; 
private int resultField; 
private bool resultFieldSpecified; 

public event PropertyChangedEventHandler PropertyChanged; 

public keyList(); 
protected void RaisePropertyChanged(string propertyName); 

[XmlElement(Form=XmlSchemaForm.Unqualified, Order=0)] 
public int key { get; set; } 
[XmlElement("nums", Form=XmlSchemaForm.Unqualified, IsNullable=true, Order=1)] 
public int?[] nums { get; set; } 
[XmlElement(Form=XmlSchemaForm.Unqualified, Order=2)] 
public int result { get; set; } 
[XmlIgnore] 
public bool resultSpecified { get; set; } 

} जावा में

+0

यह वास्तव में एक सी # प्रश्न है, जावा एक नहीं - आपका प्रश्न मुख्य रूप से सी # क्लाइंट के व्यवहार से संबंधित है, जावा नहीं। Retagging। – skaffman

+0

क्या आप उस कक्षा को पोस्ट कर सकते हैं जो आपके लिए उत्पन्न विजुअल स्टूडियो है? – alun

+0

इसके अलावा, क्या यह "सेवा जोड़ें संदर्भ" या "वेब संदर्भ जोड़ें" का उपयोग करके किया गया था? –

उत्तर

7

पूर्णांक हो सकता है अशक्त है कि है आप minOccurs="0" क्यों देखते हैं। int शून्य नहीं हो सकता है और यही कारण है कि minOccurs गुम है। सी # int (या इंट 32 जो समान है) में शून्य नहीं हो सकता है इसलिए यह minOccurs="0" की अपेक्षा नहीं करता है। समस्या विजुअल स्टूडियो प्रॉक्सी जनरेटर में सबसे अधिक संभावना है।

यह सी # (Int32? या int? या Nullable<Int32>) इस तत्व के लिए में nullable पूर्णांक उत्पन्न किया जाना चाहिए था:

<xs:element name="key" type="xs:int" minOccurs="0" /> 

कैसे आप इस प्रॉक्सी उत्पन्न के आधार पर, दृश्य स्टूडियो जोड़ दिया हो अतिरिक्त bool क्षेत्र कहा जाता 'keySpecified' । यह कभी-कभी निरर्थक फ़ील्ड के नाम पर "निर्दिष्ट" प्रत्यय जोड़ता है। यह आप इस तरह कोड लिखने की उम्मीद:

if(res.keySpecified){ 
    // use res.Key 
} else { 
    // assume res.Key is null 
} 

यदि 'keySpecified' उत्पन्न नहीं किया गया है आप svcutil साथ प्रॉक्सी पैदा देख सकते हैं। विजुअल स्टूडियो में जो खुलासा हुआ है उसके मुकाबले इसमें बहुत अधिक विकल्प हैं। आपके लिए एक और संभावित समाधान सिर्फ जावा पक्ष पर int के साथ चिपकना है क्योंकि यह सी # पक्ष पर सीधे int पर नक्शा है।

+0

कुंजी निर्दिष्ट करने के लिए कुंजी निर्दिष्ट/सही के लिए सही मूल्य वापस सही मूल्य प्रदान किया। धन्यवाद! – Bhaskar

+0

आप आदमी दिमित्री हैं। इस मुद्दे के साथ 2 दिनों के लिए अटक गया। अंत में इसे हल करने में सक्षम। – rajibdotnet

संबंधित मुद्दे