मैं XSDs से जावा POJOs उत्पन्न करने के लिए XJC उपयोग करने वाले ऐप्लिकेशन पर काम कर रहा हूँ को लागू करने में कुछ विशेष प्रकार की कक्षाओं उत्पन्न। दर्जनों स्कीमा हैं, और वह संख्या बढ़ेगी। एप्लिकेशन को एक ही स्कीमा के विभिन्न संस्करणों को संभालने में सक्षम होना चाहिए, जिसका अर्थ है कि मेरे पास सामान्य प्रकारों को परिभाषित करने वाले कई स्कीमा होंगे। मैं बाइंडिंग को कस्टमाइज़ करने की कोशिश कर रहा हूं ताकि कुछ कोर प्रकार एक सामान्य इंटरफेस को कार्यान्वित कर सकें। जेएक्सबी 2 मूल बातें की विरासत प्लगइन मुझे जो चाहिए वह करना प्रतीत होता है, लेकिन मुझे सही वाक्यविन्यास को नाखून नहीं लग रहा है।JAXB एक कस्टम इंटरफ़ेस
यहाँ मेरी स्कीमा के प्रासंगिक हिस्सा है:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="http://example.com/core"
targetNamespace="http://example.com/core"
xmlns:xml="http://www.w3.org/XML/1998/namespace">
...
<xs:complexType name="addressType">
<xs:sequence>
<xs:element name="Address" type="xs:string"/>
<xs:element name="City" type="xs:string"/>
<xs:element name="Province" type="xs:string"/>
<xs:element name="Country" type="xs:string"/>
<xs:element name="County" type="xs:string" minOccurs="0"/>
<xs:element name="PostalCode" type="xs:string"/>
</xs:sequence>
</xs:complexType>
...
</xs:schema>
... और इस तरह क्या अपने कस्टम बाध्यकारी फ़ाइल लग रहा है:
<?xml version="1.0"?>
<jaxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
xmlns:my="http://example.com/core"
jaxb:extensionBindingPrefixes="inheritance"
version="2.1">
<jaxb:bindings scd="x-schema::my" xmlns:my="http://example.com/core">
<jaxb:globalBindings localScoping="toplevel">
<jaxb:serializable/>
<xjc:simple/>
</jaxb:globalBindings>
<jaxb:bindings scd="/type::my:addressType">
<inheritance:implements>com.mysite.validator.ValidatableAddress</inheritance:implements>
<!--<xjc:superInterface name="com.mysite.validator.ValidatableAddress"/>-->
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
मैं SCD दृष्टिकोण का उपयोग कर रहा हूँ , क्योंकि सभी "पारंपरिक" बाध्यकारी उदाहरणों में जो दिखाते हैं कि विरासत प्लगइन का उपयोग कैसे करें, स्कीमालोकेशन निर्दिष्ट है। मैं स्कीमा की हमारी बड़ी (और बढ़ती) संख्या के कारण स्कीमालोकेशन निर्दिष्ट करने से बचना चाहता हूं। हर बार जब हम एक नई स्कीमा जोड़ते हैं तो मैं बाध्यकारी फ़ाइल को बदलना नहीं चाहता हूं। तो, scd ऐसा लगता है कि यह इस आवश्यकता को पूरा करेगा।
[xjc] [ERROR] cvc-elt.1: Cannot find the declaration of element 'inheritance:implements'. [xjc] line 18 of file:/dev/workspace/my_app/etc/schemas/bindings-common.xml [xjc] failure in the XJC task. Use the Ant -verbose switch for more details [xjc] classLoader = [email protected] [xjc] SharedSecrets.getJavaNetAccess()[email protected]
अगर मैं बाहर टिप्पणी विरासत: लाइन लागू करता है और uncomment xjc: superInterface लाइन, त्रुटि चला जाता है
लेकिन जब मैं ऊपर का उपयोग कर बाध्यकारी निर्माण चलाने के लिए, मैं इस मिल दूर और निर्माण सफलतापूर्वक पूरा हो जाता है, लेकिन मेरा पता टाइप कक्षाएं ValidatableAddress प्रकार को लागू नहीं करती हैं।
उत्तराधिकारी प्लगइन का उपयोग scd के साथ किया जा सकता है? Xjc: superInterface केवल कुछ तत्वों तक ही सीमित हो सकता है?
चीयर्स।
धन्यवाद लेक्सिकोयर। एसडीडी और एक्सजेसी के संयोजन के बारे में क्या: superInterface ... क्या यह काम करना चाहिए? कोई विचार यह दृष्टिकोण क्यों कोई त्रुटि उत्पन्न नहीं करता है, लेकिन ऐसा लगता है कि जेनरेट किए गए स्रोत पर कोई प्रभाव नहीं पड़ता है? – 6006604
... या xjc है: superInterface उत्तराधिकारी की तरह एक कस्टम/विक्रेता अनुकूलन माना जाता है: उपकरण? – 6006604
यह वास्तव में एक विक्रेता विस्तार है लेकिन यह एक "प्रथम श्रेणी" विक्रेता विस्तार है जो विशेष रूप से एक्सजेसी के लिए जाना जाता है (देखें [यहां] (https://github.com/gf-metro/jaxb/blob/69471fb27af6a9e990ef2a7873aab64a18e87640/jaxb-ri/ xjc/src/main/resource/com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd # L81)) - 'विरासत: उपकरण' के विपरीत। वैसे, [xjc: superInterface' नहीं है [केवल वैश्विक बाइंडिंग] (https://jaxb.java.net/nonav/2.1.15/docs/vendorCustomizations.html#superinterface)? समझाएगा कि इसे कक्षा पर क्यों नजरअंदाज कर दिया गया है। – lexicore