2010-06-24 10 views
7

मेरे पास मेरे अपवाद विरासत में प्रत्येक अपवाद के लिए XmlJavaTypeAdapter परिभाषित किया गया है। मैं नीचे के रूप में अपवाद प्रमुखता के लिए एक आवरण वस्तु का उपयोग करें: -@XmlJavaTypeAdapter w/विरासत

@XmlRootElement 
public Wrapper<T extends BaseException> { 
    T exception; 
} 

अपवाद: -

@XmlJavaTypeAdapter(BaseExceptionAdapter.class) { 
public class BaseException extends RuntimeException { 
} 


@XmlJavaTypeAdapter(DerivedExceptionAdapter.class) { 
public class DerivedException extends BaseException { 
} 

जब मैं एक आवरण वस्तु प्रमुखता का प्रयास करें, JAXB डिफ़ॉल्ट रूप से हमेशा कहता BaseExceptionAdapter यहां तक ​​कि वास्तविक अगर अपवाद DerivedException प्रकार है। संदर्भ प्रकार के बजाय अपवाद के उदाहरण प्रकार को देखने के लिए मैं इसे कैसे मजबूर कर सकता हूं।

बस जोड़ने के लिए, package-info/jaxb.index आदि को छोड़कर हैं।

उत्तर

0

क्या आपके पास पैकेज-जानकारी/jaxb.index/newInitialContext (...) में सूचीबद्ध आपके सभी अपवाद उप-प्रकार हैं?

जेएक्स-बी उदाहरण प्रकार को देखेगा, लेकिन मेरा मानना ​​है कि उप-प्रकारों को जेएक्स-बी के साथ पंजीकृत होना आवश्यक है। यह रनटाइम पर XMLJavaTypeAdapter एनोटेशन की खोज नहीं करेगा, आपको स्पष्ट रूप से प्रत्येक उप-वर्ग को JaxB के साथ पंजीकृत करना होगा।

यह जेएक्स-बी के साथ पंजीकृत कक्षा से @XmlSeeAlso एनोटेशन के साथ भी पूरा किया जा सकता है।

1

ऐसा लगता है कि आपको अपने टी फ़ील्ड पर एक @XmlElementRef की आवश्यकता है, ताकि जैक्सबी को गतिशील रूप से देखने के लिए कहा जा सके।

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