0

我生成了一个 apikit-router,它路由到一个 raml 文件并从中生成一个 xml 流。

<when expression="message.inboundProperties.role == &quot;backoffice&quot;"> <apikit:router config-ref="backoffice-config" doc:name="Backoffice APIKit Router"/></when> ...

当我开始运行项目时,我收到一个错误

org.mule.module.apikit.exception.ApikitRuntimeException:无效的 API 描述符 - 发现错误:1 Raml 解析器未捕获的异常:null

现在,我的问题是:有人可以向我解释这个例外是什么意思吗?我想确定导致异常的原因。

我试图查找有关此类异常的文档,但没有找到相关文档(如果有,请帮我找到链接)。

[编辑]

我的 RAML 定义只是一个模拟测试:

#%RAML 1.0
title: mocktest
mediaType: application/json

/mocktest:
  description: Describes a list of Employees.

  get:
    description: Request Body for a new Employee Post Request.
    responses: 
      200:
        description: OK Responsebody for a new EMployee POst Req.
        body: 
          application/json:
            example:  |
              {
              "employeeId":2231,
              "employeeName":"Lorem Ipsum"
              }

如果这有帮助:我没有将 http-listener 添加到 apikit-router 流,因此理论上(我的)它将使用主 HTTP-Listener 从 RAML 文件路由到 xml 生成的流。

主要目标:根据 inboundProperty 的值是“后台”还是“客户端”来路由消息,这是 apikit-router 在选择子流中的原因。

4

1 回答 1

0

好的,我知道您要做什么,感谢您提供的额外信息。

RAML是为希望使用您的服务的客户提供的“合同”。它列出了如何调用您的服务;端点地址是什么,使用什么方法,我的请求有效负载应该是什么格式。以及预期返回的信息。有了 RAML 文件中的所有信息,他们应该能够与您的服务集成,而无需联系开发人员。

MuleSoft 已将 RAML 紧密集成到他们希望您遵循的 API 开发周期中。其中一个方面是 APIkit 路由器组件。它会根据 HTTP 请求自动在接口(您的 RAML 文件)和后端流之间路由请求。

但是,在您的场景中,您要在 APIkit 之前添加一个 http 端点和自定义逻辑。这些更改破坏了 RAML 文件和您的代码之间的强制链接。请注意,您的自定义流程采用入站属性“角色”,但未在 RAML 文件中指定。您的客户在加入您的服务时不会知道此属性的存在。Mulesoft 希望防止这种不匹配发生,这就是您收到错误的原因。

我建议将您的 RAML 文件修改为:

...
get:
    description: Request Body for a new Employee Post Request.
    queryParameters:
      role: 
    responses:
...

你的流量是

<flow name="get:/mocktest:backoffice-config">
    <choice doc:name="Choice">
        <when expression="#[message.inboundProperties.role == 'backoffice']">..</when>
        <otherwise>...</otherwise>
    </choice>
</flow>

希望这是有道理的。

于 2018-01-09T15:05:45.737 回答