docs: private NavigableMap<String, Object> parseConfiguration(Map<String, Object> configProps, PropertyService vProps) throws Exception {
          final boolean trace = TraceComponent.isAnyTracingEnabled();
  
          // WAS data source properties
          NavigableMap<String, Object> wProps = new TreeMap<String, Object>();
  
          String vPropsPID = null;
          
          boolean recommendAuthAlias = false;
          for (Map.Entry<String, Object> entry : configProps.entrySet()) {
              String key = entry.getKey();
              Object value = entry.getValue();
              // look for vendor properties, which will be of the form properties.0.name
              if (key.length () > TOTAL_PREFIX_LENGTH && key.charAt(BASE_PREFIX_LENGTH) == '.' && key.startsWith(BASE_PREFIX)) {
                  key = key.substring(TOTAL_PREFIX_LENGTH);
                  if (key.equals("config.referenceType")) {
                      if (vPropsPID == null)
                          vProps.setFactoryPID(vPropsPID = (String) value);
                      else
                          throw new SQLFeatureNotSupportedException(ConnectorService.getMessage("CARDINALITY_ERROR_J2CA8040", DATASOURCE, id, PropertyService.PROPERTIES));
                  } else {
                      if (value instanceof Long)
                          if (PropertyService.DURATION_S_INT_PROPS.contains(key) || PropertyService.DURATION_MS_INT_PROPS.contains(key))
                              value = ((Long) value).intValue(); // duration type: convert Long --> Integer
                          else if (PropertyService.DURATION_MIXED_PROPS.contains(key))
                              value = ((Long) value).toString(); // figure it out later by introspection
  
                      if (PropertyService.isPassword(key)) {
                          if (value instanceof SerializableProtectedString) {
                              String password = new String(((SerializableProtectedString) value).getChars());
                              value = PasswordUtil.getCryptoAlgorithm(password) == null ? password : PasswordUtil.decode(password);
                          } else if (value instanceof String) {
                              String password = (String) value;
                              value = PasswordUtil.getCryptoAlgorithm(password) == null ? password : PasswordUtil.decode(password);
                          }
                          if (DataSourceDef.password.name().equals(key))
                              recommendAuthAlias = true;
                      } else if (trace && tc.isDebugEnabled()) {
                          if(key.toLowerCase().equals("url")) {
                              if(value instanceof String)
                                  Tr.debug(this, tc, "Found vendor property: " + key + '=' + PropertyService.filterURL((String) value));
                          } else {
                              Tr.debug(this, tc, "Found vendor property: " + key + '=' + value);
                          }
                      }
  
                      vProps.put(key, value);
                  }
              } else if (key.indexOf('.') == -1 && !WPROPS_TO_SKIP.contains(key))
                  wProps.put(key, value);
          }
          
          //Don't send out auth alias recommendation message with UCP since it may be required to set the 
          //user and password as ds props
          if(recommendAuthAlias && !"com.ibm.ws.jdbc.dataSource.properties.oracle.ucp".equals(vPropsPID))
              ConnectorService.logMessage(Level.INFO, "RECOMMEND_AUTH_ALIAS_J2CA8050", id);
  
          if (vPropsPID == null)
              vProps.setFactoryPID(PropertyService.FACTORY_PID);
  
          return wProps;
      }