场景:我正在将BizTalk 2006应用程序升级到BizTalk 2013.它收到的消息很少出错 - XML启动,然后附加源中遇到的某种Java异常的文本。
而不是
<foo>
<bar/>
<baz/>
</foo>
我得到了
<foo>
<bar/>OrderCreateMessageBean createLine() Exception =>java.lang.NullPointerException
在BizTalk 2006中,格式错误的消息将被捕获在默认的XMLReceive管道中并使用失败的消息路由,可以处理它。在BizTalk 2013中,默认的XMLReceive管道允许通过格式错误的消息,然后在下游业务流程中失败。 XMLReceive管道似乎仍然检查是否为消息上下文提升部署了模式,但是没有检查格式良好的XML - 我不是在管道中使用验证,也许我现在需要?
另一个突出的事实是BizTalk 2013安装已经应用了CU2,这或许引入了一个问题。
所以,我想我的问题是:2006年到2013年之间管道的行为是否发生变化,我在更改文档中错过了它?这是BizTalk 2013或2013中与CU2组合的已知缺陷吗?还有其他想法吗?
由于
答案 0 :(得分:0)
是的,你需要在XML反汇编管道组件中将ValidateDocument设置为true,并在那里指定DocumentSpecName。
如果您不想在XML反汇编程序中指定模式,请使用XML反汇编程序和XML验证程序创建自定义管道,而无需更改默认设置并在接收位置使用该管道。
这不是什么新东西,以前版本的BizTalk也不会验证针对模式验证的XML有效负载(请参阅此博客BizTalk Does Not Validate My Message?!?!),但BizTalk中可能还有其他一些变化,现在已经带来了问题。
答案 1 :(得分:0)
我联系了MS Premier Support并给了他们示例代码。支持将问题转发给产品组。产品组已承认该缺陷。应该在每个支持的下一个CU中提供修复。