XSD到Java,指定使用Java HashMap

时间:2015-02-25 11:40:46

标签: java xml xsd jaxb wadl

我正在尝试从XSD架构生成一些Java类。我确切地知道我想用Java生成什么,并且我试图编写相应的XSD架构。

我需要表示一个java.util.HashMap(HashMap)。 我无法找到如何在XSD架构(或xjb绑定文件)中指定我想要Java中的HasMap。它总是生成一个List ..

这里是我要生成的代码

    @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>();

我试过这个:

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

但它仍然会继续生成mapEntry的java.util.List:

在我的&#34;错误&#34;类:      protected Map details = new Map();

而不是

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

生成的&#34;地图&#34;上课是:

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

我真的需要为我的应用程序使用地图。 关于我怎么做的任何想法?

注意:我也尝试使用Oracle owi:hasmp但是出现了命名空间错误。

xmlns:owi="http://www.oracle.com/webservices/internal" (also tried with xmlns:owi="http://www.oracle.com/webservices/internal/literal")

包含在我的架构声明中

和我的&#34;细节&#34;声明如下的元素

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

错误是:

  

src-resolve.4.2:解析组件错误&#ow;:hasmap&#39;。它是   检测到&#ow;:hasmap&#39;在名称空间中   &#39; http://www.oracle.com/webservices/internal&#39;,但是来自此的组件   命名空间不能从架构文档中引用   &#39;文件://myFile.xsd。如果这是不正确的命名空间,也许是   'owi:hasmap&#39;的前缀需要改变。如果这是正确的   命名空间,然后是一个适当的导入&#39;标签应该添加到   &#39;文件://myFile.xsd

它无法关联&#34; owi:hasmap&#34;到任何类型定义组件。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

是的,地图由jaxb无缝处理,但只能以一种方式处理。

此处描述了解决方案:

http://todayguesswhat.blogspot.co.uk/2012/09/jaxb-xsd-to-java-maphashmap-example.html

但如果你已经有一个正确映射的类,那将是很麻烦的。为什么要从XSD重新生成它?