J'ai la carte suivante qui contient soit des instances double ou entier en tant que valeur, les deux qui étendent la classe abstraite Numéro, annoté comme suit:JAXB Carte avec classe abstraite valeurs
@XmlElement(name="settings")
private Map<String,Number> settings;
Il est rangea en XML: Je dois également fournir le XSD pour ce type de XML, et c'est là que j'ai des problèmes. J'ai essayé de définir un complexType avec un choix, mais cela ne fonctionne pas parce que l'élément qui contient l'int, et l'élément qui contient le double ne peuvent pas avoir le même nom (ie ils ne peuvent pas être tous les deux nommés "value"), ce qui est exactement ce que fait le XML généré par JAXB.
travaillerait Le XSD suivant, mais je ne veux pas avoir des noms différents éléments (ou):
<xsd:complexType name="Entry">
<xsd:sequence>
<xsd:element name="key" type="NimrodSettingKey" minOccurs="1" maxOccurs="1"/>
<xsd:choice>
<xsd:element name="double" type="xsd:double" minOccurs="1" maxOccurs="1"/>
<xsd:element name="int" type="xsd:integer" minOccurs="1" maxOccurs="1"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
Toutes les suggestions sur comment dois-je préciser que l'élément pourrait être un entier ou un double en mon document XSD?
Merci!
EDIT # 1
@svasa a suggéré d'utiliser l'approche suivante dans mon XSD, qui donnent le même nom à un élément dans un choix:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Settings"/>
<xsd:complexType name="Settings">
<xsd:sequence>
<xsd:element name="key" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:choice>
<xsd:element name="value" xs:type="xsi:double" minOccurs="1" maxOccurs="1" />
<xsd:element name="value" xs:type="xsi:integer" minOccurs="1" maxOccurs="1" />
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
mais mon éditeur XSD se plaint de ce erreur:
complex type 'Settings' violates the unique particle attribution rule in its components 'value' and 'value'
que je pense signifie que les deux éléments sous la doivent avoir des noms différents chacun, ils peuvent les deux ne sont pas nommés "valeur".
Par 'les valeurs qui contiennent un int et celles qui contiennent un nombre ne peuvent pas avoir le même nom 'voulez-vous dire le' key' ne peut pas avoir le même nom pour 'int' et' double' droit? – SomeDude
Oui, par exemple key = SETTING_A value = 0.5d (un double) et key = SETTING_B value = 1000 (et int). – Guillem