From 0c31bd4332db0f533ce6de15fd25f1bd2e5ae8ee Mon Sep 17 00:00:00 2001 From: Greg Messner Date: Wed, 17 Apr 2019 08:20:46 -0700 Subject: [PATCH] Fixed issue unmarhalling merge_request system hook events (#332). --- .../MergeRequestSystemHookEvent.java | 17 +++++++---------- .../api/systemhooks/SystemHookEvent.java | 3 ++- .../api/systemhooks/SystemHookManager.java | 15 +++++++++------ 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/gitlab4j/api/systemhooks/MergeRequestSystemHookEvent.java b/src/main/java/org/gitlab4j/api/systemhooks/MergeRequestSystemHookEvent.java index 002f0270..4f03966c 100644 --- a/src/main/java/org/gitlab4j/api/systemhooks/MergeRequestSystemHookEvent.java +++ b/src/main/java/org/gitlab4j/api/systemhooks/MergeRequestSystemHookEvent.java @@ -2,21 +2,18 @@ package org.gitlab4j.api.systemhooks; import org.gitlab4j.api.webhook.MergeRequestEvent; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonSubTypes; -import com.fasterxml.jackson.annotation.JsonTypeInfo; - -@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, property="object_kind") -@JsonSubTypes({ - @JsonSubTypes.Type(value = MergeRequestSystemHookEvent.class, name = MergeRequestSystemHookEvent.OBJECT_KIND), -}) public class MergeRequestSystemHookEvent extends MergeRequestEvent implements SystemHookEvent { public static final String X_GITLAB_EVENT = "System Hook"; + public static final String MERGE_REQUEST_EVENT = "merge_request"; + + @Override + public String getObjectKind() { + return (MERGE_REQUEST_EVENT); + } - @JsonIgnore @Override public String getEventName() { - return (OBJECT_KIND); + return (MERGE_REQUEST_EVENT); } } diff --git a/src/main/java/org/gitlab4j/api/systemhooks/SystemHookEvent.java b/src/main/java/org/gitlab4j/api/systemhooks/SystemHookEvent.java index 5ea17981..e9635940 100644 --- a/src/main/java/org/gitlab4j/api/systemhooks/SystemHookEvent.java +++ b/src/main/java/org/gitlab4j/api/systemhooks/SystemHookEvent.java @@ -26,7 +26,8 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; @JsonSubTypes.Type(value = RemoveGroupMemberSystemHookEvent.class, name = GroupMemberSystemHookEvent.GROUP_MEMBER_REMOVED_EVENT), @JsonSubTypes.Type(value = PushSystemHookEvent.class, name = PushSystemHookEvent.PUSH_EVENT), @JsonSubTypes.Type(value = TagPushSystemHookEvent.class, name = TagPushSystemHookEvent.TAG_PUSH_EVENT), - @JsonSubTypes.Type(value = RepositorySystemHookEvent.class, name = RepositorySystemHookEvent.REPOSITORY_UPDATE_EVENT) + @JsonSubTypes.Type(value = RepositorySystemHookEvent.class, name = RepositorySystemHookEvent.REPOSITORY_UPDATE_EVENT), + @JsonSubTypes.Type(value = MergeRequestSystemHookEvent.class, name = MergeRequestSystemHookEvent.MERGE_REQUEST_EVENT) }) public interface SystemHookEvent { diff --git a/src/main/java/org/gitlab4j/api/systemhooks/SystemHookManager.java b/src/main/java/org/gitlab4j/api/systemhooks/SystemHookManager.java index 4eaf1791..e3e7a368 100644 --- a/src/main/java/org/gitlab4j/api/systemhooks/SystemHookManager.java +++ b/src/main/java/org/gitlab4j/api/systemhooks/SystemHookManager.java @@ -16,6 +16,7 @@ import org.gitlab4j.api.utils.HttpRequestUtils; import org.gitlab4j.api.utils.JacksonJson; import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; /** * This class provides a handler for processing GitLab System Hook callouts. @@ -90,11 +91,14 @@ public class SystemHookManager extends HookManager { tree = jacksonJson.readTree(reader); } - if (tree.has("object_kind")) { + // NOTE: This is a hack based on the GitLab documentation showing that the "event_name" property + // is missing from the merge_request system hook event + if (!tree.has("event_name") && tree.has("object_kind")) { String objectKind = tree.asText("object_kind"); switch (objectKind) { - case MergeRequestSystemHookEvent.OBJECT_KIND: - event = jacksonJson.unmarshal(MergeRequestSystemHookEvent.class, tree); + case MergeRequestSystemHookEvent.MERGE_REQUEST_EVENT: + ObjectNode node = (ObjectNode)tree; + node.put("event_name", MergeRequestSystemHookEvent.MERGE_REQUEST_EVENT); break; default: @@ -102,11 +106,10 @@ public class SystemHookManager extends HookManager { LOGGER.warning(message); throw new GitLabApiException(message); } - - } else { - event = jacksonJson.unmarshal(SystemHookEvent.class, tree); } + event = jacksonJson.unmarshal(SystemHookEvent.class, tree); + if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine(event.getEventName() + "\n" + jacksonJson.marshal(event) + "\n"); } -- GitLab