Skip to content

Commit 89c65a3

Browse files
committed
Handle relative instance URIs
1 parent 36236b9 commit 89c65a3

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

solid/src/main/java/com/inrupt/client/solid/SolidProblemDetails.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,10 @@ static SolidProblemDetails fromErrorResponse(final URI uri, final int statusCode
154154
final URI type = Optional.ofNullable(pdData.type)
155155
.map(uri::resolve)
156156
.orElse(ProblemDetails.DEFAULT_TYPE);
157+
final URI instance = pdData.instance != null ? uri.resolve(pdData.instance) : null;
157158
// JSON mappers map invalid integers to 0, which is an invalid value in our case anyway.
158159
final int status = Optional.of(pdData.status).filter(s -> s != 0).orElse(statusCode);
159-
return new SolidProblemDetails(type, pdData.title, pdData.detail, status, pdData.instance);
160+
return new SolidProblemDetails(type, pdData.title, pdData.detail, status, instance);
160161
} catch (IOException e) {
161162
LOGGER.debug("Unable to parse ProblemDetails response from server", e);
162163
}

solid/src/test/java/com/inrupt/client/solid/SolidProblemDetailsTest.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import java.util.HashMap;
3232
import java.util.List;
3333
import java.util.Map;
34+
import java.util.UUID;
3435

3536
import org.junit.jupiter.api.Assertions;
3637
import org.junit.jupiter.api.Test;
@@ -67,6 +68,7 @@ void testEmptyProblemDetails() {
6768
@Test
6869
void testRelativeUriProblemDetails() {
6970
final int statusCode = 400;
71+
final UUID instance = UUID.randomUUID();
7072
final ProblemDetails pd = SolidProblemDetails.fromErrorResponse(
7173
POD,
7274
statusCode,
@@ -75,21 +77,21 @@ void testRelativeUriProblemDetails() {
7577
"\"title\":\"Some title\"," +
7678
"\"status\":400," +
7779
"\"detail\":\"Some details\"," +
78-
"\"instance\":\"https://example.org/instance\"," +
80+
"\"instance\":\"Instance" + instance + "\"," +
7981
"\"type\":\"SomeType\"" +
8082
"}").getBytes()
8183
);
8284
assertEquals(URI.create("https://storage.test/pod/SomeType"), pd.getType());
8385
assertEquals(statusCode, pd.getStatus());
8486
Assertions.assertEquals("Some title", pd.getTitle());
8587
assertEquals("Some details", pd.getDetail());
86-
assertEquals("https://example.org/instance", pd.getInstance().toString());
88+
assertEquals("https://storage.test/pod/Instance" + instance, pd.getInstance().toString());
8789
}
8890

89-
9091
@Test
9192
void testCompleteProblemDetails() {
9293
final int statusCode = 400;
94+
final UUID instance = UUID.randomUUID();
9395
final ProblemDetails pd = SolidProblemDetails.fromErrorResponse(
9496
POD,
9597
statusCode,
@@ -98,15 +100,15 @@ void testCompleteProblemDetails() {
98100
"\"title\":\"Some title\"," +
99101
"\"status\":400," +
100102
"\"detail\":\"Some details\"," +
101-
"\"instance\":\"https://example.org/instance\"," +
103+
"\"instance\":\"urn:uuid:" + instance + "\"," +
102104
"\"type\":\"https://example.org/type\"" +
103105
"}").getBytes()
104106
);
105107
assertEquals("https://example.org/type", pd.getType().toString());
106108
assertEquals(statusCode, pd.getStatus());
107109
Assertions.assertEquals("Some title", pd.getTitle());
108110
assertEquals("Some details", pd.getDetail());
109-
assertEquals("https://example.org/instance", pd.getInstance().toString());
111+
assertEquals("urn:uuid:" + instance, pd.getInstance().toString());
110112
}
111113

112114
@Test

0 commit comments

Comments
 (0)