适用版本: 6.8-7.15
1. 错误异常的基本描述 #
Watcher 的 Jira action 中,project 节点必须是一个对象,用来承载项目键、字段映射等信息。如果解析器在 project 位置没有看到 START_OBJECT,就会抛出当前异常。
典型报错:
failed to parse jira project. expected an object, but found [VALUE_STRING] instead
2. 为什么会发生这个错误 #
附带源码的首个判断已经说明问题本质:
if (token != XContentParser.Token.START_OBJECT) {
throw new ElasticsearchParseException("failed to parse jira project. expected an object; but found [{}] instead", token);
}
常见原因:
project被写成字符串、数组、布尔值或空值。- 程序错误地把项目 key 直接赋给
project,而不是包成对象。 - 模板渲染时丢失了一层对象结构。
3. 排查方法 #
- 定位 Jira action 中的
project节点。 - 确认它是不是
{ ... }对象,而不是单个字符串。 - 如果项目配置来自模板,查看最终 JSON 而不是中间数据结构。
- 对照一个可运行的 Jira action 示例,核对层级是否一致。
4. 如何解决这个错误 #
将 project 改成对象结构,例如:
{
"jira": {
"account": "ops_jira",
"issue": {
"project": {
"key": "OPS"
},
"summary": "cluster alert",
"description": "watch triggered"
}
}
}
不要直接写成:
"project": "OPS"
5. 预防建议 #
- 为 Jira action 建立固定 schema,强制
project为 object。 - 对模板输出做 JSON 结构测试。
- 复用统一的 Jira action 构造逻辑,减少手工拼接。
相关错误 #
- invalid-jira-account-account-settings-missing-required-setting-setting-how-to-solve-this-elasticsearch-exception
- invalid-jira-name-account-settings-invalid-url-setting-setting-how-to-solve-this-elasticsearch-exception
- invalid-jira-name-account-settings-unsecure-scheme-protocol-how-to-solve-this-elasticsearch-exception
附:日志上下文 #
下面保留当前页面中的源码或日志片段,便于继续结合异常调用栈定位问题:
XContentParser.Token token = parser.currentToken();
if (token == null) {
token = parser.nextToken();
}
if (token != XContentParser.Token.START_OBJECT) {
throw new ElasticsearchParseException("failed to parse jira project. expected an object; but found [{}] instead";
token);
}
String currentFieldName = null;
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
if (token == XContentParser.Token.FIELD_NAME) {





