示例#1
0
  @Override
  protected void doStart() throws Exception {
    super.doStart();

    if (getPort() != 4567) {
      CamelSpark.port(getPort());
    } else {
      // if no explicit port configured, then use port from rest configuration
      RestConfiguration config = getCamelContext().getRestConfiguration("spark-rest", true);
      int port = config.getPort();
      if (port > 0) {
        CamelSpark.port(port);
      }
    }

    String host = getIpAddress();
    if (host != null) {
      CamelSpark.ipAddress(host);
    } else {
      // if no explicit port configured, then use port from rest configuration
      RestConfiguration config = getCamelContext().getRestConfiguration("spark-rest", true);
      host = config.getHost();
      if (ObjectHelper.isEmpty(host)) {
        if (config.getRestHostNameResolver() == RestConfiguration.RestHostNameResolver.allLocalIp) {
          host = "0.0.0.0";
        } else if (config.getRestHostNameResolver()
            == RestConfiguration.RestHostNameResolver.localHostName) {
          host = HostUtils.getLocalHostName();
        } else if (config.getRestHostNameResolver()
            == RestConfiguration.RestHostNameResolver.localIp) {
          host = HostUtils.getLocalIp();
        }
      }
      CamelSpark.ipAddress(host);
    }

    if (keystoreFile != null || truststoreFile != null) {
      CamelSpark.security(keystoreFile, keystorePassword, truststoreFile, truststorePassword);
    }

    // configure component options
    RestConfiguration config = getCamelContext().getRestConfiguration("spark-rest", true);
    // configure additional options on spark configuration
    if (config.getComponentProperties() != null && !config.getComponentProperties().isEmpty()) {
      setProperties(sparkConfiguration, config.getComponentProperties());
    }
  }
  @Override
  public Producer createProducer() throws Exception {
    RestApiProcessorFactory factory = null;

    RestConfiguration config = getCamelContext().getRestConfiguration(componentName, true);

    // lookup in registry
    Set<RestApiProcessorFactory> factories =
        getCamelContext().getRegistry().findByType(RestApiProcessorFactory.class);
    if (factories != null && factories.size() == 1) {
      factory = factories.iterator().next();
    }

    // lookup on classpath using factory finder to automatic find it (just add camel-swagger-java to
    // classpath etc)
    if (factory == null) {
      String name = apiComponentName != null ? apiComponentName : config.getApiComponent();
      if (name == null) {
        name = DEFAULT_API_COMPONENT_NAME;
      }
      try {
        FactoryFinder finder = getCamelContext().getFactoryFinder(RESOURCE_PATH);
        Object instance = finder.newInstance(name);
        if (instance instanceof RestApiProcessorFactory) {
          factory = (RestApiProcessorFactory) instance;
        }
      } catch (NoFactoryAvailableException e) {
        // ignore
      }
    }

    if (factory != null) {

      // if no explicit port/host configured, then use port from rest configuration
      String host = "";
      int port = 80;

      if (config.getHost() != null) {
        host = config.getHost();
      }
      int num = config.getPort();
      if (num > 0) {
        port = num;
      }

      // if no explicit hostname set then resolve the hostname
      if (ObjectHelper.isEmpty(host)) {
        if (config.getRestHostNameResolver() == RestConfiguration.RestHostNameResolver.allLocalIp) {
          host = "0.0.0.0";
        } else if (config.getRestHostNameResolver()
            == RestConfiguration.RestHostNameResolver.localHostName) {
          host = HostUtils.getLocalHostName();
        } else if (config.getRestHostNameResolver()
            == RestConfiguration.RestHostNameResolver.localIp) {
          host = HostUtils.getLocalIp();
        }

        // no host was configured so calculate a host to use
        // there should be no schema in the host (but only port)
        String targetHost = host + (port != 80 ? ":" + port : "");
        getParameters().put("host", targetHost);
      }

      // the base path should start with a leading slash
      String path = getPath();
      if (path != null && !path.startsWith("/")) {
        path = "/" + path;
      }

      // whether listing of the context id's is enabled or not
      boolean contextIdListing = config.isApiContextListing();

      Processor processor =
          factory.createApiProcessor(
              getCamelContext(),
              path,
              getContextIdPattern(),
              contextIdListing,
              config,
              getParameters());
      return new RestApiProducer(this, processor);
    } else {
      throw new IllegalStateException(
          "Cannot find RestApiProcessorFactory in Registry or classpath (such as the camel-swagger-java component)");
    }
  }