2012-10-15 21 views
5

संभव डुप्लिकेट एक मौजूदा जावा वर्ग के लिए एक स्कीमा तत्व मैप कैसे करें:
jaxb xjc mapping to existing domain objectsJAX-बी -

मैं उपयोग कर रहा हूँ JAX-बी एक XML स्कीमा से जावा वर्गों उत्पन्न करने के लिए ।

मेरी स्कीमा में एक तत्व है कि मैं अपनी परियोजना में मौजूद जावा क्लास से जुड़ना चाहता हूं। मेरा बाध्यकारी एक .xjb फ़ाइल में किया जाता है। मैंने कई दृष्टिकोणों की कोशिश की है लेकिन काम करने के लिए कुछ भी नहीं मिल सकता है।

क्या यह संभव है? यदि हां, तो कैसे?

अपने मौजूदा जावा वर्ग:

package com.existing; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlType; 

@XmlAccessorType(XmlAccessType.FIELD) 
public class Existing { 
    private String prop; 
    public String getProp() { return prop; } 
    public void setProp(String prop) { this.prop = prop; } 
} 

मेरे स्कीमा:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.baloiselife.com/xpression/policy" 
    xmlns="http://www.baloiselife.com/xpression/policy" > 

<xs:element name="root_node"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="some_other_propery" type="xs:string"/> 
     <!-- I want this element to map onto my existing Java class --> 
     <xs:element name="special_element" type="existing_type" minOccurs="0" /> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<!-- I want this element to be ignored, and instead my Java class used --> 
<xs:complexType name="existing_type"> 
    <xs:sequence> 
    <xs:element name="prop" type="xs:string" minOccurs="0" /> 
    </xs:sequence> 
</xs:complexType> 

तो किसी भी विचार क्या मेरी बाध्यकारी होना चाहिए

यहाँ मेरी समस्या का एक छोटा उदाहरण है? मैंने jxb: क्लास सेटिंग का उपयोग करने का प्रयास किया, लेकिन इसे काम पर नहीं मिला। मेरे अंतिम परिणाम दो आवश्यकताओं हैं:

  1. ExistingType वर्ग नहीं स्कीमा
  2. RootNode वर्ग प्रकार के किसी तत्व मौजूदा है, जो अपने मौजूदा जावा वर्ग के लिए नक्शे है से उत्पन्न है

उत्तर

6

आप जो भी चाहते हैं उसे करने के लिए एक्सजेसी को कॉन्फ़िगर करने के लिए बाहरी बाध्यकारी फ़ाइल का उपयोग कर सकते हैं।

binding.xjb

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

    <jxb:bindings schemaLocation="yourSchema.xsd"> 
     <jxb:bindings node="//xs:complexType[@name='existing_type']"> 
      <jxb:class ref="com.existing.Existing"/> 
     </jxb:bindings> 
    </jxb:bindings> 
</jxb:bindings> 

XJC कॉल

xjc -d outputDir -b binding.xjb yourSchema.xsd 
+1

धन्यवाद ब्लेज। ऐसा लगता है कि 2.1 जेएक्सबी स्कीमा के साथ रेफरी एट्रिब्यूट जोड़ा गया था, और मेरा आईडीई एक पुराने का उपयोग कर रहा था ... तो मुझे वह विकल्प नहीं मिला! सब कुछ अब महान काम करता है। –

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

  • कोई संबंधित समस्या नहीं^_^