Still fire appropriate interceptor methods if the cached

capabiliotystatement is being returned
This commit is contained in:
James Agnew 2019-07-07 14:59:26 -04:00
parent 6c221efaf6
commit 44a97f3621
1 changed files with 22 additions and 2 deletions

View File

@ -24,6 +24,10 @@ import java.lang.reflect.Method;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;
import ca.uhn.fhir.interceptor.api.HookParams;
import ca.uhn.fhir.interceptor.api.Pointcut;
import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor;
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
import org.hl7.fhir.instance.model.api.IBaseConformance;
import org.hl7.fhir.instance.model.api.IBaseResource;
@ -74,17 +78,33 @@ public class ConformanceMethodBinding extends BaseResourceReturningMethodBinding
IBaseResource conf;
conf = myCachedResponse.get();
if ("true".equals(System.getProperty("test"))) {
conf = null;
}
if (conf != null) {
long expires = myCachedResponseExpires.get();
if (expires < System.currentTimeMillis()) {
conf = null;
}
}
if (conf != null) {
// Handle server action interceptors
RestOperationTypeEnum operationType = getRestOperationType(theRequest);
if (operationType != null) {
IServerInterceptor.ActionRequestDetails details = new IServerInterceptor.ActionRequestDetails(theRequest);
populateActionRequestDetailsForInterceptor(theRequest, details, theMethodParams);
HookParams preHandledParams = new HookParams();
preHandledParams.add(RestOperationTypeEnum.class, theRequest.getRestOperationType());
preHandledParams.add(RequestDetails.class, theRequest);
preHandledParams.addIfMatchesType(ServletRequestDetails.class, theRequest);
preHandledParams.add(IServerInterceptor.ActionRequestDetails.class, details);
if (theRequest.getInterceptorBroadcaster() != null) {
theRequest
.getInterceptorBroadcaster()
.callHooks(Pointcut.SERVER_INCOMING_REQUEST_PRE_HANDLED, preHandledParams);
}
}
}
if (conf == null) {
conf = (IBaseResource) invokeServerMethod(theServer, theRequest, theMethodParams);