Interface IServerAddressStrategy

All Known Implementing Classes:
ApacheProxyAddressStrategy, HardcodedServerAddressStrategy, IncomingRequestAddressStrategy

public interface IServerAddressStrategy
Provides the server base for a given incoming request. This can be used to account for multi-homed servers or other unusual network configurations.
  • Method Summary

    Modifier and Type
    Method
    Description
    determineServerBase(jakarta.servlet.ServletContext theServletContext, jakarta.servlet.http.HttpServletRequest theRequest)
    Determine the server base for a given request
    default String
    determineServletContextPath(jakarta.servlet.http.HttpServletRequest theRequest, RestfulServer server)
    Determines the servlet's context path.
  • Method Details

    • determineServerBase

      String determineServerBase(jakarta.servlet.ServletContext theServletContext, jakarta.servlet.http.HttpServletRequest theRequest)
      Determine the server base for a given request
    • determineServletContextPath

      default String determineServletContextPath(jakarta.servlet.http.HttpServletRequest theRequest, RestfulServer server)
      Determines the servlet's context path. This is here to try and deal with the wide variation in servers and what they return. getServletContext().getContextPath() is supposed to return the path to the specific servlet we are deployed as but it's not available everywhere. On some servers getServletContext() can return null (old Jetty seems to suffer from this, see hapi-fhir-base-test-mindeps-server) and on other old servers (Servlet 2.4) getServletContext().getContextPath() doesn't even exist. theRequest.getContextPath() returns the context for the specific incoming request. It should be available everywhere, but it's likely to be less predicable if there are multiple servlet mappings pointing to the same servlet, so we don't favour it. This is possibly not the best strategy (maybe we should just always use theRequest.getContextPath()?) but so far people seem happy with this behaviour across a wide variety of platforms. If you are having troubles on a given platform/configuration and want to suggest a change or even report incompatibility here, we'd love to hear about it.