/ / JAXB - XJC सेटिंग्स कुंजी-मूल्य जोड़ी रूपांतरण बिट प्रत्यक्ष बाइंडिंग की सूची के लिए मानचित्र उत्पन्न करने के लिए नहीं - jaxb, xjc, schemagen

जेएक्सबी - एक्सजेसी सेटिंग्स कुंजी-वैल्यू जोड़ी रूपांतरण बिट की सूची में मानचित्र उत्पन्न नहीं करने के लिए सीधे बाध्यकारी - जैक्सबी, एक्सजेसी, स्कीमगेन

क्या XJC को मजबूर करने की संभावना है कि मैप-टू-की-वैल्यू जोड़े रूपांतरण की सूची न बनाएं?

जब मैं जैक्सब एनोटेट क्लास लेता हूं

@XmlRootElement
public class Customer {

private Map<String, Address> addressMap = new HashMap<String, Address>();

public Map<String, Address> getAddressMap() {
return addressMap;
}

public void setAddressMap(Map<String, Address> addressMap) {
this.addressMap = addressMap;
}

}

और स्कीमा उत्पन्न करें स्कीमाजन के माध्यम से मुझे निम्नलिखित xsd स्कीमा मिलेगा:

  <xs:element name="customer" type="customer"/>

<xs:complexType name="address">
<xs:sequence>
<xs:element name="street" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="customer">
<xs:sequence>
<xs:element name="addressMap">
<xs:complexType>
<xs:sequence>
<xs:element name="entry" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="key" minOccurs="0" type="xs:string"/>
<xs:element name="value" minOccurs="0" type="address"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>

जब मैं निर्दिष्ट बाइंडिंग के साथ xjc के माध्यम से वापस jaxb एनोटेट कक्षाएं उत्पन्न करता हूं:

    <jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.1">
<jaxb:bindings schemaLocation="schema1.xsd">
<jaxb:bindings node="//xs:complexType[@name="customer"]//xs:element[@name="addressMap"]">
<jaxb:property>
<jaxb:baseType name="java.util.HashMap&lt;String,Address&gt;" />
</jaxb:property>
</jaxb:bindings>
</jaxb:bindings>

</jaxb:bindings>

मैं वापस आऊंगा:

    @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "customer", propOrder = {
"addressMap"
})
public class Customer {

@XmlElement(required = true)
@XmlJavaTypeAdapter(MapAdapter.class)
protected HashMap<String, Address> addressMap;

public HashMap<String, Address> getAddressMap() {
return addressMap;
}

public void setAddressMap(HashMap<String, Address> value) {
this.addressMap = value;
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"entry"
})
public static class AddressMap {

protected List<Customer.AddressMap.Entry> entry;

public List<Customer.AddressMap.Entry> getEntry() {
if (entry == null) {
entry = new ArrayList<Customer.AddressMap.Entry>();
}
return this.entry;
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"key",
"value"
})
public static class Entry {

protected java.lang.String key;
protected blog.map.generated.Address value;

public java.lang.String getKey() {
return key;
}

public void setKey(java.lang.String value) {
this.key = value;
}

public blog.map.generated.Address getValue() {
return value;
}

public void setValue(blog.map.generated.Address value) {
this.value = value;
}
}
}
}

यह वह नहीं है जो मैं वास्तव में चाहता था। क्या मेरा "मूल" इनपुट प्राप्त करने का कोई तरीका है?

उत्तर:

जवाब के लिए 0 № 1

वहाँ एक मानक नहीं है JAXB (JSR-222) XML स्कीमा से निम्न वर्ग उत्पन्न करने का तरीका।

@XmlRootElement
public class Customer {

private Map<String, Address> addressMap = new HashMap<String, Address>();

public Map<String, Address> getAddressMap() {
return addressMap;
}

public void setAddressMap(Map<String, Address> addressMap) {
this.addressMap = addressMap;
}

}