diff --git a/src/main/java/org/gitlab4j/api/systemhooks/MergeRequestSystemHookEvent.java b/src/main/java/org/gitlab4j/api/systemhooks/MergeRequestSystemHookEvent.java index 002f0270e4c825a11e1ac64b0c0b1a1383ef51d1..4f03966ce6c5b364fe9a2124affc37a307692e9f 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 5ea1798189098b73723b536435a1a8c18c01b392..e96359405444200416d28258d9202a41b94aec35 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 4eaf17919c8b6d4d8f5c4ee90090158dc165a9d5..e3e7a368da327ff7b86703d30d032fd32bdd595d 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"); }