public ServerProfileProvider(RestfulServer theServer) { myContext = theServer.getFhirContext(); myRestfulServer = theServer; }
private String getServerBase(ServletRequestDetails theHttpRequest) { return myRestfulServer.getServerBaseForRequest(theHttpRequest); } }
myProviderRegistrationMutex.lock(); try { initialize(); ourLog.info("Initializing HAPI FHIR restful server running in " + getFhirContext().getVersion().getVersion().name() + " mode"); ProvidedResourceScanner providedResourceScanner = new ProvidedResourceScanner(getFhirContext()); providedResourceScanner.scanForProvidedResources(this); Collection<IResourceProvider> resourceProvider = getResourceProviders(); registerProviders(resourceProvider, true); Collection<Object> providers = getPlainProviders(); registerProviders(providers, true); findResourceMethods(getServerProfilesProvider()); confProvider = getServerConformanceProvider(); if (confProvider == null) { IFhirVersionServer versionServer = (IFhirVersionServer) getFhirContext().getVersion().getServerVersion(); confProvider = versionServer.createServerConformanceProvider(this); findResourceMethods(confProvider); if (getResourceProviders() != null) { for (IResourceProvider iResourceProvider : getResourceProviders()) { invokeInitialize(iResourceProvider);
/** * Unregister a {@code Collection} of providers */ public void unregisterProviders(Collection<?> providers) { ProvidedResourceScanner providedResourceScanner = new ProvidedResourceScanner(getFhirContext()); if (providers != null) { for (Object provider : providers) { removeResourceMethods(provider); if (provider instanceof IResourceProvider) { myResourceProviders.remove(provider); IResourceProvider rsrcProvider = (IResourceProvider) provider; Class<? extends IBaseResource> resourceType = rsrcProvider.getResourceType(); String resourceName = getFhirContext().getResourceDefinition(resourceType).getName(); providedResourceScanner.removeProvidedResources(rsrcProvider); } else { myPlainProviders.remove(provider); } invokeDestroy(provider); } } }
public RestulfulServerConfiguration createConfiguration() { RestulfulServerConfiguration result = new RestulfulServerConfiguration(); result.setResourceBindings(getResourceBindings()); result.setServerBindings(getServerBindings()); result.setImplementationDescription(getImplementationDescription()); result.setServerVersion(getServerVersion()); result.setServerName(getServerName()); result.setFhirContext(getFhirContext()); result.setServerAddressStrategy(myServerAddressStrategy); try (InputStream inputStream = getClass().getResourceAsStream("/META-INF/MANIFEST.MF")) { if (inputStream != null) { Manifest manifest = new Manifest(inputStream); String value = manifest.getMainAttributes().getValue("Build-Time"); result.setConformanceDate(new InstantDt(value)); } } catch (Exception e) { // fall through } return result; }
theRequest.setAttribute(SERVLET_CONTEXT_ATTRIBUTE, getServletContext()); if (isIgnoreServerParsedRequestParameters()) { String contentType = theRequest.getHeader(Constants.HEADER_CONTENT_TYPE); if (theRequestType == RequestTypeEnum.POST && isNotBlank(contentType) && contentType.startsWith(Constants.CT_X_FORM_URLENCODED)) { String requestPath = getRequestPath(requestFullPath, servletContextPath, servletPath); populateRequestDetailsFromRequestPath(requestDetails, requestPath); fhirServerBase = getServerBaseForRequest(requestDetails); BaseMethodBinding<?> resourceMethod = determineResourceMethod(requestDetails, requestPath); for (int i = getInterceptors().size() - 1; i >= 0; i--) { IServerInterceptor next = getInterceptors().get(i); try { next.processingCompletedNormally(requestDetails); for (int i = getInterceptors().size() - 1; i >= 0; i--) { IServerInterceptor next = getInterceptors().get(i); if (!next.handleException(requestDetails, e, theRequest, theResponse)) { ourLog.debug("Interceptor {} returned false, not continuing processing"); writeExceptionToResponse(theResponse, e); for (int i = getInterceptors().size() - 1; i >= 0; i--) { IServerInterceptor next = getInterceptors().get(i); exception = next.preProcessOutgoingException(requestDetails, e, theRequest);
public Object returnResponse(ServletRequestDetails theRequest, ParseAction<?> outcome, int operationStatus, boolean allowPrefer, MethodOutcome response, String resourceName) throws IOException { HttpServletResponse servletResponse = theRequest.getServletResponse(); servletResponse.setStatus(operationStatus); servletResponse.setCharacterEncoding(Constants.CHARSET_NAME_UTF8); addHeadersToResponse(servletResponse); if (allowPrefer) { addContentLocationHeaders(theRequest, servletResponse, response, resourceName); } Writer writer; if (outcome != null) { ResponseEncoding encoding = RestfulServerUtils.determineResponseEncodingWithDefault(theRequest); servletResponse.setContentType(encoding.getResourceContentType()); writer = servletResponse.getWriter(); IParser parser = encoding.getEncoding().newParser(getFhirContext()); parser.setPrettyPrint(RestfulServerUtils.prettyPrintResponse(this, theRequest)); outcome.execute(parser, writer); } else { servletResponse.setContentType(Constants.CT_TEXT_WITH_UTF8); writer = servletResponse.getWriter(); } return writer; }
ProvidedResourceScanner providedResourceScanner = new ProvidedResourceScanner(getFhirContext()); throw new NullPointerException("getResourceType() on class '" + rsrcProvider.getClass().getCanonicalName() + "' returned null"); String resourceName = getFhirContext().getResourceDefinition(resourceType).getName(); if (!inInit) { myResourceProviders.add(rsrcProvider); ourLog.info("Added {} resource provider(s). Total {}", newResourceProviders.size(), myResourceProviders.size()); for (IResourceProvider provider : newResourceProviders) { findResourceMethods(provider); ourLog.info("Added {} plain provider(s). Total {}", newPlainProviders.size(), myPlainProviders.size()); for (Object provider : newPlainProviders) { findResourceMethods(provider); if (!newResourceProviders.isEmpty()) { for (IResourceProvider provider : newResourceProviders) { invokeInitialize(provider); invokeInitialize(provider);
requestDetails.setFhirServerBase(theRequestDetails.getFhirServerBase()); theRequestDetails.getServer().populateRequestDetailsFromRequestPath(requestDetails, url); BaseMethodBinding<?> method = theRequestDetails.getServer().determineResourceMethod(requestDetails, url); if (method == null) { throw new IllegalArgumentException("Unable to handle GET " + url);
@Override protected void initialize() throws ServletException { super.initialize(); setFhirContext(this.fhirContext); setResourceProviders(this.resourceProviders); setPagingProvider(this.pagingProvider); setServerAddressStrategy(new HardcodedServerAddressStrategy(this.properties.getServer().getPath())); customize(); } }
@Override public void customize(RestfulServer server) { server.setPlainProviders(systemProviders); } }
theRequest.setAttribute(SERVLET_CONTEXT_ATTRIBUTE, getServletContext()); if (isIgnoreServerParsedRequestParameters()) { String contentType = theRequest.getHeader(Constants.HEADER_CONTENT_TYPE); if (theRequestType == RequestTypeEnum.POST && isNotBlank(contentType) && contentType.startsWith(Constants.CT_X_FORM_URLENCODED)) { String requestPath = getRequestPath(requestFullPath, servletContextPath, servletPath); populateRequestDetailsFromRequestPath(requestDetails, requestPath); fhirServerBase = getServerBaseForRequest(requestDetails); BaseMethodBinding<?> resourceMethod = determineResourceMethod(requestDetails, requestPath); for (int i = getInterceptors().size() - 1; i >= 0; i--) { IServerInterceptor next = getInterceptors().get(i); try { next.processingCompletedNormally(requestDetails); for (int i = getInterceptors().size() - 1; i >= 0; i--) { IServerInterceptor next = getInterceptors().get(i); if (!next.handleException(requestDetails, e, theRequest, theResponse)) { ourLog.debug("Interceptor {} returned false, not continuing processing"); writeExceptionToResponse(theResponse, e); for (int i = getInterceptors().size() - 1; i >= 0; i--) { IServerInterceptor next = getInterceptors().get(i); exception = next.preProcessOutgoingException(requestDetails, e, theRequest);
public RestulfulServerConfiguration createConfiguration() { RestulfulServerConfiguration result = new RestulfulServerConfiguration(); result.setResourceBindings(getResourceBindings()); result.setServerBindings(getServerBindings()); result.setImplementationDescription(getImplementationDescription()); result.setServerVersion(getServerVersion()); result.setServerName(getServerName()); result.setFhirContext(getFhirContext()); result.setServerAddressStrategy(myServerAddressStrategy); try (InputStream inputStream = getClass().getResourceAsStream("/META-INF/MANIFEST.MF")) { if (inputStream != null) { Manifest manifest = new Manifest(inputStream); String value = manifest.getMainAttributes().getValue("Build-Time"); result.setConformanceDate(new InstantDt(value)); } } catch (Exception e) { // fall through } return result; }
/** * Unregister a {@code Collection} of providers */ public void unregisterProviders(Collection<?> providers) { ProvidedResourceScanner providedResourceScanner = new ProvidedResourceScanner(getFhirContext()); if (providers != null) { for (Object provider : providers) { removeResourceMethods(provider); if (provider instanceof IResourceProvider) { myResourceProviders.remove(provider); IResourceProvider rsrcProvider = (IResourceProvider) provider; Class<? extends IBaseResource> resourceType = rsrcProvider.getResourceType(); String resourceName = getFhirContext().getResourceDefinition(resourceType).getName(); providedResourceScanner.removeProvidedResources(rsrcProvider); } else { myPlainProviders.remove(provider); } invokeDestroy(provider); } } }
public Object returnResponse(ServletRequestDetails theRequest, ParseAction<?> outcome, int operationStatus, boolean allowPrefer, MethodOutcome response, String resourceName) throws IOException { HttpServletResponse servletResponse = theRequest.getServletResponse(); servletResponse.setStatus(operationStatus); servletResponse.setCharacterEncoding(Constants.CHARSET_NAME_UTF8); addHeadersToResponse(servletResponse); if (allowPrefer) { addContentLocationHeaders(theRequest, servletResponse, response, resourceName); } Writer writer; if (outcome != null) { ResponseEncoding encoding = RestfulServerUtils.determineResponseEncodingWithDefault(theRequest); servletResponse.setContentType(encoding.getResourceContentType()); writer = servletResponse.getWriter(); IParser parser = encoding.getEncoding().newParser(getFhirContext()); parser.setPrettyPrint(RestfulServerUtils.prettyPrintResponse(this, theRequest)); outcome.execute(parser, writer); } else { servletResponse.setContentType(Constants.CT_TEXT_WITH_UTF8); writer = servletResponse.getWriter(); } return writer; }
ProvidedResourceScanner providedResourceScanner = new ProvidedResourceScanner(getFhirContext()); throw new NullPointerException("getResourceType() on class '" + rsrcProvider.getClass().getCanonicalName() + "' returned null"); String resourceName = getFhirContext().getResourceDefinition(resourceType).getName(); if (!inInit) { myResourceProviders.add(rsrcProvider); ourLog.info("Added {} resource provider(s). Total {}", newResourceProviders.size(), myResourceProviders.size()); for (IResourceProvider provider : newResourceProviders) { findResourceMethods(provider); ourLog.info("Added {} plain provider(s). Total {}", newPlainProviders.size(), myPlainProviders.size()); for (Object provider : newPlainProviders) { findResourceMethods(provider); if (!newResourceProviders.isEmpty()) { for (IResourceProvider provider : newResourceProviders) { invokeInitialize(provider); invokeInitialize(provider);
requestDetails.setFhirServerBase(theRequestDetails.getFhirServerBase()); theRequestDetails.getServer().populateRequestDetailsFromRequestPath(requestDetails, url); BaseMethodBinding<?> method = theRequestDetails.getServer().determineResourceMethod(requestDetails, url); if (method == null) { throw new IllegalArgumentException("Unable to handle GET " + url);
@SuppressWarnings("unchecked") @Override protected void initialize() throws ServletException { super.initialize();
/** * Sets the non-resource specific providers which implement method calls on this server. * * @see #setResourceProviders(Collection) * @deprecated This method causes inconsistent behaviour depending on the order it is called in. Use {@link #registerProviders(Object...)} instead. */ @Deprecated public void setPlainProviders(Object... theProv) { setPlainProviders(Arrays.asList(theProv)); }
public ServerProfileProvider(RestfulServer theServer) { myContext = theServer.getFhirContext(); myRestfulServer = theServer; }