docs: @FFDCIgnore(value = { IndexOutOfBoundsException.class }) // Liberty Change
      private static Object injectIntoCollectionOrArray(Class<?> rawType,
                                                        Type genericType,
                                                        Annotation[] paramAnns,
                                                        MultivaluedMap<String, String> values,
                                                        boolean isbean, boolean decoded,
                                                        ParameterType pathParam, Message message) {
          //CHECKSTYLE:ON
          // Liberty change start
          ParamConverter<?> pm = null;
          if (message != null) {
              ServerProviderFactory pf = ServerProviderFactory.getInstance(message);
              pm = pf.createParameterHandler(rawType, genericType, paramAnns, message);
              if (pm != null) {
                  if (tc.isDebugEnabled() && values.size() > 1) {
                      Tr.debug(tc, "injectIntoCollectionOrArray unexpected: size of values > 1, values.size()=" + values.size());
                  }
                  for (Map.Entry<String, List<String>> entry : values.entrySet()) {
                      // always only ever 1?
                      // if a user specifies the wrong id we should return null instead of blowing up
                      try {
                          return pm.fromString(entry.getValue().get(0));
                      } catch (IndexOutOfBoundsException e) {
                          return null;
                      }
                  }
              }
          }
          // Liberty change end
          Class<?> type = getCollectionType(rawType);
  
          Class<?> realType = null;
          Type realGenericType = null;
          if (rawType.isArray()) {
              realType = rawType.getComponentType();
              realGenericType = realType;
          } else {
              Type[] types = getActualTypes(genericType);
              if (types.length == 0 || !(types[0] instanceof ParameterizedType)) {
                  realType = getActualType(genericType);
                  realGenericType = realType;
              } else {
                  realType = getRawType(types[0]);
                  realGenericType = types[0] == realType ? realType : types[0];
              }
          }
          Object theValues = null;
          if (type != null) {
              try {
                  theValues = type.newInstance();
              } catch (IllegalAccessException ex) {
                  reportServerError("CLASS_ACCESS_FAILURE", type.getName());
              } catch (Exception ex) {
                  reportServerError("CLASS_INSTANTIATION_FAILURE", type.getName());
              }
          } else {
              theValues = Array.newInstance(realType, isbean ? 1 : values.values().iterator().next().size());
          }
          if (isbean) {
              Object o = InjectionUtils.handleBean(realType, paramAnns, values, pathParam, message, decoded);
              addToCollectionValues(theValues, o, 0);
          } else {
              List<String> valuesList = values.values().iterator().next();
              valuesList = checkPathSegment(valuesList, realType, pathParam);
              for (int ind = 0; ind < valuesList.size(); ind++) {
                  Object o = InjectionUtils.handleParameter(valuesList.get(ind), decoded,
                                 realType, realGenericType, paramAnns, pathParam, message);
                  addToCollectionValues(theValues, o, ind);
              }
          }
          return theValues;
      }