Ejemplo n.º 1
0
  public synchronized ServerImpl getServer(String addr) {
    if (server == null) {
      checkProperties();

      ClassLoaderHolder loader = null;
      try {
        if (bus != null) {
          ClassLoader newLoader = bus.getExtension(ClassLoader.class);
          if (newLoader != null) {
            loader = ClassLoaderUtils.setThreadContextClassloader(newLoader);
          }
        }

        // Initialize the endpointName so we can do configureObject
        QName origEpn = endpointName;
        if (endpointName == null) {
          JaxWsImplementorInfo implInfo = new JaxWsImplementorInfo(getImplementorClass());
          endpointName = implInfo.getEndpointName();
        }

        if (serviceFactory != null) {
          serverFactory.setServiceFactory(serviceFactory);
        }

        /*if (serviceName != null) {
            serverFactory.getServiceFactory().setServiceName(serviceName);
        }*/

        configureObject(this);
        endpointName = origEpn;

        // Set up the server factory
        serverFactory.setAddress(addr);
        serverFactory.setStart(false);
        serverFactory.setEndpointName(endpointName);
        serverFactory.setServiceBean(implementor);
        serverFactory.setBus(bus);
        serverFactory.setFeatures(getFeatures());
        serverFactory.setInvoker(invoker);
        serverFactory.setSchemaLocations(schemaLocations);
        if (serverFactory.getProperties() != null) {
          serverFactory.getProperties().putAll(properties);
        } else {
          serverFactory.setProperties(properties);
        }

        // Be careful not to override any serverfactory settings as a user might
        // have supplied their own.
        if (getWsdlLocation() != null) {
          serverFactory.setWsdlURL(getWsdlLocation());
        }

        if (bindingUri != null) {
          serverFactory.setBindingId(bindingUri);
        }

        if (serviceName != null) {
          serverFactory.getServiceFactory().setServiceName(serviceName);
        }

        if (implementorClass != null) {
          serverFactory.setServiceClass(implementorClass);
        }

        if (executor != null) {
          serverFactory.getServiceFactory().setExecutor(executor);
        }
        if (handlers.size() > 0) {
          serverFactory.addHandlers(handlers);
        }

        configureObject(serverFactory);

        server = serverFactory.create();

        org.apache.cxf.endpoint.Endpoint endpoint = getEndpoint();
        if (in != null) {
          endpoint.getInInterceptors().addAll(in);
        }
        if (out != null) {
          endpoint.getOutInterceptors().addAll(out);
        }
        if (inFault != null) {
          endpoint.getInFaultInterceptors().addAll(inFault);
        }
        if (outFault != null) {
          endpoint.getOutFaultInterceptors().addAll(outFault);
        }

        if (properties != null) {
          endpoint.putAll(properties);
        }

        configureObject(endpoint.getService());
        configureObject(endpoint);
        this.service = endpoint.getService();

        if (getWsdlLocation() == null) {
          // hold onto the wsdl location so cache won't clear till we go away
          setWsdlLocation(serverFactory.getWsdlURL());
        }

        if (serviceName == null) {
          setServiceName(serverFactory.getServiceFactory().getServiceQName());
        }
        if (endpointName == null) {
          endpointName = endpoint.getEndpointInfo().getName();
        }
      } finally {
        if (loader != null) {
          loader.reset();
        }
      }
    }
    return (ServerImpl) server;
  }