docs: private WsByteBufferPoolManager createBufferManager(Map<String, Object> config) {
          WsBBConfigException configError = null;
          Object oClass = config.get("class");
          if (null != oClass && oClass instanceof String) {
              // bundle is specifying a custom class
              String className = (String) oClass;
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "Pool class: " + className);
              }
              config.remove("class");
              Class<?> clazz = null;
              try {
                  // ClassLoader cl = Thread.currentThread().getContextClassLoader();
                  ClassLoader cl = ByteBufferConfiguration.class.getClassLoader();
                  if (null != cl) {
                      clazz = cl.loadClass(className);
                  }
              } catch (Exception e) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(this, tc, "Class load failed using loader: " + e);
                  }
                  try {
                      clazz = Class.forName(className,
                                            true,
                                            Thread.currentThread().getContextClassLoader());
                  } catch (Exception e2) {
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                          Tr.debug(this, tc, "Class load failed using Class.forName: " + e2);
                      }
                  }
              }
  
              if (null != clazz) {
                  try {
                      Constructor<?> c = clazz.getConstructor(new Class[] { Map.class });
                      return (WsByteBufferPoolManager) c.newInstance(new Object[] { config });
                  } catch (Exception e) {
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                          Tr.debug(this, tc, "New instance of class " + clazz + " failed: " + e.getCause());
                      }
                      if (e.getCause() instanceof WsBBConfigException) {
                          configError = (WsBBConfigException) e.getCause();
                      }
                  }
              }
          }
  
          // try the default class with the configuration (assuming that
          // config did not previously fail)
          if (null == configError) {
              try {
                  return new WsByteBufferPoolManagerImpl(directByteBufferHelper, config);
              } catch (WsBBConfigException e) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) {
                      Tr.event(this, tc, "Error in configuration: " + e);
                  }
              }
          }
          // if we failed to create the manager by now, it was due to bad
          // configuration
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(this, tc, "Using default pool class with default config");
          }
          try {
              return new WsByteBufferPoolManagerImpl(directByteBufferHelper);
          } catch (WsBBConfigException e) {
              // shouldn't be possible with default config...
              FFDCFilter.processException(e, getClass().getName() + ".createBufferManager", "2");
              if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) {
                  Tr.event(this, tc, "Failure to create buffer manager: " + e);
              }
              return null;
          }
      }