2015-02-25 1 views
2

J'essaie de générer une classe Java à partir du schéma XSD. Je sais exactement ce que je veux générer en Java, et j'essaye d'écrire le schéma XSD correspondant.XSD to Java, spécifiez l'utilisation d'un Java HashMap

J'ai besoin de représenter un java.util.HashMap (HashMap). Je ne trouve pas comment spécifier dans le schéma XSD (ou le fichier de liaison xjb) que je veux un HasMap en Java. Il génère toujours 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é:

<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 continue encore de générer un java.util.List de mapEntry:

Dans ma classe "Error": protected Détails de la carte = new Map();

Au lieu de

protected java.util.Map<String, String> details = new HashMap<String, String>(); 

Et généré classe "carte" est:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "map", propOrder = {"mapEntry"}) 
public class Map { 
    protected List<MapEntry> mapEntry; 

je vraiment besoin d'utiliser une carte pour mon application. Une idée sur comment je peux faire?

Remarque: J'ai également essayé d'utiliser Oracle owi:hasmp mais j'ai obtenu une erreur d'espace de noms.

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

et mon élément "détails" a déclaré comme ci-dessous

<xsd:element name="details" type="owi:hashmap" /> 

L'erreur est:

src-resolve.4.2: Résolution de l'erreur 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 cet espace de noms ne sont pas référençables du document de schéma « fichier: //myFile.xsd. Si cet espace de noms est incorrect, le préfixe de 'owi: hasmap' doit peut-être être modifié. Si cela est l'espace de noms correct, une étiquette « d'importation » appropriée devrait être ajouté à « file: //myFile.xsd

Et il ne peut pas associer « OWI: hasmap » à tout élément de définition de type.

Une idée?

+0

Le problème n'est pas le type hashmap, mais plutôt la référence au xsd le décrivant. est-ce que cela aide? http://stackoverflow.com/questions/12105840/xsd-syntax-for-xml-attributes-with-namespace – alkis

+0

J'ai également essayé d'importer l'espace de noms Oracle avec xsd: import, mais toujours le même résultat (ne peut pas associer owi : hashmap (ou juste hashmap à n'importe quelle définition de type). – hiveship

Répondre