Skip to content

Commit 358f91e

Browse files
committed
issue #193 - mirror "isServer" logic on the writeTo methods
Also updated FHIRJsonProvider and FHIRJsonPatchProvider to be consistent across all 3 providers. Signed-off-by: Lee Surprenant <lmsurpre@us.ibm.com>
1 parent adc31e3 commit 358f91e

5 files changed

Lines changed: 41 additions & 31 deletions

File tree

fhir-model/src/main/java/com/ibm/fhir/model/util/FHIRUtil.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
import com.ibm.fhir.model.parser.FHIRJsonParser;
5252
import com.ibm.fhir.model.parser.FHIRParser;
5353
import com.ibm.fhir.model.parser.exception.FHIRParserException;
54-
import com.ibm.fhir.model.resource.Basic;
5554
import com.ibm.fhir.model.resource.Bundle;
5655
import com.ibm.fhir.model.resource.DomainResource;
5756
import com.ibm.fhir.model.resource.OperationOutcome;

fhir-provider/src/main/java/com/ibm/fhir/provider/FHIRJsonPatchProvider.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import java.lang.reflect.Type;
2121
import java.util.Collections;
2222
import java.util.Objects;
23-
import java.util.logging.Level;
2423
import java.util.logging.Logger;
2524

2625
import javax.json.Json;
@@ -71,12 +70,15 @@ public JsonArray readFrom(Class<JsonArray> type, Type genericType, Annotation[]
7170
try (JsonReader reader = JSON_READER_FACTORY.createReader(nonClosingInputStream(entityStream))) {
7271
return reader.readArray();
7372
} catch (JsonException e) {
74-
log.log(Level.WARNING, "an error occurred during resource deserialization", e);
75-
String acceptHeader = httpHeaders.getFirst(HttpHeaders.ACCEPT);
76-
Response response = buildResponse(
77-
buildOperationOutcome(Collections.singletonList(
78-
buildOperationOutcomeIssue(IssueSeverity.FATAL, IssueType.EXCEPTION, "FHIRProvider: " + e.getMessage(), null))), getMediaType(acceptHeader));
79-
throw new WebApplicationException(response);
73+
if (RuntimeType.SERVER.equals(runtimeType)) {
74+
String acceptHeader = httpHeaders.getFirst(HttpHeaders.ACCEPT);
75+
Response response = buildResponse(
76+
buildOperationOutcome(Collections.singletonList(
77+
buildOperationOutcomeIssue(IssueSeverity.FATAL, IssueType.INVALID, "FHIRProvider: " + e.getMessage(), null))), getMediaType(acceptHeader));
78+
throw new WebApplicationException(response);
79+
} else {
80+
throw new IOException("an error occurred during JSON Patch deserialization", e);
81+
}
8082
} finally {
8183
log.exiting(this.getClass().getName(), "readFrom");
8284
}
@@ -94,12 +96,15 @@ public void writeTo(JsonArray t, Class<?> type, Type genericType, Annotation[] a
9496
try (JsonWriter writer = JSON_WRITER_FACTORY.createWriter(nonClosingOutputStream(entityStream))) {
9597
writer.writeArray(t);
9698
} catch (JsonException e) {
97-
log.log(Level.WARNING, "an error occurred during resource serialization", e);
98-
String acceptHeader = (String) httpHeaders.getFirst(HttpHeaders.ACCEPT);
99-
Response response = buildResponse(
100-
buildOperationOutcome(Collections.singletonList(
101-
buildOperationOutcomeIssue(IssueSeverity.FATAL, IssueType.EXCEPTION, "FHIRProvider: " + e.getMessage(), null))), getMediaType(acceptHeader));
102-
throw new WebApplicationException(response);
99+
if (RuntimeType.SERVER.equals(runtimeType)) {
100+
String acceptHeader = (String) httpHeaders.getFirst(HttpHeaders.ACCEPT);
101+
Response response = buildResponse(
102+
buildOperationOutcome(Collections.singletonList(
103+
buildOperationOutcomeIssue(IssueSeverity.FATAL, IssueType.EXCEPTION, "FHIRProvider: " + e.getMessage(), null))), getMediaType(acceptHeader));
104+
throw new WebApplicationException(response);
105+
} else {
106+
throw new IOException("an error occurred during JSON Patch serialization", e);
107+
}
103108
} finally {
104109
log.exiting(this.getClass().getName(), "writeTo");
105110
}

fhir-provider/src/main/java/com/ibm/fhir/provider/FHIRJsonProvider.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import java.lang.reflect.Type;
2121
import java.util.Collections;
2222
import java.util.Objects;
23-
import java.util.logging.Level;
2423
import java.util.logging.Logger;
2524

2625
import javax.json.Json;
@@ -71,12 +70,15 @@ public JsonObject readFrom(Class<JsonObject> type, Type genericType, Annotation[
7170
try (JsonReader reader = JSON_READER_FACTORY.createReader(nonClosingInputStream(entityStream))) {
7271
return reader.readObject();
7372
} catch (JsonException e) {
74-
log.log(Level.WARNING, "an error occurred during resource deserialization", e);
75-
String acceptHeader = httpHeaders.getFirst(HttpHeaders.ACCEPT);
76-
Response response = buildResponse(
77-
buildOperationOutcome(Collections.singletonList(
78-
buildOperationOutcomeIssue(IssueSeverity.FATAL, IssueType.EXCEPTION, "FHIRProvider: " + e.getMessage(), null))), getMediaType(acceptHeader));
79-
throw new WebApplicationException(response);
73+
if (RuntimeType.SERVER.equals(runtimeType)) {
74+
String acceptHeader = httpHeaders.getFirst(HttpHeaders.ACCEPT);
75+
Response response = buildResponse(
76+
buildOperationOutcome(Collections.singletonList(
77+
buildOperationOutcomeIssue(IssueSeverity.FATAL, IssueType.INVALID, "FHIRProvider: " + e.getMessage(), null))), getMediaType(acceptHeader));
78+
throw new WebApplicationException(response);
79+
} else {
80+
throw new IOException("an error occurred during resource deserialization", e);
81+
}
8082
} finally {
8183
log.exiting(this.getClass().getName(), "readFrom");
8284
}
@@ -94,12 +96,13 @@ public void writeTo(JsonObject t, Class<?> type, Type genericType, Annotation[]
9496
try (JsonWriter writer = JSON_WRITER_FACTORY.createWriter(nonClosingOutputStream(entityStream))) {
9597
writer.writeObject(t);
9698
} catch (JsonException e) {
97-
log.log(Level.WARNING, "an error occurred during resource serialization", e);
9899
if (RuntimeType.SERVER.equals(runtimeType)) {
99100
Response response = buildResponse(
100101
buildOperationOutcome(Collections.singletonList(
101102
buildOperationOutcomeIssue(IssueSeverity.FATAL, IssueType.EXCEPTION, "FHIRProvider: " + e.getMessage(), null))), mediaType);
102103
throw new WebApplicationException(response);
104+
} else {
105+
throw new IOException("an error occurred during resource serialization", e);
103106
}
104107
} finally {
105108
log.exiting(this.getClass().getName(), "writeTo");

fhir-provider/src/main/java/com/ibm/fhir/provider/FHIRProvider.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import java.lang.reflect.Type;
1919
import java.util.Collections;
2020
import java.util.Objects;
21-
import java.util.logging.Level;
2221
import java.util.logging.Logger;
2322

2423
import javax.ws.rs.Consumes;
@@ -74,12 +73,15 @@ public Resource readFrom(Class<Resource> type, Type genericType, Annotation[] an
7473
try {
7574
return FHIRParser.parser(getFormat(mediaType)).parse(entityStream);
7675
} catch (FHIRParserException e) {
77-
log.log(Level.WARNING, "an error occurred during resource deserialization", e);
78-
String acceptHeader = httpHeaders.getFirst(HttpHeaders.ACCEPT);
79-
Response response = buildResponse(
80-
buildOperationOutcome(Collections.singletonList(
81-
buildOperationOutcomeIssue(IssueSeverity.ERROR, IssueType.INVALID, "FHIRProvider: " + e.getMessage(), e.getPath()))), getMediaType(acceptHeader));
82-
throw new WebApplicationException(response);
76+
if (RuntimeType.SERVER.equals(runtimeType)) {
77+
String acceptHeader = httpHeaders.getFirst(HttpHeaders.ACCEPT);
78+
Response response = buildResponse(
79+
buildOperationOutcome(Collections.singletonList(
80+
buildOperationOutcomeIssue(IssueSeverity.FATAL, IssueType.INVALID, "FHIRProvider: " + e.getMessage(), e.getPath()))), getMediaType(acceptHeader));
81+
throw new WebApplicationException(response);
82+
} else {
83+
throw new IOException("an error occurred during resource deserialization", e);
84+
}
8385
} finally {
8486
log.exiting(this.getClass().getName(), "readFrom");
8587
}
@@ -97,12 +99,13 @@ public void writeTo(Resource t, Class<?> type, Type genericType, Annotation[] an
9799
try {
98100
FHIRGenerator.generator(getFormat(mediaType), isPretty(requestHeaders)).generate(t, entityStream);
99101
} catch (FHIRGeneratorException e) {
100-
log.log(Level.WARNING, "an error occurred during resource serialization", e);
101102
if (RuntimeType.SERVER.equals(runtimeType)) {
102103
Response response = buildResponse(
103104
buildOperationOutcome(Collections.singletonList(
104105
buildOperationOutcomeIssue(IssueSeverity.FATAL, IssueType.EXCEPTION, "FHIRProvider: " + e.getMessage(), e.getPath()))), mediaType);
105106
throw new WebApplicationException(response);
107+
} else {
108+
throw new IOException("an error occurred during resource serialization", e);
106109
}
107110
} finally {
108111
log.exiting(this.getClass().getName(), "writeTo");

fhir-server-test/src/test/java/com/ibm/fhir/server/test/FHIRServerTestBase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ protected void assertValidationOperationOutcome(OperationOutcome oo, String msgP
499499

500500
assertNotNull(ooi.getSeverity());
501501
assertNotNull(ooi.getSeverity().getValue());
502-
assertEquals(IssueSeverity.ERROR.getValue(), ooi.getSeverity().getValue());
502+
assertTrue(IssueSeverity.ERROR.equals(ooi.getSeverity()) || IssueSeverity.FATAL.equals(ooi.getSeverity()));
503503

504504
assertNotNull(ooi.getDetails());
505505
String msg = ooi.getDetails().getText().getValue();

0 commit comments

Comments
 (0)