docs: private Object getDestination(Object value,
                                    Class<?> type,
                                    String destinationType,
                                    AtomicServiceReference<AdminObjectService> destinationRef,
                                    @Sensitive Map<String, Object> activationProps,
                                    AdminObjectService adminObjSvc) throws Exception {
          final String methodName = "getDestination";
          final boolean trace = TraceComponent.isAnyTracingEnabled();
  
          if (trace && tc.isEntryEnabled())
              Tr.entry(tc, methodName, value, type, destinationType, destinationRef, activationProps, adminObjSvc);
          if (trace && tc.isDebugEnabled())
              Tr.debug(tc, "Resource adapter id", resourceAdapterID);
  
          // Special case for WMQ: useJNDI=true activation config property
          boolean isString = String.class.equals(type);
          String savedValue = isString ? (String) value : null;
          boolean isJNDIName = resourceAdapterID.equals(WMQJMS)
                               && isString
                               && activationProps != null
                               && Boolean.parseBoolean((String) activationProps.get("useJNDI"));
          if (trace && tc.isDebugEnabled())
              Tr.debug(this, tc, "isString, isJNDIName, savedValue", isString, isJNDIName, savedValue);
  
          if (adminObjSvc != null) {
              if (trace && tc.isDebugEnabled())
                  Tr.debug(this, tc, "use adminObjSvc found by MDB runtime");
              if (isJNDIName) {
                  value = adminObjSvc.getJndiName();
                  if (trace && tc.isDebugEnabled())
                      Tr.debug(this, tc, "useJNDI name was specified, using jndiName from the admin obj svc from mdb", value);
              } else {
                  value = adminObjSvc.createResource(null);
                  if (trace && tc.isDebugEnabled())
                      Tr.debug(this, tc, "created admin object resource using admin object service from mdb runtime", value);
              }
          } else {
              ServiceReference<AdminObjectService> reference = destinationRef != null ? destinationRef.getReference() : null;
              if (trace && tc.isDebugEnabled())
                  Tr.debug(this, tc, "reference", reference);
              if (reference != null && !"com.ibm.ws.jca.destination.unspecified".equals(reference.getProperty("component.name")) &&
                  (value == null
                   || value.equals(reference.getProperty(ID)) // id takes precedence over jndiName
                   || value.equals(reference.getProperty(ResourceFactory.JNDI_NAME)))) {
                  if (isJNDIName) {
                      value = reference.getProperty(ResourceFactory.JNDI_NAME);
                      if (trace && tc.isDebugEnabled())
                          Tr.debug(this, tc, "return JNDI name", value);
                  } else {
                      value = destinationRef.getServiceWithException().createResource(null);
                      if (trace && tc.isDebugEnabled())
                          Tr.debug(this, tc, "return the created resource based on destinationRef", value);
                  }
              } else if (value != null && reference != null) {
                  if (trace && tc.isDebugEnabled())
                      Tr.debug(this, tc, "use bundle context");
                  BundleContext bundleContext = Utils.priv.getBundleContext(componentContext);
                  String filter = FilterUtils.createPropertyFilter(ID, (String) value);
                  Collection<ServiceReference<AdminObjectService>> refs = Utils.priv.getServiceReferences(bundleContext, AdminObjectService.class, filter);
                  if (refs.isEmpty()) {
                      // See if it matches a jndiName if they didn't specify a valid id
                      filter = FilterUtils.createPropertyFilter(AdminObjectService.JNDI_NAME, (String) value);
                      refs = Utils.priv.getServiceReferences(bundleContext, AdminObjectService.class, filter);
                      if (refs.isEmpty()) {
                          if (trace && tc.isDebugEnabled())
                              Tr.debug(this, tc, "An administered object for " + value + " was not found.  This is ok if one was not provided.");
                          if (trace && tc.isEntryEnabled())
                              Tr.exit(tc, methodName);
                          return value;
                      }
                  }
                  reference = refs.iterator().next();
                  if (isJNDIName) {
                      value = reference.getProperty(AdminObjectService.JNDI_NAME);
                  } else {
                      AdminObjectService destinationSvc = Utils.priv.getService(bundleContext, reference);
                      value = destinationSvc.createResource(null);
                      // Do not unget the service because we are not done using it.
                      // This is similar to a JNDI lookup of an admin object which does not unget the service upon returning it to the app.
                  }
              }
          }
  
          // Queue name or topic name
          if (trace && tc.isDebugEnabled())
              Tr.debug(this, tc, "value, savedValue", value, savedValue);
          // Skip this processing for third party resource adapters
          if (resourceAdapterID.equals(WASJMS) || resourceAdapterID.equals(WMQJMS)) {
              if (trace && tc.isDebugEnabled())
                  Tr.debug(tc, "Extra processing");
              if (isString && !isJNDIName) {
                  String activationPropsDestinationType = activationProps == null ? null : (String) activationProps.get("destinationType");
                  destinationType = activationPropsDestinationType == null ? destinationType : activationPropsDestinationType;
                  if (destinationType == null)
                      destinationType = (String) properties.get("destinationType");
                  if (destinationType != null)
                      value = getDestinationName(destinationType, value);
              }
          } else {
              if (trace && tc.isDebugEnabled())
                  Tr.debug(tc, "Extra processing skipped");
              if (savedValue != null) {
                  value = savedValue;
                  if (trace && tc.isDebugEnabled())
                      Tr.debug(this, tc, "value, savedValue", value, savedValue);
              }
          }
  
          if (trace && tc.isEntryEnabled())
              Tr.exit(tc, methodName);
  
          return value;
      }