[java] आप कैसे अनुकूलित करते हैं कि JAXB बहुवचन विधि नाम कैसे उत्पन्न करता है?


Answers

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

JAXB XJC बाइंडिंग कंपाइलर को "-एक्टेक्शन" मोड के साथ प्रयोग करके। एक अनुकूलन बाइंडिंग फ़ाइल को जोड़ा जाना चाहिए, जैसे यह एक:

<?xml version="1.0"?>
<jxb:bindings version="1.0"
              xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
              xmlns:xs="http://www.w3.org/2001/XMLSchema"
              xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
              jxb:extensionBindingPrefixes="xjc">

  <jxb:globalBindings>              
    <xjc:simple/>
  </jxb:globalBindings>

</jxb:bindings>

संदर्भ:

Question

हम जावा कक्षाएं उत्पन्न करने के लिए जेएसीएबी का इस्तेमाल कर रहे हैं और कुछ मामलों का सामना किया है जहां कई बहुवचन पद्धति नाम सही नहीं हैं। उदाहरण के लिए, जहां हमें उम्मीद है कि getPhysicians हमें getPhysicien । हम कैसे अनुकूलित करेंगे कि जेएसीएबी विशिष्ट तरीकों को एकरूप करती है?

स्कीमा:

<xs:complexType name="physician">
    <xs:sequence>
       ...
    </xs:sequence>
</xs:complexType>

<xs:complexType name="physicianList">
    <xs:sequence>
        <xs:element name="Physician"
                    type="physician"
                    minOccurs="0"
                    maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>

उत्पन्न जावा कोड:

...
public class PhysicianList {
...

    @XmlElement(name = "Physician")
    protected List<Physician> physicien;
    ...

    public List<Physician> getPhysicien() {
        if (physicien == null) {
            physicien = new ArrayList<Physician>();
        }
        return this.physicien;
    }

अद्यतन करें

इसका उत्तर Blaise द्वारा किया गया है हालांकि, मैं एक XML स्कीमा में जेएसीएबी अनुकूलन जैसी चिंताओं को मिक्स नहीं करना पसंद करता हूं। तो आप में से वही वरीयता के साथ, यहां एक जेएएएसबी बाध्यकारी फाइल है जो कि ब्लेज़ ने सुझाव दिया है कि एक ही चीज़ को प्राप्त किया जा सकता है, जो स्कीमा के बाहर JAXB अनुकूलन को बनाए रखना है:

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xs="http://www.w3.org/2001/XMLSchema"
               version="2.0">

    <jaxb:bindings schemaLocation="myschema.xsd">
        <jaxb:bindings node="//xs:complexType[@name='physicianList']//xs:element[@name='Physician']">
            <jaxb:property name="physicians"/>
        </jaxb:bindings>
    </jaxb:bindings>

</jaxb:bindings>



Links