code: protected List<ProviderInfo<? extends Object>> prepareProviders(boolean custom,
                                                                      boolean busGlobal,
                                                                      Object[] providers,
                                                                      ProviderInfo<Application> application) {
          List<ProviderInfo<? extends Object>> theProviders =
              new ArrayList<ProviderInfo<? extends Object>>(providers.length);
          @SuppressWarnings("unchecked")
          Map<String, Object> beanCustomizerContexts = (Map<String, Object>) getBus().getProperty(JaxRsConstants.ENDPOINT_BEANCUSTOMIZER_CONTEXTOBJ);
  
          for (Object o : providers) {
              if (o == null) {
                  continue;
              }
  
              /**
               * using POJO object to create ProviderInfo to get info of @Context
               */
              ProviderInfo<? extends Object> pi = null;
  
              if (o instanceof Constructor) {
                  Map<Class<?>, Object> values = CastUtils.cast(application == null ? null : Collections.singletonMap(Application.class, application.getProvider()));
                  pi = createProviderFromConstructor((Constructor<?>) o, values, getBus(), true, custom);
  
              } else if (o instanceof ProviderInfo) {
                  pi = (ProviderInfo<?>) o;
              } else {
                  pi = new ProviderInfo<Object>(o, getBus(), custom);
                  pi.setBusGlobal(busGlobal);
              }
  
              /**
               * then using EJB proxy to help CXF classify provider type
               */
              JaxRsFactoryBeanCustomizer beanCustomizer = InjectionRuntimeContextHelper.findBeanCustomizer(o.getClass(), getBus());
              if (beanCustomizer != null) {
                  Object proxyObject = beanCustomizer.onSetupProviderProxy(o, beanCustomizerContexts.get(createCustomizerKey(beanCustomizer)));
  
                  if (proxyObject != null && (proxyObject != o || !proxyObject.equals(o))) {
                      pi.setProvider(proxyObject);
                  }
              }
  
              if (beanCustomizer != null && DynamicFeature.class.isAssignableFrom(pi.getProvider().getClass())) {
                  Object newProviderInstance = beanCustomizer.onSingletonProviderInit(pi.getProvider(), beanCustomizerContexts.get(Integer.toString(beanCustomizer.hashCode())),
                                                                                      null);
                  if (newProviderInstance != null) {
                      pi.setProvider(newProviderInstance);
                  }
  
              }
  
              theProviders.add(pi);
          }
  
          return theProviders;
      }
docs: Liberty Change for CXF Begin