现在的位置: 首页 > 综合 > 正文

Tibco XML Schema 的命名空间使用备忘

2013年08月24日 ⁄ 综合 ⁄ 共 1160字 ⁄ 字号 评论关闭

         在Tibco 中, 用XML 格式传输信息是很常见的,  如我们提供一个webservice wsA给别人调用,  wsA 的方法wsAF 的输入引用了 一个XML Schema ProjectBox, 这个wsAF 被调用后, 我们用SOAPEventSource 组件取得对方输入的信息, 提供给其他组件, 如: $SOAPEventSource/inputMessage/ns1:ProjectBox/ns1:Project_id.

        上面这段字符串, 让其他组件可以获得当前输入的Project_id ,  $SOAPEventSource/inputMessage/ns1:ProjectBox/ns1:Project_id.

        在我定义的ProjectBox 的Schema 里面, 我是没有定义 ns1 的信息的, 这个是tibco 帮我生成的, 当我把wsAF 的输入引用改为其他的Schema ProjectBox2 的时候, 我发现SOAPEventSource 组件提供给其他组件的字符串是: $SOAPEventSource/inputMessage/ns5:ProjectBox/ns5:Project_id.

        在我已经把 SOAPEventSource 的输入信息给到很多组件的时候, 我修改了 wsAF 的输入引用的Schema 修改了, 那我就修改很多地方了, 这显然不是我所希望的, 有什么解决办法吗?

       我猜想ns1 ,ns5 这些的生成跟命名空间应该有直接的关系, 当时Tibco 里面的东西很多跟命名空间有关, 在经过了一系列的探索, 测试和排除后, 终于定位到了ProjectBox2 的 Schema (Tibco 的Schema 编辑真心不好用),  

       重点在于ProjectBox2 Schema 的 targetNamespace, 我把这个targetNamespace 改为和 ProjectBox Schema 一样, 把wsAf 的输入重新引用为修改了targetNamespace 的ProjectBox2 (这一步必须的, 修改了targetNamespace 后, 原引用关系已经失效), 测试了一下, $SOAPEventSource/inputMessage/ns1:ProjectBox/ns1:Project_id
可行, 并且也不会跟ProjectBox 冲突(还没试过放在同一个流程下面是否会冲突, 不同的流程是确定不会冲突了), 算是比较完满的解决了这个问题. 

        Tibco 自动生成的ns1, ns2, pfx1, pfx2 这些随机值, 跟引用的XML Schema 的属性 targetNamespace 有直接的关系.
对于 targetNamespace 和 xmlns 的区别也明确了一些, 一个对外使用, 一个对内使用, 简单来说就是这样了.

抱歉!评论已关闭.