Skip to content

Commit 8b07ca8

Browse files
authored
Merge pull request #326 from IBM/johntimm-master
Issue #193 - client swallows IO exceptions
2 parents a528337 + 184f151 commit 8b07ca8

7 files changed

Lines changed: 40 additions & 17 deletions

File tree

fhir-client/src/main/java/com/ibm/fhir/client/impl/FHIRClientImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -728,8 +728,8 @@ private Builder addRequestHeaders(Builder builder, FHIRRequestHeader[] headers)
728728
protected synchronized Client getClient() throws Exception {
729729
if (client == null) {
730730
ClientBuilder cb = ClientBuilder.newBuilder()
731-
.register(new FHIRProvider())
732-
.register(new FHIRJsonProvider())
731+
.register(new FHIRProvider(RuntimeType.CLIENT))
732+
.register(new FHIRJsonProvider(RuntimeType.CLIENT))
733733
.register(new FHIRJsonPatchProvider(RuntimeType.CLIENT));
734734

735735
// Add support for basic auth if enabled.
@@ -788,7 +788,7 @@ public WebTarget getWebTarget() throws Exception {
788788
@Override
789789
public WebTarget getWebTarget(String baseURL) throws Exception {
790790
ClientBuilder cb =
791-
ClientBuilder.newBuilder().register(new FHIRProvider()).register(new FHIRJsonProvider()).keyStore(getKeyStore(), getKeyStoreKeyPassword());
791+
ClientBuilder.newBuilder().register(new FHIRProvider(RuntimeType.CLIENT)).register(new FHIRJsonProvider(RuntimeType.CLIENT)).keyStore(getKeyStore(), getKeyStoreKeyPassword());
792792

793793
KeyStore ts = getTrustStore();
794794

@@ -802,7 +802,7 @@ public WebTarget getWebTarget(String baseURL) throws Exception {
802802
@Override
803803
public WebTarget getWebTargetUsingBasicAuth(String baseURL, String username, String pwd) throws Exception {
804804
Client client =
805-
ClientBuilder.newBuilder().register(new FHIRProvider()).register(new FHIRJsonProvider()).register(new FHIRBasicAuthenticator(username, pwd)).keyStore(getKeyStore(), getKeyStoreKeyPassword()).trustStore(getTrustStore()).build();
805+
ClientBuilder.newBuilder().register(new FHIRProvider(RuntimeType.CLIENT)).register(new FHIRJsonProvider(RuntimeType.CLIENT)).register(new FHIRBasicAuthenticator(username, pwd)).keyStore(getKeyStore(), getKeyStoreKeyPassword()).trustStore(getTrustStore()).build();
806806
return client.target(baseURL);
807807
}
808808

fhir-client/src/test/java/com/ibm/fhir/client/test/mains/JaxrsClientTestMain.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import static com.ibm.fhir.model.type.String.string;
1010

11+
import javax.ws.rs.RuntimeType;
1112
import javax.ws.rs.client.Client;
1213
import javax.ws.rs.client.ClientBuilder;
1314
import javax.ws.rs.client.Entity;
@@ -47,7 +48,7 @@ public static void main(String[] args) throws Exception {
4748
FHIRGenerator.generator( Format.XML, false).generate(patient, System.out);
4849

4950
Client client = ClientBuilder.newBuilder()
50-
.register(new FHIRProvider())
51+
.register(new FHIRProvider(RuntimeType.CLIENT))
5152
.build();
5253

5354
WebTarget target = client.target("http://localhost:9080/fhir-server/api/v4");

fhir-client/src/test/java/com/ibm/fhir/client/test/mains/ReadClaimTestMain.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
package com.ibm.fhir.client.test.mains;
88

9+
import javax.ws.rs.RuntimeType;
910
import javax.ws.rs.client.Client;
1011
import javax.ws.rs.client.ClientBuilder;
1112
import javax.ws.rs.client.WebTarget;
@@ -20,7 +21,7 @@
2021
public class ReadClaimTestMain {
2122
public static void main(String[] args) throws Exception {
2223
Client client = ClientBuilder.newBuilder()
23-
.register(new FHIRProvider())
24+
.register(new FHIRProvider(RuntimeType.CLIENT))
2425
.build();
2526
WebTarget target = client.target("http://fhirtest.uhn.ca/baseDstu2");
2627
Response response = target.path("Claim/14105").request(FHIRMediaType.APPLICATION_FHIR_JSON).get();

fhir-client/src/test/java/com/ibm/fhir/client/test/mains/UpdateTestMain.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.util.ArrayList;
1212
import java.util.List;
1313

14+
import javax.ws.rs.RuntimeType;
1415
import javax.ws.rs.client.Client;
1516
import javax.ws.rs.client.ClientBuilder;
1617
import javax.ws.rs.client.Entity;
@@ -29,7 +30,7 @@
2930
public class UpdateTestMain {
3031
public static void main(String[] args) throws Exception {
3132
Client client = ClientBuilder.newBuilder()
32-
.register(new FHIRProvider())
33+
.register(new FHIRProvider(RuntimeType.CLIENT))
3334
.build();
3435

3536
WebTarget target = client.target("http://localhost:9080/fhir-server/api/v4");

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.lang.annotation.Annotation;
2020
import java.lang.reflect.Type;
2121
import java.util.Collections;
22+
import java.util.Objects;
2223
import java.util.logging.Level;
2324
import java.util.logging.Logger;
2425

@@ -31,6 +32,7 @@
3132
import javax.json.JsonWriterFactory;
3233
import javax.ws.rs.Consumes;
3334
import javax.ws.rs.Produces;
35+
import javax.ws.rs.RuntimeType;
3436
import javax.ws.rs.WebApplicationException;
3537
import javax.ws.rs.core.HttpHeaders;
3638
import javax.ws.rs.core.MediaType;
@@ -50,6 +52,12 @@ public class FHIRJsonProvider implements MessageBodyReader<JsonObject>, MessageB
5052

5153
private static final JsonReaderFactory JSON_READER_FACTORY = Json.createReaderFactory(null);
5254
private static final JsonWriterFactory JSON_WRITER_FACTORY = Json.createWriterFactory(null);
55+
56+
private final RuntimeType runtimeType;
57+
58+
public FHIRJsonProvider(RuntimeType runtimeType) {
59+
this.runtimeType = Objects.requireNonNull(runtimeType);
60+
}
5361

5462
@Override
5563
public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
@@ -87,10 +95,12 @@ public void writeTo(JsonObject t, Class<?> type, Type genericType, Annotation[]
8795
writer.writeObject(t);
8896
} catch (JsonException e) {
8997
log.log(Level.WARNING, "an error occurred during resource serialization", e);
90-
Response response = buildResponse(
91-
buildOperationOutcome(Collections.singletonList(
92-
buildOperationOutcomeIssue(IssueSeverity.FATAL, IssueType.EXCEPTION, "FHIRProvider: " + e.getMessage(), null))), mediaType);
93-
throw new WebApplicationException(response);
98+
if (RuntimeType.SERVER.equals(runtimeType)) {
99+
Response response = buildResponse(
100+
buildOperationOutcome(Collections.singletonList(
101+
buildOperationOutcomeIssue(IssueSeverity.FATAL, IssueType.EXCEPTION, "FHIRProvider: " + e.getMessage(), null))), mediaType);
102+
throw new WebApplicationException(response);
103+
}
94104
} finally {
95105
log.exiting(this.getClass().getName(), "writeTo");
96106
}

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@
1717
import java.lang.annotation.Annotation;
1818
import java.lang.reflect.Type;
1919
import java.util.Collections;
20+
import java.util.Objects;
2021
import java.util.logging.Level;
2122
import java.util.logging.Logger;
2223

2324
import javax.ws.rs.Consumes;
2425
import javax.ws.rs.Produces;
26+
import javax.ws.rs.RuntimeType;
2527
import javax.ws.rs.WebApplicationException;
2628
import javax.ws.rs.core.Context;
2729
import javax.ws.rs.core.HttpHeaders;
@@ -54,6 +56,12 @@ public class FHIRProvider implements MessageBodyReader<Resource>, MessageBodyWri
5456
@Context
5557
private HttpHeaders requestHeaders;
5658

59+
private final RuntimeType runtimeType;
60+
61+
public FHIRProvider(RuntimeType runtimeType) {
62+
this.runtimeType = Objects.requireNonNull(runtimeType);
63+
}
64+
5765
@Override
5866
public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
5967
return Resource.class.isAssignableFrom(type);
@@ -90,10 +98,12 @@ public void writeTo(Resource t, Class<?> type, Type genericType, Annotation[] an
9098
FHIRGenerator.generator(getFormat(mediaType), isPretty(requestHeaders)).generate(t, entityStream);
9199
} catch (FHIRGeneratorException e) {
92100
log.log(Level.WARNING, "an error occurred during resource serialization", e);
93-
Response response = buildResponse(
94-
buildOperationOutcome(Collections.singletonList(
95-
buildOperationOutcomeIssue(IssueSeverity.FATAL, IssueType.EXCEPTION, "FHIRProvider: " + e.getMessage(), e.getPath()))), mediaType);
96-
throw new WebApplicationException(response);
101+
if (RuntimeType.SERVER.equals(runtimeType)) {
102+
Response response = buildResponse(
103+
buildOperationOutcome(Collections.singletonList(
104+
buildOperationOutcomeIssue(IssueSeverity.FATAL, IssueType.EXCEPTION, "FHIRProvider: " + e.getMessage(), e.getPath()))), mediaType);
105+
throw new WebApplicationException(response);
106+
}
97107
} finally {
98108
log.exiting(this.getClass().getName(), "writeTo");
99109
}

fhir-server/src/main/java/com/ibm/fhir/server/FHIRApplication.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ public Set<Object> getSingletons() {
5353
try {
5454
if (singletons == null) {
5555
singletons = new HashSet<Object>();
56-
singletons.add(new FHIRProvider());
57-
singletons.add(new FHIRJsonProvider());
56+
singletons.add(new FHIRProvider(RuntimeType.SERVER));
57+
singletons.add(new FHIRJsonProvider(RuntimeType.SERVER));
5858
singletons.add(new FHIRJsonPatchProvider(RuntimeType.SERVER));
5959
}
6060
return singletons;

0 commit comments

Comments
 (0)