类似WSDL的EbXML CPA + Schema代码生成(不是EbXML消息本身)

时间:2014-05-18 08:04:00

标签: web-services soap wsdl b2b ebxml

背景:

澳大利亚某政府支持的宽带服务批发商从讨论组中收集了有关如何最好地向零售互联网服务提供商提供B2B服务的反馈意见。他们选择了EbXML

问题:

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

如果可能的话,我们希望避免将服务与我们的业务“堆叠”进行手工整合。我们知道'接口架构'已经多次更新;我们希望(尽可能地)进行代码和模式生成,以便我们可以模拟我们与供应商的关系以及出站/入站消息的简单"队列" (表)在SQL数据库中 - 这个将成为我们的集成点。

从出站("发送者")SOAP Web服务开始......它发布了一个似乎可以使用各种工具正常工作的服务的Document / Literal WSDL描述(例如:wsdl2java,SoapUI)生成EBXML'包装器'消息。这并没有说明有效载荷'消息本身(至少对于我们已经查看过的MSH)需要multipart/related类型为text/xml的附件。

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

问题:

是否可以为 EbXML CPA / Schemas 生成相同类型的代码(如WSDL描述的SOAP Web服务所见)工具? (即:消耗CPA和有效负载'接口模式并吐出java / c ++ /无论的工具,和/或特定于WSDL的类似于'有效载荷'接口消息和/或示例消息)。

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

如果没有,是否有任何特定于EbXML的问题会阻止它? (我不想花几个星期的时间来开发一个项目来开发无法实现的工具,并且正确地提供了手头的信息)。

2 个答案:

答案 0 :(得分:0)

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

MSH负责以下任务:

     
  • 发送(通常是异步的)已接收消息的确认  
  • 如果在一定时间内未收到确认,则重新发送消息  
  • 忽略重复的邮件  
  • 确保邮件的传递顺序正确无误

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

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

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

假设您不想构建自己的,请查找现有的ebMS适配器。使用您的CPA配置它。然后根据需要生成有效负载并将它们传递给ebMS适配器。

Google用于“ebMS适配器”或“ebMS支持”。

答案 1 :(得分:0)

唉,似乎没有具体的工具围绕有效载荷' EbXML的消息,特别是因为EbXML没有规范这些消息。

但是,CPA(通过canSendcanRecv)元素的行为有点像SOAP WSDL,而XSD与SOAP的用途相同,所以它并不太远

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

此外,实际上编写软件来自己做这件事会因为搜索XML Schema的元语法而变得更加困难(即:一旦XML标记化被分解出来,XML Schema仍然存在的语法)。基本上,这很难,因为在XML世界中,单词" grammar"具有不同的含义,可以对搜索结果进行评估。

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

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

  1. 关注<xsd:import><xsd:include>以将名称空间解析为更多XSD。
  2. 以递归方式解析消息类型,以便产生一个“扁平化”的消息。每个CPA消息的类型。
  3. 为消息类型生成一个打包器/解包器数据结构,允许生成各种语言的代码,以及从经过验证的有效负载序列化和解析#39; XML。
  4. 我的代码生成器仍然不了解各种XML Schema限制,密钥和其他约束,但可以及时添加对这些的限制。

    我会在时间允许的情况下通过链接到语法(以及可能的代码 - 取决于法律)更新此答案。我会暂时不接受这个问题,这样如果有人奇迹般地发现了一个工具代码生成工作少得多,我会接受基于此的答案。