【问题标题】:Are XSD type definitions validated at compile time?XSD 类型定义是否在编译时验证?
【发布时间】:2013-01-17 17:10:49
【问题描述】:

在我的一个项目中,我曾经有一个定义为长度为 20 的 WSDL 元素:

<xs:element name="LastName" type="mns:String20Type" />

其中 String20Type 是在内部 XSD 中定义的:

        <xs:simpleType name="String20Type">
            <xs:restriction base="xs:string">
                <xs:maxLength value="20" />
            </xs:restriction>
        </xs:simpleType>

为了增加该元素的长度,我将 String20Type 更改为 String40Type 没有将类型定义添加到架构中并重新构建:

<xs:element name="LastName" type="mns:String40Type" />

构建成功完成,没有任何错误、警告、投诉或任何类型的提示。

为什么?

系统怎么知道String40Type是什么?

【问题讨论】:

  • 在我看来,您的构建没有对架构进行任何验证。在您实际测试您的应用程序之前,这不会发生。这不是在编译时检查的,而是在运行时执行的。
  • 哇哦。所以这看起来像是在暴露,因为在构建/编译时发现错误的能力通常比在运行时发现错误更可取。我刚刚在 Eclipse 的 WSDL 编辑器窗口上找到了右键单击 validate 菜单项...谢谢。
  • 但不幸的是,validate 操作也没有抱怨......想法?
  • 嗯...听起来像是 Eclipse 没有正确验证它,或者您在某处定义了该类型。我使用 LiquidXML 和 Altova XML Spy。我建议你尝试那些专门的 IDE 包,让他们验证它,看看错误在哪里。他们有免费试用,所以试一试。
  • @mastashake57 您的第二个猜测是正确的解释:我在其他地方(在那个长 WSDL 文件中)定义了该类型,与 String20Type 定义相去甚远,我只是没有看到它。此外,如果我使用真正未定义的类型(例如String101Type),JAXB 将失败构建,在模式文件的第 69 行第 6 列发出 "undefined simple or complex type 'mns:String101Type'。 。” 如果您将此作为答案发布,我会接受。谢谢!

标签: eclipse xsd wsdl xsd-validation


【解决方案1】:

根据要求:

嗯...听起来像是 Eclipse 没有正确验证它,或者您在某处定义了该类型。我使用 LiquidXML 和 Altova XML Spy。我建议你尝试那些专门的 IDE 包,让他们验证它,看看错误在哪里。他们有免费试用,所以试一试。

【讨论】:

  • 实际上,我不需要这些包,因为 Eclipse WPT 的 Validate 一直在做它的工作:这些类型一直都在定义,只是我不知道,因为 WSDL文件很长,并且这些类型定义没有组合在一起以进行直观的导航。现在一切都很好。此外,主题行问题的答案是:是的! XSD 类型定义在编译时进行验证——至少如果您使用JAXB
猜你喜欢
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多