docs: public Object getInjectionObject(Object targetObject,
                                       InjectionTargetContext targetContext)
                      throws InjectionException
      {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(tc, "getInjectionObject: " + toSimpleString());
  
          Object retObj = ivInjectedObject;
  
          // If the object to be injected has not been cached, then it could
          // be obtained by performing a naming lookup, which would invoke the
          // Reference ObjectFactory with the binding info (RefAddr) object
          // that was bound into naming during populateJavaNameSpace.  However,
          // to improve performance, that same binding info has been saved in
          // this binding so that the factory  may be invoked directly.
  
          if (retObj == null)
          {
              try
              {
                  retObj = getInjectionObjectInstance(targetObject, targetContext); // F48603.4
              } catch (RecursiveInjectionException ex)
              {
                  if (isTraceOn && tc.isEntryEnabled())
                      Tr.exit(tc, "getInjectionObject: " + ex);
                  throw ex;
              } catch (Throwable ex)
              {
                  // Only log FFDC if this is a failed injection; failed naming lookups may
                  // be normal and the caller should decide if FFDC is needed.
                  if (targetObject != null) {
                      FFDCFilter.processException(ex, CLASS_NAME + ".getInjectionObject",
                                                  "408", this, (Object[]) null);
                  }
  
                  String displayName = getDisplayName();
                  Object exMessage = ex.getLocalizedMessage();
                  if (exMessage == null)
                  {
                      exMessage = ex.toString();
                  }
  
                  String message = Tr.formatMessage(tc,
                                                    "FAILED_TO_CREATE_OBJECT_INSTANCE_CWNEN0030E",
                                                    displayName,
                                                    exMessage);
                  InjectionException ex2 = new InjectionException(message, ex);
  
                  if (isTraceOn && tc.isEntryEnabled())
                      Tr.exit(tc, "getInjectionObject", ex2);
                  throw ex2;
              }
  
              // getInjectionObjectInstance should never return null.  No-param
              // InjectionTargetMultiParamMethod should return an empty array.
              if (retObj == null) // F87539
              {
                  String classTypeName, component, module, app;
                  if (ivJ2eeName != null)
                  {
                      component = ivJ2eeName.getComponent();
                      module = ivJ2eeName.getModule();
                      app = ivJ2eeName.getApplication();
                  }
                  else
                  {
                      component = module = app = "UNKNOWN";
                  }
  
                  classTypeName = ivInjectionClassType == null ? "UNKNOWN" : ivInjectionClassType.getName();
  
                  Tr.error(tc, "UNABLE_TO_RESOLVE_INJECTION_OBJECT_CWNEN0035E",
                           getDisplayName(),
                           classTypeName,
                           component,
                           module,
                           app); // d468667 d502635.1
  
                  if (isTraceOn && tc.isEntryEnabled())
                      Tr.exit(tc, "getInjectionObject : failed");
  
                  throw new InjectionException("The " + getDisplayName() + " reference of type " +
                                               classTypeName + " for the " +
                                               component + " component in the " +
                                               module + " module of the " +
                                               app + " application cannot be resolved."); // d502635.1
              }
          }
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(tc, "getInjectionObject : " + Util.identity(retObj));
  
          return retObj;
      }