Fix CI issue
This commit is contained in:
parent
f20371c9c9
commit
e7804b881c
|
@ -959,6 +959,11 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setApplicationContext(ApplicationContext theApplicationContext) throws BeansException {
|
public void setApplicationContext(ApplicationContext theApplicationContext) throws BeansException {
|
||||||
|
/*
|
||||||
|
* We do a null check here because Smile's module system tries to
|
||||||
|
* initialize the application context twice if two modules depend on
|
||||||
|
* the persistence module. The second time sets the dependency's appctx.
|
||||||
|
*/
|
||||||
if (myApplicationContext == null) {
|
if (myApplicationContext == null) {
|
||||||
myApplicationContext = theApplicationContext;
|
myApplicationContext = theApplicationContext;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ public interface IServerConformanceProvider<T extends IBaseResource> {
|
||||||
*
|
*
|
||||||
* See the class documentation for an important note if you are extending this class
|
* See the class documentation for an important note if you are extending this class
|
||||||
*/
|
*/
|
||||||
public abstract T getServerConformance(HttpServletRequest theRequest);
|
T getServerConformance(HttpServletRequest theRequest);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This setter is needed in implementation classes (along with
|
* This setter is needed in implementation classes (along with
|
||||||
|
@ -40,5 +40,5 @@ public interface IServerConformanceProvider<T extends IBaseResource> {
|
||||||
*
|
*
|
||||||
* @param theRestfulServer
|
* @param theRestfulServer
|
||||||
*/
|
*/
|
||||||
public void setRestfulServer(RestfulServer theRestfulServer);
|
void setRestfulServer(RestfulServer theRestfulServer);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,9 +9,9 @@ package ca.uhn.fhir.rest.server;
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
@ -26,6 +26,7 @@ import ca.uhn.fhir.context.ProvidedResourceScanner;
|
||||||
import ca.uhn.fhir.context.RuntimeResourceDefinition;
|
import ca.uhn.fhir.context.RuntimeResourceDefinition;
|
||||||
import ca.uhn.fhir.context.api.AddProfileTagEnum;
|
import ca.uhn.fhir.context.api.AddProfileTagEnum;
|
||||||
import ca.uhn.fhir.context.api.BundleInclusionRule;
|
import ca.uhn.fhir.context.api.BundleInclusionRule;
|
||||||
|
import ca.uhn.fhir.model.primitive.InstantDt;
|
||||||
import ca.uhn.fhir.parser.IParser;
|
import ca.uhn.fhir.parser.IParser;
|
||||||
import ca.uhn.fhir.rest.annotation.Destroy;
|
import ca.uhn.fhir.rest.annotation.Destroy;
|
||||||
import ca.uhn.fhir.rest.annotation.IdParam;
|
import ca.uhn.fhir.rest.annotation.IdParam;
|
||||||
|
@ -125,6 +126,7 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
|
||||||
private boolean myUncompressIncomingContents = true;
|
private boolean myUncompressIncomingContents = true;
|
||||||
private boolean myUseBrowserFriendlyContentTypes;
|
private boolean myUseBrowserFriendlyContentTypes;
|
||||||
private ITenantIdentificationStrategy myTenantIdentificationStrategy;
|
private ITenantIdentificationStrategy myTenantIdentificationStrategy;
|
||||||
|
private Date myConformanceDate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor. Note that if no {@link FhirContext} is passed in to the server (either through the constructor, or
|
* Constructor. Note that if no {@link FhirContext} is passed in to the server (either through the constructor, or
|
||||||
|
@ -194,19 +196,14 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
|
||||||
result.setServerName(getServerName());
|
result.setServerName(getServerName());
|
||||||
result.setFhirContext(getFhirContext());
|
result.setFhirContext(getFhirContext());
|
||||||
result.setServerAddressStrategy(myServerAddressStrategy);
|
result.setServerAddressStrategy(myServerAddressStrategy);
|
||||||
InputStream inputStream = null;
|
try (InputStream inputStream = getClass().getResourceAsStream("/META-INF/MANIFEST.MF")) {
|
||||||
try {
|
|
||||||
inputStream = getClass().getResourceAsStream("/META-INF/MANIFEST.MF");
|
|
||||||
if (inputStream != null) {
|
if (inputStream != null) {
|
||||||
Manifest manifest = new Manifest(inputStream);
|
Manifest manifest = new Manifest(inputStream);
|
||||||
result.setConformanceDate(manifest.getMainAttributes().getValue("Build-Time"));
|
String value = manifest.getMainAttributes().getValue("Build-Time");
|
||||||
|
result.setConformanceDate(new InstantDt(value));
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (Exception e) {
|
||||||
// fall through
|
// fall through
|
||||||
} finally {
|
|
||||||
if (inputStream != null) {
|
|
||||||
IOUtils.closeQuietly(inputStream);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -573,10 +570,10 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
|
||||||
*
|
*
|
||||||
* @param theList The list of interceptors (may be null)
|
* @param theList The list of interceptors (may be null)
|
||||||
*/
|
*/
|
||||||
public void setInterceptors(List<IServerInterceptor> theList) {
|
public void setInterceptors(IServerInterceptor... theList) {
|
||||||
myInterceptors.clear();
|
myInterceptors.clear();
|
||||||
if (theList != null) {
|
if (theList != null) {
|
||||||
myInterceptors.addAll(theList);
|
myInterceptors.addAll(Arrays.asList(theList));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -606,8 +603,11 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
|
||||||
*
|
*
|
||||||
* @see #setResourceProviders(Collection)
|
* @see #setResourceProviders(Collection)
|
||||||
*/
|
*/
|
||||||
public void setPlainProviders(Object... theProv) {
|
public void setPlainProviders(Collection<Object> theProviders) {
|
||||||
setPlainProviders(Arrays.asList(theProv));
|
myPlainProviders.clear();
|
||||||
|
if (theProviders != null) {
|
||||||
|
myPlainProviders.addAll(theProviders);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -637,10 +637,10 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
|
||||||
/**
|
/**
|
||||||
* Sets the resource providers for this server
|
* Sets the resource providers for this server
|
||||||
*/
|
*/
|
||||||
public void setResourceProviders(IResourceProvider... theResourceProviders) {
|
public void setResourceProviders(Collection<IResourceProvider> theResourceProviders) {
|
||||||
myResourceProviders.clear();
|
myResourceProviders.clear();
|
||||||
if (theResourceProviders != null) {
|
if (theResourceProviders != null) {
|
||||||
myResourceProviders.addAll(Arrays.asList(theResourceProviders));
|
myResourceProviders.addAll(theResourceProviders);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1518,10 +1518,10 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
|
||||||
*
|
*
|
||||||
* @param theList The list of interceptors (may be null)
|
* @param theList The list of interceptors (may be null)
|
||||||
*/
|
*/
|
||||||
public void setInterceptors(IServerInterceptor... theList) {
|
public void setInterceptors(List<IServerInterceptor> theList) {
|
||||||
myInterceptors.clear();
|
myInterceptors.clear();
|
||||||
if (theList != null) {
|
if (theList != null) {
|
||||||
myInterceptors.addAll(Arrays.asList(theList));
|
myInterceptors.addAll(theList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1530,11 +1530,8 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
|
||||||
*
|
*
|
||||||
* @see #setResourceProviders(Collection)
|
* @see #setResourceProviders(Collection)
|
||||||
*/
|
*/
|
||||||
public void setPlainProviders(Collection<Object> theProviders) {
|
public void setPlainProviders(Object... theProv) {
|
||||||
myPlainProviders.clear();
|
setPlainProviders(Arrays.asList(theProv));
|
||||||
if (theProviders != null) {
|
|
||||||
myPlainProviders.addAll(theProviders);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1552,10 +1549,10 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
|
||||||
/**
|
/**
|
||||||
* Sets the resource providers for this server
|
* Sets the resource providers for this server
|
||||||
*/
|
*/
|
||||||
public void setResourceProviders(Collection<IResourceProvider> theResourceProviders) {
|
public void setResourceProviders(IResourceProvider... theResourceProviders) {
|
||||||
myResourceProviders.clear();
|
myResourceProviders.clear();
|
||||||
if (theResourceProviders != null) {
|
if (theResourceProviders != null) {
|
||||||
myResourceProviders.addAll(theResourceProviders);
|
myResourceProviders.addAll(Arrays.asList(theResourceProviders));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,11 +21,13 @@ package ca.uhn.fhir.rest.server;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.rest.server.method.BaseMethodBinding;
|
import ca.uhn.fhir.rest.server.method.BaseMethodBinding;
|
||||||
import ca.uhn.fhir.util.VersionUtil;
|
import ca.uhn.fhir.util.VersionUtil;
|
||||||
|
import org.hl7.fhir.instance.model.api.IPrimitiveType;
|
||||||
|
|
||||||
import static org.apache.commons.lang3.StringUtils.isBlank;
|
import static org.apache.commons.lang3.StringUtils.isBlank;
|
||||||
|
|
||||||
|
@ -38,7 +40,7 @@ public class RestulfulServerConfiguration {
|
||||||
private String serverName = "HAPI FHIR";
|
private String serverName = "HAPI FHIR";
|
||||||
private FhirContext fhirContext;
|
private FhirContext fhirContext;
|
||||||
private IServerAddressStrategy serverAddressStrategy;
|
private IServerAddressStrategy serverAddressStrategy;
|
||||||
private String conformanceDate;
|
private IPrimitiveType<Date> myConformanceDate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
|
@ -73,11 +75,10 @@ public class RestulfulServerConfiguration {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the serverBindings
|
* Set the theServerBindings
|
||||||
* @param serverBindings the serverBindings to set
|
|
||||||
*/
|
*/
|
||||||
public RestulfulServerConfiguration setServerBindings(List<BaseMethodBinding<?>> serverBindings) {
|
public RestulfulServerConfiguration setServerBindings(List<BaseMethodBinding<?>> theServerBindings) {
|
||||||
this.serverBindings = serverBindings;
|
this.serverBindings = theServerBindings;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,23 +167,25 @@ public class RestulfulServerConfiguration {
|
||||||
*/
|
*/
|
||||||
public void setServerAddressStrategy(IServerAddressStrategy serverAddressStrategy) {
|
public void setServerAddressStrategy(IServerAddressStrategy serverAddressStrategy) {
|
||||||
this.serverAddressStrategy = serverAddressStrategy;
|
this.serverAddressStrategy = serverAddressStrategy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the conformanceDate
|
* Get the date that will be specified in the conformance profile
|
||||||
* @return the conformanceDate
|
* exported by this server. Typically this would be populated with
|
||||||
*/
|
* an InstanceType.
|
||||||
public String getConformanceDate() {
|
*/
|
||||||
return conformanceDate;
|
public IPrimitiveType<Date> getConformanceDate() {
|
||||||
|
return myConformanceDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the conformanceDate
|
* Set the date that will be specified in the conformance profile
|
||||||
* @param conformanceDate the conformanceDate to set
|
* exported by this server. Typically this would be populated with
|
||||||
|
* an InstanceType.
|
||||||
*/
|
*/
|
||||||
public void setConformanceDate(String conformanceDate) {
|
public void setConformanceDate(IPrimitiveType<Date> theConformanceDate) {
|
||||||
this.conformanceDate = conformanceDate;
|
myConformanceDate = theConformanceDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ import org.hl7.fhir.dstu3.model.OperationDefinition.OperationKind;
|
||||||
import org.hl7.fhir.dstu3.model.OperationDefinition.OperationParameterUse;
|
import org.hl7.fhir.dstu3.model.OperationDefinition.OperationParameterUse;
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
|
import org.hl7.fhir.instance.model.api.IPrimitiveType;
|
||||||
|
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
@ -76,7 +77,7 @@ public class ServerCapabilityStatementProvider implements IServerConformanceProv
|
||||||
private Callable<RestulfulServerConfiguration> myServerConfiguration;
|
private Callable<RestulfulServerConfiguration> myServerConfiguration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* No-arg constructor and seetter so that the ServerConfirmanceProvider can be Spring-wired with the RestfulService avoiding the potential reference cycle that would happen.
|
* No-arg constructor and setter so that the ServerConformanceProvider can be Spring-wired with the RestfulService avoiding the potential reference cycle that would happen.
|
||||||
*/
|
*/
|
||||||
public ServerCapabilityStatementProvider() {
|
public ServerCapabilityStatementProvider() {
|
||||||
super();
|
super();
|
||||||
|
@ -139,10 +140,10 @@ public class ServerCapabilityStatementProvider implements IServerConformanceProv
|
||||||
}
|
}
|
||||||
|
|
||||||
private DateTimeType conformanceDate() {
|
private DateTimeType conformanceDate() {
|
||||||
String buildDate = getServerConfiguration().getConformanceDate();
|
IPrimitiveType<Date> buildDate = getServerConfiguration().getConformanceDate();
|
||||||
if (buildDate != null) {
|
if (buildDate != null && buildDate.getValue() != null) {
|
||||||
try {
|
try {
|
||||||
return new DateTimeType(buildDate);
|
return new DateTimeType(buildDate.getValueAsString());
|
||||||
} catch (DataFormatException e) {
|
} catch (DataFormatException e) {
|
||||||
// fall through
|
// fall through
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ import java.util.*;
|
||||||
import javax.servlet.ServletConfig;
|
import javax.servlet.ServletConfig;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import ca.uhn.fhir.model.primitive.InstantDt;
|
||||||
import org.hl7.fhir.dstu3.model.*;
|
import org.hl7.fhir.dstu3.model.*;
|
||||||
import org.hl7.fhir.dstu3.model.CapabilityStatement.*;
|
import org.hl7.fhir.dstu3.model.CapabilityStatement.*;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
|
@ -527,29 +528,42 @@ public class ServerCapabilityStatementProviderDstu3Test {
|
||||||
@Test
|
@Test
|
||||||
public void testSearchReferenceParameterWithList() throws Exception {
|
public void testSearchReferenceParameterWithList() throws Exception {
|
||||||
|
|
||||||
RestfulServer rsNoType = new RestfulServer(ourCtx);
|
RestfulServer rsNoType = new RestfulServer(ourCtx){
|
||||||
|
@Override
|
||||||
|
public RestulfulServerConfiguration createConfiguration() {
|
||||||
|
RestulfulServerConfiguration retVal = super.createConfiguration();
|
||||||
|
retVal.setConformanceDate(new InstantDt("2011-02-22T11:22:33Z"));
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
};
|
||||||
rsNoType.registerProvider(new SearchProviderWithListNoType());
|
rsNoType.registerProvider(new SearchProviderWithListNoType());
|
||||||
ServerCapabilityStatementProvider scNoType = new ServerCapabilityStatementProvider(rsNoType);
|
ServerCapabilityStatementProvider scNoType = new ServerCapabilityStatementProvider(rsNoType);
|
||||||
rsNoType.setServerConformanceProvider(scNoType);
|
rsNoType.setServerConformanceProvider(scNoType);
|
||||||
rsNoType.init(createServletConfig());
|
rsNoType.init(createServletConfig());
|
||||||
scNoType.getServerConfiguration().setConformanceDate("2011-02-22T11:22:33Z");
|
|
||||||
|
|
||||||
CapabilityStatement conformance = scNoType.getServerConformance(createHttpServletRequest());
|
CapabilityStatement conformance = scNoType.getServerConformance(createHttpServletRequest());
|
||||||
String confNoType = ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(conformance);
|
String confNoType = ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(conformance);
|
||||||
ourLog.info(confNoType);
|
ourLog.info(confNoType);
|
||||||
|
|
||||||
RestfulServer rsWithType = new RestfulServer(ourCtx);
|
RestfulServer rsWithType = new RestfulServer(ourCtx){
|
||||||
|
@Override
|
||||||
|
public RestulfulServerConfiguration createConfiguration() {
|
||||||
|
RestulfulServerConfiguration retVal = super.createConfiguration();
|
||||||
|
retVal.setConformanceDate(new InstantDt("2011-02-22T11:22:33Z"));
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
};
|
||||||
rsWithType.registerProvider(new SearchProviderWithListWithType());
|
rsWithType.registerProvider(new SearchProviderWithListWithType());
|
||||||
ServerCapabilityStatementProvider scWithType = new ServerCapabilityStatementProvider(rsWithType);
|
ServerCapabilityStatementProvider scWithType = new ServerCapabilityStatementProvider(rsWithType);
|
||||||
rsWithType.setServerConformanceProvider(scWithType);
|
rsWithType.setServerConformanceProvider(scWithType);
|
||||||
rsWithType.init(createServletConfig());
|
rsWithType.init(createServletConfig());
|
||||||
scWithType.getServerConfiguration().setConformanceDate("2011-02-22T11:22:33Z");
|
|
||||||
|
|
||||||
CapabilityStatement conformanceWithType = scWithType.getServerConformance(createHttpServletRequest());
|
CapabilityStatement conformanceWithType = scWithType.getServerConformance(createHttpServletRequest());
|
||||||
String confWithType = ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(conformanceWithType);
|
String confWithType = ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(conformanceWithType);
|
||||||
ourLog.info(confWithType);
|
ourLog.info(confWithType);
|
||||||
|
|
||||||
assertEquals(confNoType, confWithType);
|
assertEquals(confNoType, confWithType);
|
||||||
|
assertThat(confNoType, containsString("<date value=\"2011-02-22T11:22:33Z\"/>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in New Issue