2012-05-24 26 views
6

मैं कई विशिष्ट एक्सएसडी से 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 में आयात नहीं के लिए बार-बार यह त्रुटि प्राप्त।

क्या कोई तरीका है कि मैं xjccommonBindings.xjb में बाइंडिंग को अनदेखा कर सकता हूं जिसका उपयोग एक्सएसडी में नहीं किया जाता है, मैं कक्षाएं उत्पन्न कर रहा हूं?

या, क्या मैं इस दृष्टिकोण का उपयोग करके गलत दिशा में लक्ष्य रख रहा हूं, और उदाहरण के लिए, विशिष्ट xsd में एनोटेशन का उपयोग करना चाहिए? यदि संभव हो तो मैं स्कीमा को संशोधित करने से बचना चाहता हूं।

उत्तर

3

मुझे लगता है कि आपको जेएक्सबी एपिसोड का उपयोग करना है। this SO post देखें, उत्तर @BlaiseDoughan पर एक नज़र डालें।

अपने मामले में, एक एक्सपिसोड फ़ाइल और आपके सामान्य जावा कक्षाएं उत्पन्न करने के लिए, सामान्य रूप से सभी एक्सएसडी के खिलाफ, पैकेज नाम अनुकूलन के लिए अपनी कस्टम बाइंडिंग फ़ाइल का उपयोग करके xjc पहले चलाएं।

फिर पहले चलाने से एपिसोड फ़ाइल का संदर्भ देकर, अन्य एक्सएसडी के साथ, फिर से xjc का उपयोग करें।