Skip to content

Commit 03d7966

Browse files
fix: fixing null pointer exception error (#1709)
Signed-off-by: Ayushman Gaur <ayushmangaur2017@gmail.com>
1 parent c51861e commit 03d7966

2 files changed

Lines changed: 28 additions & 3 deletions

File tree

tools/flagd-core/src/main/java/dev/openfeature/contrib/tools/flagd/core/FlagdCore.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -270,11 +270,14 @@ private <T> ProviderEvaluation<T> resolve(Class<T> type, String key, T defaultVa
270270

271271
private static ImmutableMetadata getFlagMetadata(Map<String, Object> currentFlagSetMetadata, FeatureFlag flag) {
272272
ImmutableMetadata.ImmutableMetadataBuilder metadataBuilder = ImmutableMetadata.builder();
273-
for (Map.Entry<String, Object> entry : currentFlagSetMetadata.entrySet()) {
274-
addEntryToMetadataBuilder(metadataBuilder, entry.getKey(), entry.getValue());
273+
274+
if (currentFlagSetMetadata != null) {
275+
for (Map.Entry<String, Object> entry : currentFlagSetMetadata.entrySet()) {
276+
addEntryToMetadataBuilder(metadataBuilder, entry.getKey(), entry.getValue());
277+
}
275278
}
276279

277-
if (flag != null) {
280+
if (flag != null && flag.getMetadata() != null) {
278281
for (Map.Entry<String, Object> entry : flag.getMetadata().entrySet()) {
279282
addEntryToMetadataBuilder(metadataBuilder, entry.getKey(), entry.getValue());
280283
}

tools/flagd-core/src/test/java/dev/openfeature/contrib/tools/flagd/core/FlagdCoreTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.openfeature.contrib.tools.flagd.core;
22

33
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.assertj.core.api.Assertions.assertThatNoException;
45

56
import dev.openfeature.contrib.tools.flagd.api.FlagStoreException;
67
import dev.openfeature.sdk.ImmutableContext;
@@ -127,4 +128,25 @@ void setFlagsAndGetChangedKeys_detectsRemovedFlags() throws FlagStoreException {
127128
// Then: boolFlag should be in the changed keys (it was removed)
128129
assertThat(changedKeys).contains("boolFlag");
129130
}
131+
132+
@Test
133+
void resolveBooleanValue_flagWithNullMetadata_doesNotThrowNPE() {
134+
String configWithNullMetadata = "{"
135+
+ "\"$schema\": \"https://flagd.dev/schema/v0/flags.json\","
136+
+ "\"flags\": {"
137+
+ " \"nullMetadataFlag\": {"
138+
+ " \"state\": \"ENABLED\","
139+
+ " \"defaultVariant\": \"on\","
140+
+ " \"variants\": { \"on\": true }"
141+
+ " }"
142+
+ "}"
143+
+ "}";
144+
145+
assertThatNoException().isThrownBy(() -> {
146+
flagdCore.setFlags(configWithNullMetadata);
147+
ProviderEvaluation<Boolean> result =
148+
flagdCore.resolveBooleanValue("nullMetadataFlag", false, new ImmutableContext());
149+
assertThat(result.getFlagMetadata()).isNotNull();
150+
});
151+
}
130152
}

0 commit comments

Comments
 (0)