ग्रहण लिंक मोक्सी: xsi दबाएं: मार्शलिंग करते समय टाइप करें

मेरे पास निम्नलिखित सामग्री के साथ एक बाइंडिंग फ़ाइल है:


  
  
    ...
  

जब मैं इस बाइंडिंग का उपयोग कर जावाटाइप क्लास को मार्शल करता हूं, तो एक्सएमएल इस तरह दिखता है


मैं xsi नहीं चाहता हूं: वहां रहने के लिए टाइप करें, मार्शलिंग करते समय मैं इसे कैसे दबा सकता हूं?

2

2 उत्तर

xsi: टाइप विशेषता तब दिखाई देगी जब आप सबक्लास को मार्शल कर रहे हों। आप इसे अपने ऑब्जेक्ट को JAXBElement में लपेटकर दबाने के लिए दबा सकते हैं जो रूट तत्व के बारे में जानकारी प्रदान करता है।

JAXBElement je = new JAXBElement(new QName(), JavaType.class javaType);
marshaller.marshal(je, System.out); 

उदाहरण


अद्यतन

धन्यवाद। अब मैंने superclass XmlTransient बनाया है, जो बनाता है   xsi: डिस्पियर भी टाइप करें। मैंने ऐसा करने के लिए एनोटेशन का इस्तेमाल किया। है   वास्तव में एक जावा प्रकार बनाने के लिए उपयोग करने का एक तरीका है   क्षणिक? मैं केवल जावा-विशेषताओं के लिए काम कर सकता हूं।

तुम सही हो। आप विरासत पदानुक्रम से हटाए जाने के लिए कक्षा स्तर पर @XmlTransient का उपयोग कर सकते हैं। नीचे यह MOXy के बाहरी मैपिंग दस्तावेज़ का उपयोग करके कैसे किया जा सकता है।

<?xml version="1.0" encoding="UTF-8"?>

     
        
     

अधिक जानकारी के लिए

1
जोड़ा
धन्यवाद। मैंने अब सुपरक्लास XmlTransient बनाया है, जो xsi बनाता है: प्रकार का अपमान भी। मैंने ऐसा करने के लिए एनोटेशन का इस्तेमाल किया। जावा-प्रकार को क्षणिक बनाने के लिए वास्तव में का उपयोग करने का कोई तरीका है? मैं केवल जावा-विशेषताओं के लिए काम कर सकता हूं।
जोड़ा लेखक hansi, स्रोत
@ हांसी - मैंने इस जानकारी के साथ अपना जवाब अपडेट किया है।
जोड़ा लेखक Blaise Doughan, स्रोत

मैंने @ ब्लैज़-डौगन के सुझाव की कोशिश की और मेरे सार आधार वर्ग के शीर्ष पर @XmlTransient एनोटेशन जोड़ा।

With my environment (so my product depends something strictly), the jaxb-api library says "The annotation @XmlTransient is disallowed for this location" because of the version of it high probably older than 2.1. I realized that when I tried to adding the annotation with a new test class-path which contains version >=2.1, so it allows to defining it top of a class.

तो मुझे सीधे बिंदु पर जाने दें, मैं प्रकार फ़ील्ड से छुटकारा पाने के लिए नीचे विधि का सुझाव देता हूं जो विस्तारित वर्गों से निर्माण और मार्शलिंग पर प्रतिक्रियाओं पर दिखाई देता है।

मैंने केवल अपनी बेस क्लास के शीर्ष पर @XmlDiscriminatorNode ("") जोड़ा और मुझे लगता है कि आप एक्लिप्ससेंक मोक्सी का उपयोग कर रहे हैं:

import org.eclipse.persistence.oxm.annotations.XmlDiscriminatorNode;

@XmlDiscriminatorNode("")
public abstract class Base {

    private int id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

}

सारांश के रूप में आप @XmlTransient का उपयोग कर सकते हैं यदि आपके पास jaxb-api संस्करण 2.1 से बड़ा है या यदि आपके पास EclipseLink MOXy है तो मेरी विधि का उपयोग करें।

0
जोड़ा