JAXB - Configurações XJC para não gerar ligação direta do bit de conversão do par de valores-chave do mapa para a lista

StackOverflow https://stackoverflow.com//questions/20052279

  •  26-12-2019
  •  | 
  •  

Pergunta

Existe a possibilidade de forçar o XJC a não gerar conversão de mapa para lista de pares de valores-chave?

Quando eu faço aula anotada do Jaxb

@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;
}

}

E gerar o esquema via schemagen, obterei o seguinte esquema 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>

Quando eu gero classes anotadas em jaxb via xjc com ligações especificadas:

    <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>

Eu voltarei:

    @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;
            }
        }
    }
}

Não era exatamente isso que eu queria.Existe uma maneira de obter minha opinião "original"?

Foi útil?

Solução

Não existe um padrão JAXB (JSR-222) maneira de gerar a seguinte classe a partir de um esquema 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;
    }

}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top