【问题标题】:Biztalk custom pipeline components: XmlSchemaExceptionBiztalk 自定义管道组件:XmlSchemaException
【发布时间】:2014-10-17 11:42:18
【问题描述】:

我有一个包含以下组件的自定义发送管道:

预组装:

  • 无组件

组装

  • XML 汇编器

编码

  • 自定义组件 1
  • XML 验证器
  • 自定义组件 2

使用此配置,我总是在“自定义组件 2”中收到 XmlSchemaException。 “异常消息是”元素不能包含空格。内容模型为空。”

Execute(IPipelineContext pContext, IBaseMessage pInMsg)
{
  ReadOnlySeekableStream stream = new ReadOnlySeekableStream(pInMsg.BodyPart.GetOriginalDataStream());
  XDocument doc;
  //Exception on next line:
  using(XmlReader reader = XmlReader.Create(stream))
  {
    reader.MoveToContent();
  }
}

这很奇怪,因为当我删除例如“自定义组件 1”或“XML 验证器”时,它工作正常。只有当我拥有所有 3 个组件时,我才会遇到异常。

知道我可能需要检查什么才能使其适用于所有组件吗?

谢谢你和最好的问候 迈克尔

【问题讨论】:

  • 我假设您更改了自定义组件 1 中的消息?你确定消息的Body流是正确的并且修改后设置为正确的长度吗?
  • 在第一个组件中,我更改了消息并为 BodyPart.Data 分配了一个新的内存流(并将位置设置为流的 0)
  • 您是否尝试过将流记录到此行之前的某个位置的字符串?你可以试试看有没有问题。
  • 是的,我创建了一个 StreamReader 并使用了“ReadToEnd()”,但这也会抛出相同的 XmlSchemaException(当我在管道中拥有所有 3 个组件时)

标签: c# biztalk biztalk-2010


【解决方案1】:

很可能您的组件 1 添加了一个带有一些无效值的 XmlElement 节点,例如为复杂类型节点(记录节点)(<Order><price></price></Order> adding empty value after <Order> and then <price> comes) 添加空值。 如果您在消息到达组件 1 之前使用映射创建 Xml,那么它也可能在那里发生。

  • 尝试在验证阶段删除自定义组件 2 和 XmlValidator,查看输出 xml 是如何进入文件夹的,并尝试在 notepad++ 中查看。
  • 使用 Xml 架构验证上述步骤的输出消息

【讨论】:

  • 嗨,我在组件 1 之后捕获了 xml,并在外部工具中针对 XSD 对其进行了验证——它是有效的。我终于设法找到了导致错误的 3 个节点。它们都有属性,但没有节点值,例如: 如何使其适用于这种情况?谢谢!
  • 是否可以在这里添加架构和生成的xml。您是否尝试过添加值和这些节点并查看它是否有效?
猜你喜欢
  • 2017-08-15
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多