Skip to content

Commit 1650414

Browse files
authored
ServiceException no longer throws NPE when null args are provided (#608)
ServiceException no longer throws NPE when null args are provided
1 parent 9e76f20 commit 1650414

File tree

3 files changed

+30
-8
lines changed

3 files changed

+30
-8
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
type: fix
2+
fix:
3+
description: ServiceException no longer throws NPE when null args are provided
4+
links:
5+
- https://github.com/palantir/conjure-java-runtime-api/pull/608

errors/src/main/java/com/palantir/conjure/java/api/errors/ServiceException.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,27 +95,37 @@ public List<Arg<?>> getParameters() {
9595
}
9696

9797
private static <T> List<T> copyToUnmodifiableList(T[] elements) {
98+
if (elements == null || elements.length == 0) {
99+
return Collections.emptyList();
100+
}
98101
List<T> list = new ArrayList<>(elements.length);
99-
Collections.addAll(list, elements);
102+
for (T item : elements) {
103+
if (item != null) {
104+
list.add(item);
105+
}
106+
}
100107
return Collections.unmodifiableList(list);
101108
}
102109

103110
private static String renderUnsafeMessage(ErrorType errorType, Arg<?>... args) {
104111
String message = renderNoArgsMessage(errorType);
105112

106-
if (args.length == 0) {
113+
if (args == null || args.length == 0) {
107114
return message;
108115
}
109116

110117
StringBuilder builder = new StringBuilder();
118+
boolean first = true;
111119
builder.append(message).append(": {");
112-
for (int i = 0; i < args.length; i++) {
113-
Arg<?> arg = args[i];
114-
if (i > 0) {
115-
builder.append(", ");
120+
for (Arg<?> arg : args) {
121+
if (arg != null) {
122+
if (first) {
123+
first = false;
124+
} else {
125+
builder.append(", ");
126+
}
127+
builder.append(arg.getName()).append("=").append(arg.getValue());
116128
}
117-
118-
builder.append(arg.getName()).append("=").append(arg.getValue());
119129
}
120130
builder.append("}");
121131

errors/src/test/java/com/palantir/conjure/java/api/errors/ServiceExceptionTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,13 @@ public void testExceptionMessageWithUnsafeArgs() {
5252
assertThat(ex.getMessage()).isEqualTo(EXPECTED_ERROR_MSG + ": {arg1=1, arg2=2}");
5353
}
5454

55+
@Test
56+
public void testExceptionMessageWithNullArg() {
57+
ServiceException ex = new ServiceException(ERROR, UnsafeArg.of("arg1", 1), null, SafeArg.of("arg2", 2));
58+
assertThat(ex.getMessage()).isEqualTo(EXPECTED_ERROR_MSG + ": {arg1=1, arg2=2}");
59+
assertThat(ex.getArgs()).doesNotContainNull().hasSize(2);
60+
}
61+
5562
@Test
5663
public void testExceptionMessageWithNoArgs() {
5764
ServiceException ex = new ServiceException(ERROR);

0 commit comments

Comments
 (0)