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).
InformationsquelleAutor hiveship | 2015-02-25