Include Location header details in non-verbose response for client
interceptor
This commit is contained in:
parent
7eb86d3eaa
commit
989246f0da
|
@ -26,6 +26,7 @@ import java.util.Iterator;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import ca.uhn.fhir.rest.api.Constants;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang3.Validate;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -99,7 +100,16 @@ public class LoggingInterceptor implements IClientInterceptor {
|
|||
public void interceptResponse(IHttpResponse theResponse) throws IOException {
|
||||
if (myLogResponseSummary) {
|
||||
String message = "HTTP " + theResponse.getStatus() + " " + theResponse.getStatusInfo();
|
||||
myLog.info("Client response: {}", message);
|
||||
String respLocation = "";
|
||||
|
||||
/*
|
||||
* Add response location
|
||||
*/
|
||||
List<String> locationHeaders = theResponse.getHeaders(Constants.HEADER_LOCATION);
|
||||
if (locationHeaders != null && locationHeaders.size() > 0) {
|
||||
respLocation = " (Location: " + locationHeaders.get(0) + ")";
|
||||
}
|
||||
myLog.info("Client response: {}{}", message, respLocation);
|
||||
}
|
||||
|
||||
if (myLogResponseHeaders) {
|
||||
|
|
|
@ -36,6 +36,7 @@ import org.apache.lucene.analysis.phonetic.PhoneticFilterFactory;
|
|||
import org.apache.lucene.analysis.snowball.SnowballPorterFilterFactory;
|
||||
import org.apache.lucene.analysis.standard.StandardFilterFactory;
|
||||
import org.apache.lucene.analysis.standard.StandardTokenizerFactory;
|
||||
import org.hibernate.annotations.ColumnDefault;
|
||||
import org.hibernate.search.annotations.*;
|
||||
import org.hibernate.search.annotations.Parameter;
|
||||
|
||||
|
@ -204,8 +205,9 @@ public class ResourceTable extends BaseHasResource implements Serializable {
|
|||
private String myProfile;
|
||||
@OneToMany(mappedBy = "myResource", cascade = {}, fetch = FetchType.LAZY, orphanRemoval = false)
|
||||
private Collection<ResourceIndexedCompositeStringUnique> myParamsCompositeStringUnique;
|
||||
// Added in 3.0.0 - Should make this a primitive Boolean at some point
|
||||
@Column(name = "SP_CMPSTR_UNIQ_PRESENT")
|
||||
private boolean myParamsCompositeStringUniquePresent;
|
||||
private Boolean myParamsCompositeStringUniquePresent = false;
|
||||
@OneToMany(mappedBy = "mySourceResource", cascade = {}, fetch = FetchType.LAZY, orphanRemoval = false)
|
||||
@IndexedEmbedded()
|
||||
private Collection<ResourceLink> myResourceLinks;
|
||||
|
@ -456,6 +458,9 @@ public class ResourceTable extends BaseHasResource implements Serializable {
|
|||
}
|
||||
|
||||
public boolean isParamsCompositeStringUniquePresent() {
|
||||
if (myParamsCompositeStringUniquePresent == null) {
|
||||
return false;
|
||||
}
|
||||
return myParamsCompositeStringUniquePresent;
|
||||
}
|
||||
|
||||
|
|
|
@ -66,7 +66,32 @@ public class LoggingInterceptorTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testLogger() throws Exception {
|
||||
public void testLoggerNonVerbose() throws Exception {
|
||||
System.out.println("Starting testLogger");
|
||||
IGenericClient client = ourCtx.newRestfulGenericClient("http://localhost:" + ourPort);
|
||||
ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER);
|
||||
|
||||
LoggingInterceptor interceptor = new LoggingInterceptor(false);
|
||||
client.registerInterceptor(interceptor);
|
||||
Patient patient = client.read(Patient.class, "1");
|
||||
assertFalse(patient.getIdentifierFirstRep().isEmpty());
|
||||
|
||||
verify(myMockAppender, times(2)).doAppend(argThat(new ArgumentMatcher<ILoggingEvent>() {
|
||||
@Override
|
||||
public boolean matches(final Object argument) {
|
||||
String formattedMessage = ((LoggingEvent) argument).getFormattedMessage();
|
||||
System.out.flush();
|
||||
System.out.println("** Got Message: " + formattedMessage);
|
||||
System.out.flush();
|
||||
return
|
||||
formattedMessage.contains("Client request: GET http://localhost:" + ourPort + "/Patient/1 HTTP/1.1") ||
|
||||
formattedMessage.contains("Client response: HTTP 200 OK (Location: http://localhost:" + ourPort + "/Patient/1/_history/1)");
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoggerVerbose() throws Exception {
|
||||
System.out.println("Starting testLogger");
|
||||
IGenericClient client = ourCtx.newRestfulGenericClient("http://localhost:" + ourPort);
|
||||
ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER);
|
||||
|
|
|
@ -355,6 +355,12 @@
|
|||
so that a database constraint will prevent more than one resource from
|
||||
having a matching pair
|
||||
</action>
|
||||
<action type="add">
|
||||
When using the client LoggingInterceptor in non-verbose mode, the
|
||||
log line showing the server's response HTTP status will now also include
|
||||
the returned
|
||||
<![CDATA[<code>Location</code>]]> header value as well
|
||||
</action>
|
||||
</release>
|
||||
<release version="2.5" date="2017-06-08">
|
||||
<action type="fix">
|
||||
|
|
Loading…
Reference in New Issue