2012-10-04 17 views
8

के लिए एक रैपिंग वर्ग उत्पन्न मैं निम्नलिखित एक्सएमएल प्रकार:बनाओ JAXB XJC एक सरल प्रकार

<xsd:element name="FaxNumbers" minOccurs="0"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="FaxNumber" type="FaxNumber" maxOccurs="unbounded" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

FaxNumber प्रकार इस तरह दिखता है:

<xsd:simpleType name="FaxNumber"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:minLength value="1" /> 
    </xsd:restriction> 
</xsd:simpleType> 

जिसके परिणामस्वरूप एक्सएमएल कुछ इस तरह होना चाहिए :

<FaxNumbers> 
    <FaxNumber>3878374</FaxNumber> 
    <FaxNumber>387833434</FaxNumber> 
    <FaxNumber>3878334</FaxNumber> 
</FaxNumbers> 

एक्सएसडी से जावा कक्षाएं उत्पन्न करने के लिए जेएक्सबी एक्सजेसी चलाते समय यह निम्न वर्ग उत्पन्न करता है:

@XmlType(name = "FaxNumbers") 
public class FaxNumbers { 

    /** 
    * No comment. 
    */ 
    @XmlElement(name = "FaxNumber", required = true) 
    protected List<String> faxNumber = new ArrayList<String>(); 

} 

हालांकि मैं बाँध FaxNumber समग्र वर्ग के लिए इस तरह करना चाहते हैं:

@XmlType(name = "FaxNumbers") 
public class FaxNumbers { 

    /** 
    * No comment. 
    */ 
    @XmlElement(name = "FaxNumber", required = true) 
    protected List<FaxNumber> faxNumber = new ArrayList<String>(); 

} 

Where FaxNumber class looks like this: 

public class FaxNumber{ 

    @XmlValue 
    private String value; 
} 

वहाँ JAXB बाइंडिंग एक्सएमएल में बंधन को परिभाषित करने के लिए एक रास्ता है?

नोट: दुर्भाग्य से मैं नियंत्रण अपने हाथ में नहीं है और अपने FaxNumbers XSD परिभाषा उपयोग <xsd:element name="FaxNumber" ref="FaxNumber" maxOccurs="unbounded" /> में XSD

उत्तर

6

मुझे नहीं लगता कि आप के लिए इस तरह के एक FaxNumber वर्ग उत्पन्न करने के लिए xjc प्राप्त कर सकते हैं, लेकिन आप इसे स्वयं लिख सकते हैं और फिर इसे सही जगह पर स्लॉट करने के लिए बाहरी बाध्यकारी फ़ाइल का उपयोग कर सकते हैं।

package com.example; 
public class FaxNumber { 
    private String value; 
    // getter/setter 

    public static FaxNumber parse(String s) { 
    FaxNumber n = new FaxNumber(); 
    n.value = s; 
    return n; 
    } 

    public static String print(FaxNumber n) { 
    return n.value; 
    } 
} 

बाइंडिंग:

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      jaxb:version="2.0"> 
    <jaxb:bindings schemaLocation="example.xsd"> 
    <jaxb:bindings node="//xsd:simpleType[@name='FaxNumber']"> 
     <jaxb:javaType name="com.example.FaxNumber" 
      parseMethod="com.example.FaxNumber.parse" 
      printMethod="com.example.FaxNumber.print"/> 
    </jaxb:bindings> 
    </jaxb:bindings> 
<jaxb:bindings> 
1
लाइन <xsd:element name="FaxNumber" type="FaxNumber" maxOccurs="unbounded" /> के बजाय

नहीं बदल सकते। मुझे लगता है कि यह आपकी समस्या

+0

दुर्भाग्य से मैं नियंत्रण नहीं और XSD नहीं बदल सकते हैं (मूल पोस्ट अद्यतन करेगा)। –

+0

तो मुझे डर है कि आप उत्पन्न जावा फ़ाइल के मैनुअल संशोधन के साथ अटक से पहले आप इसका इस्तेमाल कर रहे हैं रहा हूँ। यदि आपके मामले के लिए यह संभव है –

+0

जेनरेट की गई जावा फाइलों का मैन्युअल संपादन ठीक काम करता है। हालांकि जब एक्सएसडी बदल जाता है और मैं फ़ाइलों को प्री-जेनरेट करता हूं तो मुझे हर बार मैन्युअल रूप से अपडेट करना पड़ता है। –

1

मेरे लिए काम करता है के बाद है। उम्मीद है की वो मदद करदे!

XSD:

<xsd:schema xmlns="http://www.hcentive.com/ws/eligibility/schema/beans" 
    targetNamespace="http://www.hcentive.com/ws/eligibility/schema/beans" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<xsd:element name="FaxNumbers"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="FaxNumber" type="FaxNumber" maxOccurs="unbounded" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
<xsd:complexType name="FaxNumber"> 
    <xsd:sequence> 
     <xsd:element type="xsd:string" name="value" /> 
    </xsd:sequence> 
</xsd:complexType> 
</xsd:schema> 

जनरेट किया गया वस्तु: FaxNumbers.java

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
    "faxNumber" 
}) 
@XmlRootElement(name = "FaxNumbers") 
public class FaxNumbers { 

    @XmlElement(name = "FaxNumber", required = true) 
    protected List<FaxNumber> faxNumber; 

    /** 
    * Gets the value of the faxNumber property. 
    * 
    * <p> 
    * This accessor method returns a reference to the live list, 
    * not a snapshot. Therefore any modification you make to the 
    * returned list will be present inside the JAXB object. 
    * This is why there is not a <CODE>set</CODE> method for the faxNumber property. 
    * 
    * <p> 
    * For example, to add a new item, do as follows: 
    * <pre> 
    * getFaxNumber().add(newItem); 
    * </pre> 
    * 
    * 
    * <p> 
    * Objects of the following type(s) are allowed in the list 
    * {@link FaxNumber } 
    * 
    * 
    */ 
    public List<FaxNumber> getFaxNumber() { 
     if (faxNumber == null) { 
      faxNumber = new ArrayList<FaxNumber>(); 
     } 
     return this.faxNumber; 
    } 

} 
+1

जैसा कि मैंने सवाल में तैनात है, मैं XSD संशोधित नहीं कर सकते इस बाहरी प्राधिकरण से संपर्क करने का प्रस्ताव होगा यह कहना है,। –

+0

फिर आप क्या संशोधित कर सकते हैं? आप केवल एक्सएसडी से जावा कक्षाएं उत्पन्न कर रहे हैं? – Anshu

+0

यह वही है जो मैं कर रहा हूं। –