code: protected Map<String, TSSCompoundSecMechConfig> extractCompoundSecMech(LayersData mechInfo, Map<String, List<TransportAddress>> addrMap) throws Exception {
          printTrace("Layers", null, 1);
          /* Get the entries corresponding to attributeLayer, authenticationLayer and transportLayer */
          // Map<String, List<Map<String, Object>>> mechInfo = Nester.nest(mechInfo, KEY_LAYER_TRANSPORT, KEY_LAYER_AUTHENTICATION, KEY_LAYER_ATTRIBUTE);
          Map<String, TSSCompoundSecMechConfig> compoundSecMechConfigs = new LinkedHashMap<String, TSSCompoundSecMechConfig>();
          // TODO: Make temporal coupling explicit.  Setting authentication layer will create the compoundSecMechConfigs that the other layers need to fill up.
          setAuthenticationLayerConfig(compoundSecMechConfigs, mechInfo);
          setTransportLayerConfig(compoundSecMechConfigs, mechInfo, addrMap);
          setAttributeLayerConfig(compoundSecMechConfigs, mechInfo);
          return compoundSecMechConfigs;
      }
docs: /*
  The compound security mechanism structure in CORBA specification, looks like
  
  struct CompoundSecMech {
  ----AssociationOptions target_requires;
  ----IOP::TaggedComponent transport_mech;
  ----AS_ContextSec as_context_mech;
  ----SAS_ContextSec sas_context_mech;
  };
  
  The sub elements under <layers> corresponds one of transport_mech, AS_ContextSec or SAS_ContextSec.
  This method extracts the respective security mechanisms.