ApikitRuntime Exception: Invalid API Descriptor + Raml parser uncaught exception: null,什么意思?

ApikitRuntime Exception: Invalid API Descriptor + Raml parser uncaught exception: null, What does it mean?

我生成了一个 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

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

我试图找到有关此类异常的文档,但我还没有找到这方面的文档(如果有,请帮我找到 link)。

[已编辑]

我的 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"
              }

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

Main Objective: 是根据 inboundProperty 的值是 'backoffice' 还是 'client' 来路由消息,原因apikit-router 在选择子流程中。

好的,我知道你想做什么了,谢谢你提供额外的信息。

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

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

但是在您的场景中,您要在 APIkit 之前添加一个 http 端点和自定义逻辑。这些更改打破了 RAML 文件和您的代码之间的强制链接。请注意,您的自定义流程采用入站属性 "role",但未在 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>

希望这是有道理的。