docs: public WSEJBEndpointManager createWebServiceEndpointManager(J2EEName j2eeName,
                                                                  Class<?> provider, // d492780, F87951
                                                                  Method[] methods) throws EJBException, EJBConfigurationException {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled(); // d532639.2
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(tc, "createWebServiceEndpointManager : " + j2eeName,
                       new Object[] { provider, methods });
  
          EJSHome home = (EJSHome) homeOfHomes.getHome(j2eeName);
  
          // If a WebService request comes in after a home has been uninstalled,
          // then it won't be found.                                         d547849
          if (home == null) {
              if (isTraceOn && tc.isEntryEnabled())
                  Tr.exit(tc, "createWebServiceEndpointManager could not find home for : " +
                              j2eeName);
              throw ExceptionUtil.EJBException("Unable to find EJB component: " + j2eeName, null);
          }
  
          BeanMetaData bmd = home.beanMetaData;
          Method[] endpointMethods = methods;
  
          // -----------------------------------------------------------------------
          // If this is the first time the endpoint has been accessed,
          // then resolve the methods to insure this is a valid configuration
          // and JITDeploy the WSEJBProxy class if there are around invoke
          // interceptors.                                                   d497921
          // -----------------------------------------------------------------------
          synchronized (bmd) {
              if (!bmd.ivWebServiceEndpointCreated) {
                  if (provider != null) {
                      // The Web Service Endpoint Interface from ejb-jar.xml is for
                      // JAX-RPC, and cannot be used with a JAX-WS Provider.
                      if (bmd.webserviceEndpointInterfaceClass != null) {
                          // Log the error and throw meaningful exception.
                          Tr.error(tc, "WS_ENDPOINT_PROVIDER_CONFLICT_CNTR0176E",
                                   new Object[] { bmd.webserviceEndpointInterfaceClass.getName(),
                                                  bmd.j2eeName.getComponent(),
                                                  bmd.j2eeName.getModule(),
                                                  bmd.j2eeName.getApplication() });
                          throw new EJBConfigurationException("Web Service Provider interface conflicts with the " +
                                                              "configured Web Service Endpoint interface " +
                                                              bmd.webserviceEndpointInterfaceClass.getName() +
                                                              " for the " + bmd.j2eeName.getComponent() +
                                                              " bean in the " + bmd.j2eeName.getModule() +
                                                              " module of the " + bmd.j2eeName.getApplication() +
                                                              " application.");
                      }
  
                      endpointMethods = provider.getMethods();
  
                      if (isTraceOn && tc.isDebugEnabled())
                          Tr.debug(tc, "provider methods : ", (Object[]) endpointMethods);
                  }
  
                  // Resolve the Web Service Endpoint methods.  This will make sure that
                  // the bean actually implements the methods, but will also remove any
                  // excess methodInfos for the webservice endpoint interface in BMD.
                  // Until now, EJBContainer is not aware of what the endpoint methods
                  // are, so assumes all methods on the bean may be endpoint methods.
                  boolean hasAroundInvoke = WSEJBWrapper.resolveWebServiceEndpointMethods(bmd, endpointMethods);
  
                  // Finally, if any of the methods have around invoke interceptors,
                  // then a WSEJBProxy must be created by JITDeploy.  An instance of
                  // the proxy will be returned to WebServices component to invoke
                  // the bean method, instead of an actual bean instance.
                  if (hasAroundInvoke) {
                      try {
                          bmd.ivWebServiceEndpointProxyClass = JITDeploy.generateWSEJBProxy(bmd.classLoader,
                                                                                            bmd.ivWebServiceEndpointProxyName,
                                                                                            provider,
                                                                                            endpointMethods,
                                                                                            bmd.wsEndpointMethodInfos,
                                                                                            bmd.enterpriseBeanClassName,
                                                                                            bmd.j2eeName.toString(),
                                                                                            getEJBRuntime().getClassDefiner()); // F70650
                      } catch (ClassNotFoundException ex) {
                          // Log the error and throw meaningful exception.
                          Tr.error(tc, "WS_EJBPROXY_FAILURE_CNTR0177E",
                                   new Object[] { bmd.j2eeName.getComponent(),
                                                  bmd.j2eeName.getModule(),
                                                  bmd.j2eeName.getApplication(),
                                                  ex });
                          throw ExceptionUtil.EJBException("Failure occurred attempting to create a Web service " +
                                                           "endpoint proxy for the " + bmd.j2eeName.getComponent() +
                                                           " bean in the " + bmd.j2eeName.getModule() +
                                                           " module of the " + bmd.j2eeName.getApplication() +
                                                           " application.", ex);
                      }
                  }
  
                  bmd.ivWebServiceEndpointCreated = true;
  
                  // Dump the BeanMetaData now that the endpoint methodinfos are set.
                  bmd.dump();
              }
          } // end synchronization                                        d521886
  
          // -----------------------------------------------------------------------
          // Create a new instance of the generic Web Services Endpoint EJB Wrapper,
          // and initialize it specific to the requested bean type.
          // -----------------------------------------------------------------------
  
          WSEJBWrapper wrapper = new WSEJBWrapper();
  
          wrapper.container = this;
          wrapper.wrapperManager = wrapperManager;
          wrapper.ivCommon = null; // Not cached
          wrapper.isManagedWrapper = false; // Not managed
          wrapper.ivInterface = WrapperInterface.SERVICE_ENDPOINT;
  
          // Now, fill in the home specific information.
          wrapper.beanId = home.ivStatelessId;
          wrapper.bmd = bmd;
          wrapper.methodInfos = bmd.wsEndpointMethodInfos;
          wrapper.methodNames = bmd.wsEndpointMethodNames;
          wrapper.isolationAttrs = null; // not used for EJB 2.x
          wrapper.ivPmiBean = home.pmiBean;
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(tc, "createWebServiceEndpointManager : " + wrapper);
  
          return wrapper;
      }