Search in sources :

Example 1 with RestApiProcessorFactory

use of org.apache.camel.spi.RestApiProcessorFactory in project camel by apache.

the class RestApiEndpoint method createProducer.

@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)");
    }
}
Also used : Processor(org.apache.camel.Processor) RestApiProcessorFactory(org.apache.camel.spi.RestApiProcessorFactory) NoFactoryAvailableException(org.apache.camel.NoFactoryAvailableException) RestConfiguration(org.apache.camel.spi.RestConfiguration) FactoryFinder(org.apache.camel.spi.FactoryFinder) DefaultEndpoint(org.apache.camel.impl.DefaultEndpoint) UriEndpoint(org.apache.camel.spi.UriEndpoint)

Aggregations

NoFactoryAvailableException (org.apache.camel.NoFactoryAvailableException)1 Processor (org.apache.camel.Processor)1 DefaultEndpoint (org.apache.camel.impl.DefaultEndpoint)1 FactoryFinder (org.apache.camel.spi.FactoryFinder)1 RestApiProcessorFactory (org.apache.camel.spi.RestApiProcessorFactory)1 RestConfiguration (org.apache.camel.spi.RestConfiguration)1 UriEndpoint (org.apache.camel.spi.UriEndpoint)1