XSD pour Java, indiquer l'utilisation de Java HashMap
Je suis en train de générer des classes Java à partir d'un schéma XSD. Je sais exactement ce que je veux générer en Java, et je suis en train d'écrire le correspondant de schéma XSD.
J'ai besoin de représenter une java.util.HashMap (HashMap).
Je ne trouve pas comment spécifier dans le schéma XSD (ou xjb de liaison de fichier) que j'ai envie d'une HasMap en Java. Il a toujours générer une Liste..
ici le code que je veux générer
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ErrorMessage", propOrder = { "name", "details"})
public class ErrorMessage {
@XmlElement(required = true)
protected String name;
@XmlElement(required = false)
protected java.util.Map<String, String> details = new HashMap<String, String>();
J'ai essayé ceci:
<xsd:complexType name="ErrorMessage">
<xsd:sequence>
<xsd:element name="name" type="xsd:string" />
<xsd:element name="details" type="map" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="map">
<xsd:sequence>
<xsd:element name="mapEntry" type="mapEntry" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="mapEntry">
<xsd:sequence>
<xsd:element name="key" type="xsd:string" />
<xsd:element name="value" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
Mais il continuent à générer de java.util.Liste des mapEntry:
Dans mon "Erreur" de la classe:
protégé des détails de la Carte = new Carte();
Au lieu de
protected java.util.Map<String, String> details = new HashMap<String, String>();
Et les produits "carte" de la classe est :
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "map", propOrder = {"mapEntry"})
public class Map {
protected List<MapEntry> mapEntry;
J'ai vraiment besoin d'utiliser une carte pour mon application.
Une idée sur comment je peux faire ?
Note: j'ai aussi essayé d'utiliser Oracle owi:hasmp, mais il a obtenu un espace de noms d'erreur.
xmlns:owi="http://www.oracle.com/webservices/internal" (also tried with xmlns:owi="http://www.oracle.com/webservices/internal/literal")
inclus dans ma déclaration de schéma de
et mon "détails" élément déclaré comme ci-dessous
<xsd:element name="details" type="owi:hashmap" />
L'erreur est:
src résoudre.4.2: Erreur de résoudre le composant 'owi:hasmap'. Il a été
détecté que 'owi:hasmap' est dans l'espace de noms
'http://www.oracle.com/webservices/internal", mais les composants de ce
espace de noms ne sont pas référençable de document de schéma
'file://monfichier.xsd. Si c'est l'espace de noms incorrect, peut-être le
préfixe de "owi:hasmap' doit être changé. Si c'est la bonne
espace de noms, puis appropriée '"importation" de la balise doit être ajoutée à
'file://monfichier.xsd
Et il ne peut pas associer "owi:hasmap" à une définition de type de composant.
Une idée ?
- Le problème n'est pas la table de hachage de type, c'est plutôt la référence à l'xsd à le décrire. Cela vous aide? stackoverflow.com/questions/12105840/...
- J'ai aussi essayé de l'importer, l'Oracle de l'espace de noms avec xsd:import, mais toujours le même résultat (ne peut pas associer owi:hashmap (ou juste hashmap pour tout type definition).
Vous devez vous connecter pour publier un commentaire.
Oui, les cartes sont traitées de façon transparente par jaxb, mais seulement dans un sens.
La solution est décrite ici:
http://todayguesswhat.blogspot.co.uk/2012/09/jaxb-xsd-to-java-maphashmap-example.html
Mais c'est beaucoup de tracas si vous avez déjà une classe correctement les cartes. Pourquoi voulez-vous régénérer à partir de XSD?