2010-05-05 10 views
7

जेएक्सबी ट्रेट्स खाली int एक्सएमएल एट्रिब्यूट 0 के रूप में खाली है, जो मेरे साथ ठीक है, लेकिन मुझे इसे शून्य के रूप में स्टोर करने की आवश्यकता है। ऐसा लगता है कि मैं कस्टम कॉन्फ़िगरेशन में DataConverterImpl क्लास को नहीं बदल सकता। क्या किया जा सकता है अगर बिल्कुल?जेएक्सबी ट्रेट्स इंटेल एक्सएमएल एट्रिब्यूट 0

@XmlAttribute(name = "Count") 
    protected Integer passengerCount; 
एक्सएमएल के दौरान

parseInt() सूर्य (Oracle) जो कोड के नीचे है से DataConverterImpl.class से कहा जाता है को पार्स, अपने नेवे जा रहा:

<xs:attribute name="Count" type="Integer0to999" use="optional"> 

<xs:simpleType name="Integer0to999"> 
    <xs:annotation> 
     <xs:documentation xml:lang="en">Used for Integer values, from 0 to 999 inclusive</xs:documentation> 
    </xs:annotation> 
    <xs:restriction base="xs:integer"> 
     <xs:minInclusive value="0"/> 
     <xs:maxInclusive value="999"/> 
    </xs:restriction> 
    </xs:simpleType> 

xjc स्कीमा संकलन के बाद मैं निम्नलिखित के साथ वर्ग मिला इस कोड से शून्य प्राप्त करने के लिए:

public static int _parseInt(CharSequence s) { 
     int len = s.length(); 
     int sign = 1; 

     int r = 0; 

     for(int i=0; i<len; i++) { 
      char ch = s.charAt(i); 
      if(WhiteSpaceProcessor.isWhiteSpace(ch)) { 
       // skip whitespace 
      } else 
      if('0'<=ch && ch<='9') { 
       r = r*10 + (ch-'0'); 
      } else 
      if(ch=='-') { 
       sign = -1; 
      } else 
      if(ch=='+') { 
       ; // noop 
      } else 
       throw new NumberFormatException("Not a number: "+s); 
     } 

     return r*sign; 
    } 

उत्तर

1

आप coul एक कस्टम XMLAdaptor लिखने का प्रयास करें जो आपके पूर्णांक को स्ट्रिंग (या अन्य ऑब्जेक्ट) में परिवर्तित करता है, फिर आप फिट बैठते समय इसे वापस परिवर्तित कर देते हैं। अनमोललिंग के दौरान, मुझे लगता है कि 'नल' के लिए एक त्वरित केस-असंवेदनशील जांच की आवश्यकता होगी।

यहाँ प्रारंभ: http://download.oracle.com/javase/6/docs/api/javax/xml/bind/annotation/adapters/XmlAdapter.html

अपने पूर्णांक क्षेत्र के लिए एडाप्टर संलग्न करें और शरीर में लिखें।

आपका कनवर्टर इस प्रकार शुरू होगा:

public class MyIntConverter extends XmlAdapter<String,Integer> 
{ 
    @Override 
    public String marshal(Integer value) throws Exception { 

     if (value.intValue() == 0) 
        return null; // Or, "null" depending on what you'd like 

      return value.toString(); 
    } 

    @Override 
    public Integer unmarshal(String storedValue) throws Exception { 

     if (storedValue.equalsIgnoreCase("null")) 
        return 0; 

      return Integer.valueOf(storedValue); 
    } 
} 

उसके बाद, आप इसका इस्तेमाल करने की डाल सकता है:

@XmlJavaTypeAdapter(MyIntConverter.class) 
int someNumber; 

कोड अपरीक्षित है, लेकिन मुझे लगता है कि इस मुद्दे को हल करना चाहिए।

1

एफडब्ल्यूआईडब्ल्यू, मुझे वर्तमान में यह पता चल रहा है कि जेएक्सबी एक खाली तत्व शून्य (यदि एक इंटीजर फ़ील्ड) के लिए खाली तत्व है लेकिन यह एक लंबा क्षेत्र है।

मान्य है कि कस्टम डेटा प्रकार कन्वर्टर्स के साथ किसी प्रकार की समस्या हो सकती है। या यह जेडीके 6.0 के साथ जेएक्सबी संस्करण के साथ एक बग हो सकता है और आप बाद के संस्करण का उपयोग कर रहे हैं।

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