当前位置: 首页 > 知识库问答 >
问题:

使用JAXB将XSD转换为Java时遇到的问题

弓嘉纳
2023-03-14

我正在尝试使用JAXB将我无法控制的XSD转换为Java类。我得到的错误是:

[ERROR] cvc-pattern-valid: Value 'true' is not facet-valid with respect to pattern '0|1' for type 'BooleanType'.
  line 139 of http://neon/meaweb/schema/common/meta/MXMeta.xsd

[ERROR] a-props-correct.2: Invalid value constraint value '1' in attribute 'mxencrypted'.
  line 139 of http://neon/meaweb/schema/common/meta/MXMeta.xsd

XSD中包含错误的代码位于:

  <xsd:complexType name="MXCryptoType">
    <xsd:simpleContent>
      <xsd:extension base="xsd:base64Binary">
        <xsd:attribute name="changed" type="ChangeIndicatorType" use="optional" />
        <xsd:attribute name="mxencrypted" type="BooleanType" use="optional" default="1" />
      </xsd:extension>
    </xsd:simpleContent>

具体来说,它是使用布尔类型加密的属性。布尔类型定义

  <xsd:simpleType name="BooleanType">
    <xsd:restriction base="xsd:boolean">
      <xsd:pattern value="0|1" />
    </xsd:restriction>
  </xsd:simpleType>

从四处搜索来看,这似乎是一个比较常见的情况。从我可以看出,mxencrypted行中的默认值不应该是1?当我将XSD加载到液态XML中时,模式不会报告错误。在这里验证XSD(http://www.utilities-online.info/xsdvalidation/#.UV3zkL_EW0s)报告与JAXB相同的错误。

有没有办法告诉JAXB忽略这个问题,只生成忽略默认值的类?

共有1个答案

秋阳荣
2023-03-14

你的问题与此类似(我刚刚更新了相关信息)。我不知道如何告诉JAXB忽略它,因为这个错误发生在XSD模式处理器中(在JAXB的xjc开始实际工作之前)。

唯一的方法可能是过滤掉默认属性;然而,在这种情况下,很明显XSD设计器打算将默认值设置为true,而生成的代码却不是这样(Java默认值为false)。

这可能会产生不必要的争吵,我的建议是与XSD提供商合作修复它。

也许是侧边栏,但我个人认为XSDS中的默认值是互操作性的怪物:任何不依赖XSD的XML处理器都会有不同的行为。

 类似资料:
  • 我花了大量的时间试图确定到底出了什么问题,使用LibreOffice将pdf转换为docx(以及doc转换为docx)的代码。 我使用了两个windows run接口来测试运行一些我发现相关的代码,也尝试了python,但两者都不起作用。 我在Windows上安装了LibreOffice v6.0.2。 我一直在使用此代码的变体尝试将某些pdf文件转换为与特定pdf文件不相关的docx: 我已经在

  • 从RC切换到Selenium Webdriver后,Selenium网格不再工作。请注意,我的大多数测试仍然是RC,但每次都要转换到Webdriver,因此仍然需要Selenium实例。看起来我的驱动程序和/或浏览器(Selenium)实例在并行运行时被覆盖。 下面是我的代码: 以下是一些更多的信息: 下面是测试的java代码:

  • 不推荐使用,是否有其他解决此问题的方法?

  • 我的customer.xsd如下所示。我正试图将它转换为pojo类schema_reference.4:未能读取模式文档“xml.xsd”,因为 1)找不到文件; 2)文件无法阅读; 3)文档的根元素不是。 我正在使用maven将XSD转换为Java clases。

  • 我想把一组复杂的xsd文件转换成Java/Hibernate实体。为此,我从这个链接下载了JAXB的2.2.7版本。解压文件,打开cmd.exe,导航到create-marshal示例的目录,运行ant compile以确认一切正常,然后运行ant clean以消除结果,将一切返回到启动条件。 当我试图使用不同的xsd文件作为create-marshal示例的输入时,问题出现了。具体地说,当xsd

  • 我想使用XML有效载荷,比如: 另一种有效载荷是: 所以我想为创建一个类,其中包含和一个,我可以在其中放置不同类型的对象,所以我尝试了多种类型的对象一个带有的类,但它不允许我具有相同的名称 在这种情况下我能做什么?提前感谢。