apache/rocketmq · error · AuthorizationException
subscription group config is null.
Error message
subscription group config is null.
What it means
Thrown while iterating groupConfigList of an UPDATE_AND_CREATE_SUBSCRIPTIONGROUP_LIST request when an individual SubscriptionGroupConfig element is null. The builder immediately dereferences groupConfig.getGroupName(), so any null slot aborts context building with AuthorizationException before the CREATE permissions are evaluated.
Source
Thrown at auth/src/main/java/org/apache/rocketmq/auth/authorization/builder/DefaultAuthorizationContextBuilder.java:516
SubscriptionGroupConfig subscriptionGroupConfig =
RemotingSerializable.decode(command.getBody(), SubscriptionGroupConfig.class);
if (subscriptionGroupConfig == null
|| StringUtils.isBlank(subscriptionGroupConfig.getGroupName())) {
throw new AuthorizationException("subscription group is null.");
}
result.add(DefaultAuthorizationContext.of(subject,
Resource.ofGroup(subscriptionGroupConfig.getGroupName()), Action.CREATE, sourceIp));
break;
case RequestCode.UPDATE_AND_CREATE_SUBSCRIPTIONGROUP_LIST:
SubscriptionGroupList subscriptionGroupList = decodeRequiredBody(
command, SubscriptionGroupList.class, "subscription group list");
if (CollectionUtils.isEmpty(subscriptionGroupList.getGroupConfigList())) {
throw new AuthorizationException("subscription group list is empty.");
}
Set<String> subscriptionGroupResources = new LinkedHashSet<>();
for (SubscriptionGroupConfig groupConfig : subscriptionGroupList.getGroupConfigList()) {
if (groupConfig == null) {
throw new AuthorizationException("subscription group config is null.");
}
addUniqueContext(result, subscriptionGroupResources, subject,
Resource.ofGroup(requireResource(groupConfig.getGroupName(), "consumer group")),
Action.CREATE, sourceIp);
}
break;
case RequestCode.UPDATE_AND_CREATE_STATIC_TOPIC:
CreateTopicRequestHeader createTopicRequestHeader =
command.decodeCommandCustomHeader(CreateTopicRequestHeader.class);
if (createTopicRequestHeader == null) {
throw new AuthorizationException("topic header is null.");
}
String staticTopic = requireResource(createTopicRequestHeader.getTopic(), "topic");
TopicQueueMappingDetail mappingDetail = decodeRequiredBody(
command, TopicQueueMappingDetail.class, "topic queue mapping");
if (!StringUtils.equals(
staticTopic, requireResource(mappingDetail.getTopic(), "mapping topic"))) {
throw new AuthorizationException("mapping topic does not match topic header.");View on GitHub (pinned to 293f588571)
Solutions
- Filter null elements from the list before building the request body.
- Make the conversion step fail loudly on invalid entries instead of emitting null.
- Add a unit assertion that every element of the outgoing list is non-null.
Example fix
// before
List<SubscriptionGroupConfig> list = parseAll(input);
body.setGroupConfigList(list);
// after
List<SubscriptionGroupConfig> list = parseAll(input).stream()
.filter(Objects::nonNull).collect(toList());
if (list.isEmpty()) { return; }
body.setGroupConfigList(list); Defensive patterns
Strategy: validation
Validate before calling
List<SubscriptionGroupConfig> clean = groupConfigList == null ? List.of()
: groupConfigList.stream().filter(Objects::nonNull).collect(toList());
if (clean.isEmpty()) { return; } Try / catch
try { admin.updateSubscriptionGroupList(body); }
catch (AuthorizationException e) {
if ("subscription group config is null.".equals(e.getMessage())) { filterNullsAndRetry(); return; }
throw e;
} Prevention
- Never allow null placeholders in request lists
- Validate list elements, not just the list itself
When it happens
Trigger: A body like {"groupConfigList":[null,...]} — null elements from a mapping step, placeholder-filled lists, or JSON produced by a non-Jackson encoder that emits nulls for absent entries.
Common situations: Pipelines converting YAML/CSV group definitions to SubscriptionGroupConfig where failed conversions become null; hand-built JSON arrays with literal null tokens.
Related errors
- subscription group is null.
- topic config is null.
- subscription group list is empty.
- topic list is empty.
- is null.
AI-assisted analysis of apache/rocketmq@293f588571 (2026-08-14).
Data as JSON: /api/errors/aa6e623cd1d082ea.
Report an issue: GitHub.