• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

zalando / problem / #2685

24 Feb 2023 06:50AM CUT coverage: 100.0%. Remained the same
#2685

push

web-flow
Merge pull request #406 from zalando/AlexanderYastrebov-patch-1

CODEOWNERS: remove @AlexanderYastrebov

375 of 375 relevant lines covered (100.0%)

1.0 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

100.0
/problem-gson/src/main/java/org/zalando/problem/gson/CustomProblemAdapter.java
1
package org.zalando.problem.gson;
2

3
import com.google.gson.Gson;
4
import com.google.gson.JsonElement;
5
import com.google.gson.JsonObject;
6
import com.google.gson.TypeAdapter;
7
import com.google.gson.internal.Streams;
8
import com.google.gson.stream.JsonReader;
9
import com.google.gson.stream.JsonWriter;
10
import lombok.AllArgsConstructor;
11
import org.zalando.problem.AbstractThrowableProblem;
12

13
import java.io.IOException;
14
import java.net.URI;
15
import java.util.Optional;
16

17
import static java.util.Arrays.stream;
18

19
@AllArgsConstructor
1✔
20
final class CustomProblemAdapter<T> extends TypeAdapter<T> {
21

22
    private final Gson gson;
23
    private final TypeAdapter<T> delegate;
24
    private final boolean stackTraces;
25

26
    @Override
27
    public void write(final JsonWriter out, final T value) throws IOException {
28
        final JsonElement element = delegate.toJsonTree(value);
1✔
29
        final JsonObject object = element.getAsJsonObject();
1✔
30

31
        final URI problemType = URITypeAdapter.TYPE.fromJsonTree(object.remove("type"));
1✔
32
        object.add("type", URITypeAdapter.TYPE.toJsonTree(problemType));
1✔
33

34
        if (value instanceof AbstractThrowableProblem) {
1✔
35
            flattenParameters(object);
1✔
36
        }
37

38
        if (value instanceof Throwable) {
1✔
39
            // Get rid of unwanted fields.
40
            object.remove("detailMessage");
1✔
41
            object.remove("suppressedExceptions");
1✔
42
            object.remove("stackTrace");
1✔
43

44
            if (stackTraces) {
1✔
45
                object.add("stacktrace", gson.getAdapter(String[].class)
1✔
46
                        .toJsonTree(stream(((Throwable) value).getStackTrace())
1✔
47
                                .map(Object::toString)
1✔
48
                                .toArray(String[]::new)));
1✔
49
            }
50
        }
51

52
        Streams.write(element, out);
1✔
53
    }
1✔
54

55
    private void flattenParameters(final JsonObject object) {
56
        Optional.ofNullable(object.remove("parameters"))
1✔
57
                .map(JsonElement::getAsJsonObject)
1✔
58
                .ifPresent(params -> params.entrySet().forEach(e ->
1✔
59
                        object.add(e.getKey(), e.getValue())));
1✔
60
    }
1✔
61

62
    @Override
63
    public T read(final JsonReader in) throws IOException {
64
        return delegate.read(in);
1✔
65
    }
66

67
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc