Mule 规范数据模型

Mule 规范数据模型,mule,canonicalization,enterprise-integration,Mule,Canonicalization,Enterprise Integration,我正在构建一个应用程序,它公开一个RESTAPI,并在后端通信和协调多个SOAP服务,以构建对RESTAPI的响应。我一直在阅读有关规范化数据模型以及它们如何帮助我松散地耦合这些后端SOAP服务的文章 我应该在RESTAPI和后端服务之间使用规范化的数据模型吗 目前,使用JAXB将后端SOAP响应解组到Java对象。然后,我使用脚本将jaxb对象映射到一个表示我希望作为JSON返回的结构的映射,并通过restapi将映射转换为JSON SOAP->jaxbjava对象->javamap(表示JS

我正在构建一个应用程序,它公开一个RESTAPI,并在后端通信和协调多个SOAP服务,以构建对RESTAPI的响应。我一直在阅读有关规范化数据模型以及它们如何帮助我松散地耦合这些后端SOAP服务的文章

我应该在RESTAPI和后端服务之间使用规范化的数据模型吗

目前,使用JAXB将后端SOAP响应解组到Java对象。然后,我使用脚本将jaxb对象映射到一个表示我希望作为JSON返回的结构的映射,并通过restapi将映射转换为JSON

SOAP->jaxbjava对象->javamap(表示JSON)->JSON

我应该在这里为规范模型添加另一个步骤吗

所以SOAP->jaxb Java对象->不代表SOAP或JSON结构的规范模型->Java映射(代表JSON)->JSON


这适合CDM吗?还是说增加这个额外的级别是多余的?

我想你说的是在你和服务之间有一个门面,而不是CDM。 您可以将jaxb生成的对象映射到内部对象,对这些对象执行应用程序逻辑,然后将这些对象映射到表示JSON接口的对象。 jaxb内部映射将使应用程序与正在使用的接口解耦。 内部到json的映射将使您向消费者公开的接口与内部对象分离


这是否值得,取决于环境的复杂性、改变的成本和可能性。例如,与共享和公开成熟且版本化的规范模型的服务紧密耦合可能是可以接受的。如果您使用的是一组特殊或第三方接口,则风险情况就大不相同。

据我所知,规范数据模型意味着表示所有可能的消息格式和/或协议的通用数据模型。例如,在Mule中,Mule
MuelMessage
是一个规范的数据模型,因为我们发送的每一条消息,Mule都会创建一个
MuleMessage
,该消息表示您的消息,而与我们使用的协议无关。因此,一般来说,创建这样一个规范化的数据模型有点困难

说到你的情况,我不知道你的SOAP对象有多复杂。如果它们太复杂,即具有多个级别,那么这将是一项困难的工作。我的建议是,与其有一个规范化的数据模型,为什么您不能编写自己的自定义转换器(看看是否可以使用内置的转换器),将SOAP消息解析并转换为相应的JSON响应。您可以有一个通用的transformer接口,但如果有多个实现,您可以执行解析和转换,这取决于您的SOAP消息

希望这有帮助