当前位置: 首页 > 面试题库 >

XSD到Java,指定使用Java HashMap

翟冯浩
2023-03-14
问题内容

我试图从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>

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

在我的“错误”类中:受保护的地图详细信息= 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
”中,但是该名称空间中的组件无法从架构文档“ file://myFile.xsd”中引用。如果这是不正确的名称空间,则可能需要更改“
owi:hasmap”的前缀。如果这是正确的名称空间,则应在“ file://myFile.xsd”中添加适当的“导入”标签。

而且它不能将“ owi:hasmap”关联到任何类型定义组件。

任何想法 ?


问题答案:

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

解决方案在这里描述:

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

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



 类似资料:
  • 我正在尝试这里提供的解决方案https://social.msdn.microsoft.com/forums/en-us/16a91381-0714-4ba1-aff0-7f3b6483b282/populate-a-treeview-from-xsd-file-in-wpf?forum=wpf只采用xs:element和xs:sequence节点,排除所有其他节点(xs:complextype>

  • 我正在尝试使用JAXB将我无法控制的XSD转换为Java类。我得到的错误是: XSD中包含错误的代码位于: 具体来说,它是使用布尔类型加密的属性。布尔类型定义为 从四处搜索来看,这似乎是一个比较常见的情况。从我可以看出,mxencrypted行中的默认值不应该是1?当我将XSD加载到液态XML中时,模式不会报告错误。在这里验证XSD(http://www.utilities-online.info

  • 问题内容: 我想使用Java解析XML文件,并针对XSD模式在同一步骤中对其进行验证。XML文件可能包含几种模式的内容,如下所示: 给定一个名称空间,可以提供相应的xsd文件,但是在解析之前,所使用的名称空间是未知的。如果架构定义了属性的默认值,我也想以某种方式知道这一点。 如果知道架构,我可以验证文件,无需验证就可以解析文件,并且实现了LSResourceResolver。但是,我无法使其全部协

  • myType也被定义为complexType。然后得到生成的类MyResponse.java和Reference.java。我可以通过以下方式分配“引用”的值: 而且奏效了。 现在我只是删除了maxOccurs=“unbounded”,它不再起作用了。响应不再是List类型,而是JaxBelement类型。我试着用: 谁能告诉我,当它不是一个列表时,什么是正确的做法?

  • 我有两套XSD,一套用于入站操作,另一套用于出站操作。这两个XSD集具有相似的名称空间,但由于它们来自不同的源,因此需要在同一代码集中分别维护它们。每个XSD集合都有深度嵌套的类,并生成大约650个类。我正在使用Maven JAXB插件生成Java类 如果我指定了

  • 问题内容: 我可以在连接URL上指定它吗?怎么做? 问题答案: 从JDBC v 9.4开始,你可以使用新的currentSchema参数指定url,如下所示: