docs: private List<RaMessageListener> mergeMessageListeners(List<RaMessageListener> rxListeners, LinkedList<RaMessageListener> annoListeners) {
          final boolean trace = TraceComponent.isAnyTracingEnabled();
  
          LinkedList<RaMessageListener> listeners = new LinkedList<RaMessageListener>();
  
          @SuppressWarnings("unchecked")
          LinkedList<RaMessageListener> copyAnnoListeners = (LinkedList<RaMessageListener>) annoListeners.clone();
  
          // JCA 1.6 spec
          //   1. If a deployment descriptor element and one or more annotations specify
          //   information for the same unique identity (as specified by the XML schema), the
          //   information provided in the deployment descriptor overrides the value specified
          //   in the annotation.
          for (RaMessageListener rxListener : rxListeners) {
              if (trace && tc.isDebugEnabled())
                  Tr.debug(this, tc, "rxlistener type is: " + rxListener.getMessageListenerType());
              RaMessageListener mergedListener = null;
              RaActivationSpec activationSpec = null;
              for (RaMessageListener aListener : annoListeners) {
                  if (trace && tc.isDebugEnabled()) {
                      Tr.debug(this, tc, "anno listener type is: " + aListener.getMessageListenerType());
                      Tr.debug(this, tc, "anno listener class is: " + aListener.getActivationSpec().getActivationSpecClass());
                  }
                  if (rxListener.getMessageListenerType().equals(aListener.getMessageListenerType())) {
                      if (trace && tc.isDebugEnabled()) {
                          Tr.debug(tc, "ra.xml listener class: " + rxListener.getActivationSpec().getActivationSpecClass());
                      }
  
                      // remove the message listener from the list so we know at the end if
                      // there are any additional annotated-only listeners that we need to 
                      // copy into the master
                      copyAnnoListeners.remove(aListener);
  
                      // ra.xml overrides @Activation, but still process the config properties
                      if (trace && tc.isDebugEnabled())
                          Tr.debug(this, tc, "ra.xml already contains a message listener with type '" + rxListener.getMessageListenerType()
                                             + "'.  Combining the properties from class with @Activation annotation '" + aListener.getActivationSpec().getActivationSpecClass() + "'");
  
                      RaActivationSpec rxActivationSpec = rxListener.getActivationSpec();
                      RaActivationSpec annoActivationSpec = aListener.getActivationSpec();
                      if (rxActivationSpec == null)
                          throw new IllegalArgumentException(Tr.formatMessage(tc, "J2CA9924.listener.actspec.missing",
                                                                              rxListener.getMessageListenerType(),
                                                                              aListener.getActivationSpec().getActivationSpecClass()));
                      if (mergedListener == null) {
                          mergedListener = new RaMessageListener();
                          mergedListener.setMessageListenerType(rxListener.getMessageListenerType());
                          activationSpec = new RaActivationSpec();
                          activationSpec.setActivationSpecClass(rxActivationSpec.getActivationSpecClass());
                      }
                      activationSpec.getConfigProperties().addAll(mergeConfigProperties(rxActivationSpec.getConfigProperties(), annoActivationSpec.getConfigProperties()));
                  }
              }
              if (mergedListener != null) {
                  mergedListener.setActivationSpec(activationSpec);
                  listeners.add(mergedListener);
              } else {
                  RaActivationSpec rxActivationSpec = rxListener.getActivationSpec();
                  try {
                      List<RaConfigProperty> properties = mergeConfigProperties(rxActivationSpec.getConfigProperties(),
                                                                                getAnnotatedConfigProperties(raClassLoader.loadClass(rxActivationSpec.getActivationSpecClass()),
                                                                                                             false));
                      rxActivationSpec.getConfigProperties().clear();
                      rxActivationSpec.getConfigProperties().addAll(properties);
                  } catch (Exception e) {
                      Tr.warning(tc, "J2CA9919.class.not.found", rxActivationSpec.getActivationSpecClass(), adapterName);
                  }
                  listeners.add(rxListener);
              }
          }
  
          if (!copyAnnoListeners.isEmpty()) {
              if (trace && tc.isDebugEnabled())
                  Tr.debug(this, tc, "remaining anno listeners after merge", copyAnnoListeners);
              // there are annotated message listeners (activations) that do not already
              // exist in the ra.xml, add them to the master
              for (RaMessageListener msgListener : copyAnnoListeners)
                  listeners.add(msgListener);
          }
  
          return listeners;
      }