2014-10-17 67 views
1

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

预组装:

  • NO组件

组装

  • 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个组成部分的地方。

任何想法,我可能要检查,以使其与所有部件工作?

谢谢你和问候 迈克尔

+0

上述步骤的你的输出消息我以为你改变自定义组件1的消息?您确定消息的正文流是否正确,并在更改后设置为正确的长度? – 2014-10-17 13:54:10

+0

在第一个组件中,我改变了消息并为BodyPart.Data分配了一个新的内存流(并将流的位置设置为0) – MFox 2014-10-17 14:29:50

+0

您是否尝试将该流记录到字符串之前的某个位置?你可以试着看看它是否有任何问题。 – 2014-10-17 14:31:41

回答

0

最有可能您的组件1添加XmlElement的节点有一些无效值如广告为复杂类型节点(记录节点)提供空值(<Order><price></price></Order> adding empty value after <Order> and then <price> comes)。 如果您在消息进入组件1之前使用映射来创建Xml,那么它可能也会在此处发生。

  • 尝试在验证阶段移除自定义组件2和XmlValidator,并查看输出xml是如何进入文件夹并尝试在记事本++中看到的。
  • 验证XML模式
+0

嗨,我捕获组件1后的xml并验证它对XSD在外部工具中 - 它是有效的。我终于找到了3个负责错误的节点。它们都有属性,但没有节点值,例如:如何使它适用于此场景?谢谢! – MFox 2014-10-20 11:19:41

+0

是否可以在这里添加模式和生成的xml。你有没有试过添加值和这些节点,看看它是否有效? – 2014-10-20 15:13:59