我使用我们组织内另一个团队开发的 XSD 以合同优先(自上而下)的方式开发了一个小型 Web 服务。我遇到的问题是,如果请求格式稍有错误,服务仍会运行。我真的需要它来验证针对 XSD 的请求,但我不知道如何强制 Axis 或 Castor 这样做。
当我说“格式稍有错误”时,我的意思是请求包含正确的元素,但排序不正确。在 Castor 解组期间,将拒绝真正格式错误的请求。格式稍有错误的请求将解组,并可能产生不希望的结果。这是一个例子:
一个有效的请求应该包含如下所示的项目列表:
<ItemList>
<Item>Value1</item>
<Item>Value2</item>
<Item>Value3</item>
</ItemList>
这将正确解组,Web 服务将处理所有三个值。
但是,我发现如果像这样呈现相同的一组值:
<ItemList>
<Item>Value1</item>
<Item>Value2</item>
</ItemList>
<ItemList>
<Item>Value3</item>
</ItemList>
然后这也将以与第一个示例相同的方式解组,并且将处理所有三个值。在这种情况下,最终结果是可以接受的,但是根据 XSD,这种结构是不正确的,我更希望它产生故障。
这是取自 XSD 的请求定义:
<xsd:complexType name="SampleRequestType">
<xsd:sequence>
<xsd:element name="ItemList" minOccurs="1" maxOccurs="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Item" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
SoapUI 将第二个示例报告为无效,因此我确信 XSD 是正确的。
我已经尝试了一些方法来强制进行 XSD 验证,但到目前为止没有任何效果。有谁知道如何强制 Axis 或 Castor 进行验证?
由于历史原因,我正在使用这两个组件的旧版本 - Axis 1.3 和 Castor 1.1,但如果我能让 XSD 验证正常工作,我愿意承受任何升级的痛苦。
非常感谢
史蒂夫