docs: @Override
      public void propagateWebConstraints(PolicyConfigurationFactory pcf,
                                          String contextId,
                                          Object webAppConfigObject) {
          WebAppConfig webAppConfig = null;
          if (webAppConfigObject != null) {
              try {
                  webAppConfig = (WebAppConfig) webAppConfigObject;
              } catch (ClassCastException cce) {
                  Tr.error(tc, "JACC_WEB_SPI_PARAMETER_ERROR", new Object[] { webAppConfigObject.getClass().getName(), "propagateWebConstraints", "WebAppConfig" });
                  return;
              }
          } else {
              // if null, do nothing.
              if (tc.isDebugEnabled())
                  Tr.debug(tc, "Nothing to propagate due to null webAppConfig object.");
              return;
          }
          SecurityConstraintCollection scc = getSecurityMetadata(webAppConfig).getSecurityConstraintCollection();
          if (scc == null) {
              // if null, do nothing since there is no security constraints.
              if (tc.isDebugEnabled())
                  Tr.debug(tc, "Nothing to propagate due to no security constraints.");
              return;
          }
          // if there is the same contextId in the map, delete it. This is for preventing to link PolicyConfiguration incorrectly.
          String appName = webAppConfig.getApplicationName();
          PolicyConfigurationManager.removeModule(appName, contextId);
  
          PolicyConfiguration webPC = null;
          try {
              // for web, there is no scenario to update (add) the Permissions,
              // therefore, the existing permissions are deleted upon invoking getPolicyConfiguration.
              webPC = pcf.getPolicyConfiguration(contextId, true);
          } catch (PolicyContextException pce) {
              Tr.error(tc, "JACC_WEB_GET_POLICYCONFIGURATION_FAILURE", new Object[] { contextId, pce });
              return;
          }
  
          try {
              processRole(webPC, webAppConfig);
              List<SecurityConstraint> scList = scc.getSecurityConstraints();
              Map<String, URLMap> allURLMap = convertURLMap(scList);
              processUrlMap(webPC, allURLMap, isDenyUncoveredHttpMethods(scList));
              PolicyConfigurationManager.linkConfiguration(appName, webPC);
              PolicyConfigurationManager.addModule(appName, contextId);
              // commit will be invoked in PolicyCOnfigurationManager class.
          } catch (PolicyContextException e) {
              Tr.error(tc, "JACC_WEB_PERMISSION_PROPAGATION_FAILURE", new Object[] { contextId, e });
          }
  
          return;
  
      }