【问题标题】:BizTalk generated XSD fails to validate the XML its derived fromBizTalk 生成的 XSD 无法验证其派生自的 XML
【发布时间】:2010-10-24 20:58:31
【问题描述】:

我从另一个系统得到一个 XML 响应,但没有 XSD,所以我使用 Create Schema 选项来生成一个。

然后我将 XSD 添加到我的 BizTalk 2006 R2 项目中,并将其“输入实例文件名”属性设置为原始 XML 消息。

尝试了“验证实例”选项,但失败了???,出现了一些类似这样的错误......
错误 BEC2004:xsi:type 属性值“http://www.w3.org/2001/XMLSchema:int”对于元素“http://www.aniteps.com/xml/schemas/awm/images4:NumberOfErrors”无效,要么是因为它不是从架构中的类型有效派生的类型,要么是因为它阻止了 xsi:type 派生。

用于生成 XSD 的 XML 怎么会失败?

我的 XML 示例是 ...

<?xml version="1.0" encoding="utf-8"?>
<ImportIndexDocumentResponse 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://www.aniteps.com/xml/schemas/awm/images4">
  <HasErrors>false</HasErrors>
  <NumberOfErrors xsi:type="xsd:int">0</NumberOfErrors>
  <ErrorDescription xsi:type="xsd:string">No exception ocurred.</ErrorDescription>
  <ErrorNumber xsi:type="xsd:int">0</ErrorNumber>
  <FailedItems>
    <Item>
      <OriginalDataString xsi:type="xsd:string" />
      <ErrorDescription xsi:type="xsd:string" />
    </Item>
  </FailedItems>
  <UniqueDocumentReferences>
    <UniqueDocumentReference>FA40FE</UniqueDocumentReference>
    <UniqueDocumentReference>U55922</UniqueDocumentReference>
  </UniqueDocumentReferences>
</ImportIndexDocumentResponse>

而 BizTalk / Visual Studio 2005 生成 ...

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xmlns:xs="http://www.w3.org/2001/XMLSchema" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            attributeFormDefault="unqualified" 
            elementFormDefault="qualified" 
            targetNamespace="http://www.aniteps.com/xml/schemas/awm/images4">
  <xs:element name="ImportIndexDocumentResponse">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="HasErrors" type="xs:boolean" />
        <xs:element name="NumberOfErrors" type="xs:unsignedByte" />
        <xs:element name="ErrorDescription" type="xs:string" />
        <xs:element name="ErrorNumber" type="xs:unsignedByte" />
        <xs:element name="FailedItems">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Item">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="OriginalDataString" />
                    <xs:element name="ErrorDescription" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="UniqueDocumentReferences">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="UniqueDocumentReference" type="xs:string" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xsd:schema>

【问题讨论】:

    标签: validation xsd biztalk


    【解决方案1】:

    XSD 生成器相当愚蠢,并且没有注意到示例实例文档包含类型注释(xsi:type 属性)。所以它决定 应该包含无符号字节而不是有符号整数,正如类型注释所说。

    然后发生的情况是验证器变得混乱,因为元素有两种不同的类型定义,那么它应该相信谁呢?您可以尝试更改架构,以便类型定义与 xsi:type 覆盖匹配,这可能会有所帮助。

    【讨论】:

    • 看在 Tomas 上,更改为 xs:int,我的单元测试很有效。非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 2015-06-27
    • 2020-08-14
    • 2010-11-07
    • 2013-01-18
    相关资源
    最近更新 更多