我正在尝试从 XSD 模式生成一些 Java 类。我确切地知道我想用 Java 生成什么,并且我正在尝试编写相应的 XSD 模式。
我需要表示一个java.util.HashMap(HashMap)。
我找不到如何在 XSD 架构(或 xjb 绑定文件)中指定我想要 Java 中的 HasMap。它总是生成一个列表..
这是我想要生成的代码
@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>
但它仍然继续生成一个java.util.List的mapEntry:
在我的“错误”课程中:
受保护的地图详细信息 = new Map();
代替
protected java.util.Map<String, String> details = new HashMap<String, String>();
生成的“地图”类是:
@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")
包含在我的架构声明中
我的“详细信息”元素声明如下
<xsd:element name="details" type="owi:hashmap" />
错误是:
src-resolve.4.2:解析组件“owi:hasmap”时出错。它是
检测到“owi:hasmap”位于命名空间中
'http://www.oracle.com/webservices/internal',但是来自于此的组件
命名空间无法从模式文档中引用
'文件://myFile.xsd。如果这是不正确的命名空间,也许
'owi:hasmap' 的前缀需要更改。如果这是正确的
命名空间,然后应添加适当的“导入”标签
'文件://myFile.xsd
并且它不能将“owi:hashmap”关联到任何类型定义组件。
任何想法 ?