0

场景:我正在将 BizTalk 2006 应用程序升级到 BizTalk 2013。它收到的消息很少出现格式错误 - XML 启动,然后附加源中遇到的某种 Java 异常的文本。

代替

<foo>
    <bar/>
    <baz/>
</foo>

我明白了

<foo>
    <bar/>OrderCreateMessageBean createLine() Exception =&gt;java.lang.NullPointerException

在 BizTalk 2006 中,格式错误的消息将在默认 XMLReceive 管道中捕获,并使用失败的消息路由进行处理。在 BizTalk 2013 中,默认 XMLReceive 管道允许格式错误的消息通过,然后在下游业务流程中失败。XMLReceive 管道似乎仍在检查是否为消息上下文提升部署了架构,但没有检查格式正确的 XML - 我没有在管道中使用验证,也许我现在需要?

另一个突出的事实是 BizTalk 2013 安装应用了 CU2,这可能会引入一个问题。

所以,我想我的问题是:管道的行为在 2006 年到 2013 年之间是否发生了变化,而我在变更文档中错过了它?这是 BizTalk 2013 或 2013 与 CU2 组合中的已知缺陷吗?还有其他想法吗?

谢谢

4

2 回答 2

0

I contacted MS Premier Support and gave them example code. Support forwarded the issue to the Product Group. The Product Group has acknowledged the defect. A fix should be available in the next CU per support.

于 2014-07-08T16:48:55.760 回答
0

是的,您需要在 XML 反汇编器管道组件中将 ValidateDocument 设置为 true,并在其中指定 DocumentSpecName。

如果您不想在 XML 反汇编器中指定模式,请使用 XML 反汇编器和 XML 验证器创建一个自定义管道,而无需更改默认设置并在您的接收位置使用它。

这不是什么新鲜事,以前版本的 BizTalk 也不会验证 XML 有效负载是否已针对架构进行验证(请参阅此博客BizTalk 不验证我的消息?!?!),但 BizTalk 中可能还有一些其他更改,现在使问题浮出水面。

于 2014-06-17T00:59:37.780 回答