Fix CI issue

This commit is contained in:
James Agnew 2018-06-06 11:39:06 -04:00
parent f20371c9c9
commit e7804b881c
6 changed files with 74 additions and 54 deletions

View File

@ -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;
} }

View File

@ -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);
} }

View File

@ -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));
} }
} }

View File

@ -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;
} }
} }

View File

@ -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
} }

View File

@ -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