2012-02-29 7 views
5

में स्कीमा के लिए बाइंडिंग्स मैं जावा कक्षाएं उत्पन्न करने के लिए मेवेन जैक्सबी 2 प्लगइन का उपयोग कर रहा हूं, जो कि एक जार में स्कीमा से बनाया गया है। हालांकि, मुझे यकीन नहीं है कि बाइंडिंग फ़ाइल से इन स्कीमा को सही तरीके से कैसे ढूँढें। यदि मैं जार से स्कीमा को घटाता हूं और उन्हें बाइंडिंग के समान निर्देशिका में छोड़ देता हूं, तो सब ठीक है। हालांकि, यह एक व्यावहारिक दीर्घकालिक समाधान नहीं है।जेएआरबी बाइंडिंग्स जेएआर

pom.xml:

<plugin> 
<groupId>org.jvnet.jaxb2.maven2</groupId> 
    <artifactId>maven-jaxb2-plugin</artifactId> 
    <version>0.8.1</version> 
    <executions> 
    <execution> 
    <goals> 
     <goal>generate</goal> 
    </goals> 
    </execution> 
    </executions> 
    <configuration> 
    <schemas> 
    <schema> 
     <dependencyResource> 
     <groupId>com.test</groupId> 
     <artifactId>schemas</artifactId> 
     <version>1.10-SNAPSHOT</version> 
     <resource>schemas/schema.xsd</resource> 
     </dependencyResource> 
    </schema> 
    </schemas>    
    <bindingDirectory>bindings</bindingDirectory> 
    <generatePackage>test.package</generatePackage> 
    <bindingIncludes> 
    <include>*.xml</include> 
    </bindingIncludes> 
    <extension>true</extension> 
    </configuration> 
    </plugin> 

bindings.xml:

<jxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb ./bindingschema_2_1.xsd" 
version="2.1"> 

<jxb:bindings schemaLocation="classpath:/schemas/schema.xsd" node="/xs:schema"> 
    <jxb:bindings node="//xs:complexType[@name='AbstractChangeable']"> 
    <jxb:class implClass="com.test.AbstractEntity" /> 
    </jxb:bindings> 
</jxb:bindings> 

उत्तर

5

कुछ क्या मैं यहाँ काम कर रहा है करना चाहते हैं की तरह कुछ है की जरूरत है:

<jaxb:bindings schemaLocation="maven:org.jvnet.jaxb2.maven2:maven-jaxb2-plugin-tests-po!/purchaseorder.xsd" node="/xs:schema"> 
    <jaxb:schemaBindings> 
     <jaxb:package name="org.jvnet.jaxb2.maven2.tests.po"/> 
    </jaxb:schemaBindings>  
</jaxb:bindings> 

लेकिन यह इस समय नहीं करता है। कृपया file an issue, मैं इसे ठीक करने का प्रयास करूंगा।

<jaxb:bindings scd="x-schema::po" xmlns:po="urn:po"> 
    <jaxb:schemaBindings> 
     <jaxb:package name="org.jvnet.jaxb2.maven2.tests.po"/> 
    </jaxb:schemaBindings>  
</jaxb:bindings> 

तो आप वास्तव में एक विशिष्ट स्कीमा स्थान पर आधारित बाध्य करने के लिए, आप नाम स्थान यूआरआई, जो सैद्धांतिक रूप से बेहतर है के आधार पर बाध्य कर सकते हैं की जरूरत नहीं है:

क्या अब काम करता है बाध्यकारी SCD आधारित है ।

व्यावहारिक रूप से मुझे एक अनुभव है कि एससीडी-बाइंडिंग हमेशा भरोसेमंद काम नहीं करती हैं।

अद्यतन

JAXB में अधिक जानकारी SCD उपयोग के लिए this link देखें।

+0

मुझे सचमुच यकीन नहीं है कि इस एससीबी बाइंडिंग तकनीक का उपयोग कैसे करें, एक मेवेन प्रदान किए गए निर्भरता जार के अंदर स्कीमा को संदर्भित करने के लिए, क्या उदाहरण हैं? – user1234057

+0

मैंने उपरोक्त उदाहरण पोस्ट किया है। आपको नेमस्पेस उपसर्ग ('xmlns: po =" urn: po "') निर्दिष्ट करना होगा और एसडीडी अभिव्यक्ति में इस उपसर्ग का उपयोग करना होगा ('scd =" x-schema :: po "' मतलब है "लक्ष्य नामस्थान के साथ स्कीमा को संबोधित करें उपसर्ग 'पीओ'' से)। यह लिंक देखें: http://jaxb.java.net/guide/Using_SCD_for_customizations.html – lexicore

+0

हम वास्तव में समझ नहीं पाए कि उस विधि के साथ मेवेन जार का संदर्भ कैसे दिया जाए, लेकिन प्लगइन अपडेट होने तक हम प्रतीक्षा करेंगे। सहायता के लिए धन्यवाद! – user1234057

6

आप maven-dependency-plugin:unpack उपयोग करने के लिए और फिर outputDirectory को maven-jaxb2-plugin बात की जरूरत है। बंधन फ़ाइल में इस मामले में आप कहने के लिए की तरह schemaLocation="../target/schemas/schema.xsd"

+1

मुझे पहले से बताए गए समाधान के प्रकार का समाधान मिल गया है, लेकिन मैं जानना चाहता हूं कि एक जार के अंदर स्कीमा का संदर्भ कैसे लें। – user1234057

-2

मुझे पता है कि यह एक पुराना सवाल है लेकिन मैं एक ही समस्या से जूझ रहा था। मैंने पाया कि इनलाइन बाइंडिंग करने से समस्या हल हो जाएगी। अब आपको बाध्यकारी फ़ाइल की आवश्यकता नहीं होगी और बाइंडिंग को इसके आधार पर परियोजनाओं पर ले जाया जाएगा।

+0

आपका उत्तर कोड उदाहरण के साथ बहुत बेहतर होगा। – gknicker

संबंधित मुद्दे