我生成了一个apikit路由器,它路由到raml文件并从中生成一个xml流。
#%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"
}
当我开始运行项目时,我收到了错误
org.mule.module.apikit.exception.ApikitRuntimeException:无效的API描述符 - 找到错误:1个Raml解析器未捕获异常:null
现在,我的问题是:有人可以向我解释这个例外是什么意思吗?我想确定导致异常的原因。
我试图找到关于此类异常的文档,但我没有找到相关的文档(如果有的话,请帮我找到链接)。
[编辑]
我的RAML定义只是用于测试的模拟:
{{1}}
如果这有帮助:我没有向apikit-router流添加http-listener 因此,理论上(我的)它将使用主HTTP-Listener路由到xml来自RAML文件的生成流。
主要目标:是根据inboundProperty路由消息,无论其值是“后台”还是“客户端”,这是apikit-router在选择子流中的原因。
答案 0 :(得分:0)
好的,我知道你要做什么,感谢额外的信息。
RAML是希望使用您服务的客户的“合同”。它列出了如何打电话给你的服务;什么是端点地址,使用什么方法,我的请求有效负载应该是什么格式。以及预期的信息。利用RAML文件中的所有信息,他们应该能够与您的服务集成,而无需联系开发人员。
MuleSoft已将RAML紧密集成到他们希望您遵循的API开发周期中。其中一个方面是APIkit路由器组件。它根据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>
希望这是有道理的。