मैं कई विशिष्ट एक्सएसडी से xjc
के साथ जावा कक्षाएं उत्पन्न करने की कोशिश कर रहा हूं। उन स्कीमा में कुछ परिभाषाएं आम हैं, इसलिए वे कई सामान्य एक्सएसडी आयात करते हैं। विशेष रूप से, वे शून्य से सभी सामान्य एक्सएसडी में शामिल कर सकते हैं।एक्सजेसी और बाइंडिंग के साथ सामान्य एक्सएसडी के लिए पैकेज नामों को परिभाषित करना
मैं एक विशिष्ट एक्सएसडी से एक विशिष्ट पैकेज में सभी वर्गों को उत्पन्न करना चाहता हूं, लेकिन सामान्य पैकेजों के लिए जेनरेटेड कक्षाओं को सामान्य पैकेज में रखना, इसलिए वे स्रोत पेड़ में प्रत्येक विशिष्ट स्कीमा के लिए दोहराया नहीं जाता है ।
मैंने सीखा है कि कस्टम बाइंडिंग के साथ, एक प्रति स्कीमा के आधार पर संकुल निर्दिष्ट करने के लिए इस्तेमाल किया जा सकता उदाहरण के लिए:
schemas
| - common
| | - common1.xsd --> XSD with common types #1
| | - ...
| | - commonN.xsd --> XSD with common types #N
| | - commonBindings.xjb --> Defines package "mypackage.commons" for common*.xsd
| - specific1
| | - specific1.xsd --> Includes ../common/common{1-N}.xsd
| | - specific1.xjb --> Defines package "mypackage.specific1" for specific1.xsd
| - specificN
| | - specificN.xsd --> Includes only ../common/common1.xsd
| | - specificN.xjb --> Defines package "mypackage.specificN" for specificN.xsd
:
<jxb:bindings schemaLocation="common1.xsd" node="/xsd:schema">
<jxb:schemaBindings>
<jxb:package name="mypackage.commonclasses"/>
</jxb:schemaBindings>
</jxb:bindings>
मैं निम्नलिखित संरचना मिल गया है
xjc -b schemas/specific1
-b schemas/common
schemas/specific1/specific1.xsd
यहमें specific1.xsd
के लिए कक्षाओं उत्पन्न करता है: यह सभी के साथ ठीक काम करता हैऔर mypackage.commons
में सामान्य कक्षाएं। लेकिन जब मैं specificN
के लिए कक्षाओं उत्पन्न करने के लिए प्रयास करते हैं, xjc
निम्न त्रुटि फेंकता है:
[ERROR] "file:/drive/dir/schemas/common/common1.xsd" is not a part of
this compilation. Is this a mistake for "/drive/dir/schemas/common/commonBindings.xjb"?
line 2 of file:/drive/dir/schemas/common/commonBindings.xjb
मैं हर आम XSD किसी भी विशिष्ट XSD में आयात नहीं के लिए बार-बार यह त्रुटि प्राप्त।
क्या कोई तरीका है कि मैं xjc
commonBindings.xjb
में बाइंडिंग को अनदेखा कर सकता हूं जिसका उपयोग एक्सएसडी में नहीं किया जाता है, मैं कक्षाएं उत्पन्न कर रहा हूं?
या, क्या मैं इस दृष्टिकोण का उपयोग करके गलत दिशा में लक्ष्य रख रहा हूं, और उदाहरण के लिए, विशिष्ट xsd में एनोटेशन का उपयोग करना चाहिए? यदि संभव हो तो मैं स्कीमा को संशोधित करने से बचना चाहता हूं।