1

背景:

澳大利亚某政府支持的宽带服务批发商听取了讨论组关于如何最好地向零售 ISP 提供 B2B 服务的反馈。他们选择了EbXML

问题:

我们是一家非常小的商店(相对而言),不想在集成上花费大量时间。我们已经熟悉成对(入站和出站)SOAP 服务的集成。过去,我们使用了基于 WSDL 的代码生成工具(主要使用 RPC/Literal 服务),其中 WSDL 具有描述性并且足够简单,代码生成工具可以消化。

如果可能的话,我们希望避免将服务与我们的业务“堆栈”手动集成。我们知道“接口模式”已经更新了好几次;我们希望(尽可能)生成代码和模式,以便我们可以将我们与供应商的关系以及出站/入站消息建模为 SQL 数据库中的简单“队列”(表)——将是我们的整合点。

从出站(“发件人”)SOAP Web 服务开始……它发布服务的文档/文字 WSDL 描述,该描述似乎可以与各种工具(例如:wsdl2java、SoapUI)一起正常工作,以生成 EBXML“包装器”消息. 这并没有说明“有效负载”消息本身(至少对于我们看过的 MSH)需要multipart/relatedtext/xml.

“有效负载”消息在提供的 CPA(类似于绑定)和 Schema(标准外观的 XSD)文件中定义。MSH 本身似乎没有为有效负载消息提供任何外部验证。

问题:

EbXML CPAs/Schemas是否可以使用相同类型的代码生成(如 WSDL 描述的 SOAP Web 服务所见)工具?(即:可以使用 CPA 和“有效负载”接口模式并输出 java/c++/whatever和/或特定于“有效负载”接口消息和/或示例消息的类似 WSDL 的工具)。

如果是这样,我在哪里看?

如果没有,是否有任何特定于 EbXML 的问题会阻止它?(鉴于手头的信息,我宁愿不花几个星期的时间来开发无法“正确”实施的工具)。

4

2 回答 2

0

唉,似乎没有针对 EbXML 的“有效负载”消息的特定工具,特别是因为 EbXML 不规范这些消息。

但是,CPA(通过canSendcanRecv)元素的行为有点像 SOAP WSDL,并且 XSD 的用途与 SOAP 相同,因此相距不远。

确实存在用于在运行时将 XSD 中定义的类型转换为消息(在用户提供的数据中合并)的软件,但根据我的问题,没有明显的工具可用于围绕 CPA 和相关 XSD生成代码。

此外,由于难以搜索 XML Schema 的元语法(即:一旦 XML 标记化被排除在外,XML Schema 的语法仍然存在),实际上自己编写软件来执行此操作会带来更多问题。基本上,这很困难,因为在 XML 世界中,“语法”这个词有不同的含义,它会污染搜索结果。

我能够为每个MSDN 关于 XML Schema的文章(左侧列出的元素)顶部的 XML 语法片段编写一个解析器,这反过来又允许我为 XML 模式生成一个 LL1 语法,该语法适用于给定 XSD 的预解析 AST。

从那里我从这个元语法构建了一个自上而下的解析器:

  1. 遵循<xsd:import>s 和<xsd:include>s 将命名空间解析为进一步的 XSD。
  2. 递归解析消息类型,以便为每个 CPA 消息生成“扁平化”类型。
  3. 为消息类型生成打包器/解包器数据结构,允许生成各种语言的代码,以及从经过验证的“有效负载”XML 进行序列化和解析。

我的代码生成器仍然不知道各种 XML Schema 限制、键和其他约束,但可以及时添加对这些的支持。

在时间允许的情况下,我将使用语法(可能还有代码——取决于法律)的链接来更新这个答案。我将暂时不接受这个问题,以便如果有人奇迹般地找到了一个可以减少代码生成工作的工具,我会接受基于此的答案。

于 2014-05-22T11:48:17.360 回答
0

MSH 与有效载荷无关。CPA 中没有定义有效负载,只有用于发送 ebXML 有效负载的服务和操作名称是定义的。服务和操作在 ebXML 标头中传输,该标头是多部分消息的第一部分。有效负载本身可以是 xml、二进制或组合。每个有效载荷都是另一部分。

MSH 负责以下任务:

  • 为收到的消息发送(通常是异步的)确认
  • 如果在一定时间内没有收到确认,则重新发送消息
  • 忽略重复消息
  • 确保消息传递的顺序正确

实际行为都可以使用 CPA 进行配置,但兼容的 MSH 将支持所有这些。

这意味着 MSH 必须对其发送和接收的消息进行管理,这通常在数据库中完成。

如果您能找到从特定 CPA 生成 MSH 的工具,我会感到惊讶。您可以找到实现通用 MSH 并且可以使用 CPA 配置的软件/组件。

假设您不想自己构建,请寻找现有的 ebMS 适配器。使用您的 CPA(s) 对其进行配置。然后生成您喜欢的有效负载并将它们传递给 ebMS 适配器。

谷歌搜索“ebMS 适配器”或“ebMS 支持”。

于 2014-05-18T15:16:39.167 回答