001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.camel.impl.lw;
018
019import java.io.IOException;
020import java.io.InputStream;
021import java.util.ArrayList;
022import java.util.Collection;
023import java.util.Collections;
024import java.util.Date;
025import java.util.List;
026import java.util.Map;
027import java.util.Set;
028import java.util.concurrent.ScheduledExecutorService;
029import java.util.concurrent.TimeUnit;
030import java.util.stream.Collectors;
031
032import org.apache.camel.CamelContext;
033import org.apache.camel.CamelContextAware;
034import org.apache.camel.CatalogCamelContext;
035import org.apache.camel.Component;
036import org.apache.camel.ConsumerTemplate;
037import org.apache.camel.Endpoint;
038import org.apache.camel.ErrorHandlerFactory;
039import org.apache.camel.ExchangeConstantProvider;
040import org.apache.camel.Experimental;
041import org.apache.camel.ExtendedCamelContext;
042import org.apache.camel.FluentProducerTemplate;
043import org.apache.camel.GlobalEndpointConfiguration;
044import org.apache.camel.IsSingleton;
045import org.apache.camel.LoggingLevel;
046import org.apache.camel.NoSuchEndpointException;
047import org.apache.camel.NoSuchLanguageException;
048import org.apache.camel.Processor;
049import org.apache.camel.ProducerTemplate;
050import org.apache.camel.ResolveEndpointFailedException;
051import org.apache.camel.Route;
052import org.apache.camel.RouteConfigurationsBuilder;
053import org.apache.camel.RouteTemplateContext;
054import org.apache.camel.RoutesBuilder;
055import org.apache.camel.RuntimeCamelException;
056import org.apache.camel.Service;
057import org.apache.camel.ServiceStatus;
058import org.apache.camel.ShutdownRoute;
059import org.apache.camel.ShutdownRunningTask;
060import org.apache.camel.StartupListener;
061import org.apache.camel.StartupSummaryLevel;
062import org.apache.camel.TypeConverter;
063import org.apache.camel.ValueHolder;
064import org.apache.camel.catalog.RuntimeCamelCatalog;
065import org.apache.camel.console.DevConsoleResolver;
066import org.apache.camel.health.HealthCheckResolver;
067import org.apache.camel.impl.converter.CoreTypeConverterRegistry;
068import org.apache.camel.impl.engine.DefaultComponentResolver;
069import org.apache.camel.impl.engine.DefaultDataFormatResolver;
070import org.apache.camel.impl.engine.DefaultLanguageResolver;
071import org.apache.camel.spi.AnnotationBasedProcessorFactory;
072import org.apache.camel.spi.AsyncProcessorAwaitManager;
073import org.apache.camel.spi.BeanIntrospection;
074import org.apache.camel.spi.BeanProcessorFactory;
075import org.apache.camel.spi.BeanProxyFactory;
076import org.apache.camel.spi.BootstrapCloseable;
077import org.apache.camel.spi.CamelBeanPostProcessor;
078import org.apache.camel.spi.CamelContextNameStrategy;
079import org.apache.camel.spi.CamelDependencyInjectionAnnotationFactory;
080import org.apache.camel.spi.ClassResolver;
081import org.apache.camel.spi.CliConnectorFactory;
082import org.apache.camel.spi.ComponentNameResolver;
083import org.apache.camel.spi.ComponentResolver;
084import org.apache.camel.spi.ConfigurerResolver;
085import org.apache.camel.spi.DataFormat;
086import org.apache.camel.spi.DataFormatResolver;
087import org.apache.camel.spi.DataType;
088import org.apache.camel.spi.Debugger;
089import org.apache.camel.spi.DeferServiceFactory;
090import org.apache.camel.spi.EndpointRegistry;
091import org.apache.camel.spi.EndpointStrategy;
092import org.apache.camel.spi.EndpointUriFactory;
093import org.apache.camel.spi.ExchangeFactory;
094import org.apache.camel.spi.ExchangeFactoryManager;
095import org.apache.camel.spi.ExecutorServiceManager;
096import org.apache.camel.spi.FactoryFinder;
097import org.apache.camel.spi.FactoryFinderResolver;
098import org.apache.camel.spi.HeadersMapFactory;
099import org.apache.camel.spi.InflightRepository;
100import org.apache.camel.spi.Injector;
101import org.apache.camel.spi.InterceptEndpointFactory;
102import org.apache.camel.spi.InterceptSendToEndpoint;
103import org.apache.camel.spi.InterceptStrategy;
104import org.apache.camel.spi.InternalProcessorFactory;
105import org.apache.camel.spi.Language;
106import org.apache.camel.spi.LanguageResolver;
107import org.apache.camel.spi.LifecycleStrategy;
108import org.apache.camel.spi.LogListener;
109import org.apache.camel.spi.ManagementMBeanAssembler;
110import org.apache.camel.spi.ManagementNameStrategy;
111import org.apache.camel.spi.ManagementStrategy;
112import org.apache.camel.spi.MessageHistoryFactory;
113import org.apache.camel.spi.ModelJAXBContextFactory;
114import org.apache.camel.spi.ModelToXMLDumper;
115import org.apache.camel.spi.ModelineFactory;
116import org.apache.camel.spi.NodeIdFactory;
117import org.apache.camel.spi.NormalizedEndpointUri;
118import org.apache.camel.spi.PackageScanClassResolver;
119import org.apache.camel.spi.PackageScanResourceResolver;
120import org.apache.camel.spi.PeriodTaskResolver;
121import org.apache.camel.spi.PeriodTaskScheduler;
122import org.apache.camel.spi.ProcessorExchangeFactory;
123import org.apache.camel.spi.ProcessorFactory;
124import org.apache.camel.spi.PropertiesComponent;
125import org.apache.camel.spi.ReactiveExecutor;
126import org.apache.camel.spi.Registry;
127import org.apache.camel.spi.ResourceLoader;
128import org.apache.camel.spi.RestBindingJaxbDataFormatFactory;
129import org.apache.camel.spi.RestConfiguration;
130import org.apache.camel.spi.RestRegistry;
131import org.apache.camel.spi.RouteController;
132import org.apache.camel.spi.RouteFactory;
133import org.apache.camel.spi.RoutePolicyFactory;
134import org.apache.camel.spi.RouteStartupOrder;
135import org.apache.camel.spi.RoutesLoader;
136import org.apache.camel.spi.RuntimeEndpointRegistry;
137import org.apache.camel.spi.ShutdownStrategy;
138import org.apache.camel.spi.StartupStepRecorder;
139import org.apache.camel.spi.StreamCachingStrategy;
140import org.apache.camel.spi.SupervisingRouteController;
141import org.apache.camel.spi.Tracer;
142import org.apache.camel.spi.Transformer;
143import org.apache.camel.spi.TransformerRegistry;
144import org.apache.camel.spi.TypeConverterRegistry;
145import org.apache.camel.spi.UnitOfWorkFactory;
146import org.apache.camel.spi.UriFactoryResolver;
147import org.apache.camel.spi.UuidGenerator;
148import org.apache.camel.spi.Validator;
149import org.apache.camel.spi.ValidatorRegistry;
150import org.apache.camel.spi.XMLRoutesDefinitionLoader;
151import org.apache.camel.support.CamelContextHelper;
152import org.apache.camel.support.NormalizedUri;
153import org.apache.camel.support.jsse.SSLContextParameters;
154import org.apache.camel.util.IOHelper;
155import org.apache.camel.util.ObjectHelper;
156import org.apache.camel.util.StringHelper;
157import org.apache.camel.util.TimeUtils;
158import org.apache.camel.util.URISupport;
159import org.apache.camel.vault.VaultConfiguration;
160import org.slf4j.Logger;
161import org.slf4j.LoggerFactory;
162
163@Experimental
164public class LightweightRuntimeCamelContext implements ExtendedCamelContext, CatalogCamelContext {
165
166    private static final Logger LOG = LoggerFactory.getLogger(LightweightRuntimeCamelContext.class);
167
168    private final CamelContext reference;
169    private final Registry registry;
170    private final CoreTypeConverterRegistry typeConverter;
171    private final ModelJAXBContextFactory modelJAXBContextFactory;
172    private final ComponentResolver componentResolver;
173    private final ComponentNameResolver componentNameResolver;
174    private final LanguageResolver languageResolver;
175    private final DataFormatResolver dataFormatResolver;
176    private final HealthCheckResolver healthCheckResolver;
177    private final DevConsoleResolver devConsoleResolver;
178    private final UuidGenerator uuidGenerator;
179    private final EndpointRegistry<? extends ValueHolder<String>> endpoints;
180    private final Map<String, Component> components;
181    private final Map<String, Language> languages;
182    private final PropertiesComponent propertiesComponent;
183    private final BeanIntrospection beanIntrospection;
184    private final CamelBeanPostProcessor beanPostProcessor;
185    private final CamelDependencyInjectionAnnotationFactory dependencyInjectionAnnotationFactory;
186    private final HeadersMapFactory headersMapFactory;
187    private final CliConnectorFactory cliConnectorFactory;
188    private final ExchangeFactory exchangeFactory;
189    private final ExchangeFactoryManager exchangeFactoryManager;
190    private final ProcessorExchangeFactory processorExchangeFactory;
191    private final ModelineFactory modelineFactory;
192    private final ReactiveExecutor reactiveExecutor;
193    private final AsyncProcessorAwaitManager asyncProcessorAwaitManager;
194    private final ExecutorServiceManager executorServiceManager;
195    private final ShutdownStrategy shutdownStrategy;
196    private final ClassLoader applicationContextClassLoader;
197    private final UnitOfWorkFactory unitOfWorkFactory;
198    private final RouteController routeController;
199    private final ProcessorFactory processorFactory;
200    private final InternalProcessorFactory internalProcessorFactory;
201    private final InflightRepository inflightRepository;
202    private final PeriodTaskResolver periodTaskResolver;
203    private final PeriodTaskScheduler periodTaskScheduler;
204    private final Injector injector;
205    private final ClassResolver classResolver;
206    private final Map<String, String> globalOptions;
207    private final String name;
208    private final String description;
209    private final boolean eventNotificationApplicable;
210    private final boolean useDataType;
211    private final boolean useBreadcrumb;
212    private final boolean dumpRoutes;
213    private final String mdcLoggingKeysPattern;
214    private final boolean useMDCLogging;
215    private final String basePackageScan;
216    private final List<Route> routes;
217    private final boolean messageHistory;
218    private final boolean allowUseOriginalMessage;
219    private final boolean logExhaustedMessageBody;
220    private final String version;
221    private Date startDate;
222    private StartupSummaryLevel startupSummaryLevel;
223
224    LightweightRuntimeCamelContext(CamelContext reference, CamelContext context) {
225        this.reference = reference;
226        registry = context.getRegistry();
227        typeConverter = new CoreTypeConverterRegistry(context.getTypeConverterRegistry());
228        modelJAXBContextFactory = context.adapt(ExtendedCamelContext.class).getModelJAXBContextFactory();
229        routes = Collections.unmodifiableList(context.getRoutes());
230        uuidGenerator = context.getUuidGenerator();
231        componentResolver = context.adapt(ExtendedCamelContext.class).getComponentResolver();
232        componentNameResolver = context.adapt(ExtendedCamelContext.class).getComponentNameResolver();
233        languageResolver = context.adapt(ExtendedCamelContext.class).getLanguageResolver();
234        dataFormatResolver = context.adapt(ExtendedCamelContext.class).getDataFormatResolver();
235        healthCheckResolver = context.adapt(ExtendedCamelContext.class).getHealthCheckResolver();
236        devConsoleResolver = context.adapt(ExtendedCamelContext.class).getDevConsoleResolver();
237        endpoints = context.getEndpointRegistry();
238        components = context.getComponentNames().stream().collect(Collectors.toMap(s -> s, context::hasComponent));
239        languages = context.getLanguageNames().stream().collect(Collectors.toMap(s -> s, context::resolveLanguage));
240        propertiesComponent = context.getPropertiesComponent();
241        beanIntrospection = context.adapt(ExtendedCamelContext.class).getBeanIntrospection();
242        beanPostProcessor = context.adapt(ExtendedCamelContext.class).getBeanPostProcessor();
243        dependencyInjectionAnnotationFactory
244                = context.adapt(ExtendedCamelContext.class).getDependencyInjectionAnnotationFactory();
245        headersMapFactory = context.adapt(ExtendedCamelContext.class).getHeadersMapFactory();
246        cliConnectorFactory = context.adapt(ExtendedCamelContext.class).getCliConnectorFactory();
247        exchangeFactory = context.adapt(ExtendedCamelContext.class).getExchangeFactory();
248        exchangeFactoryManager = context.adapt(ExtendedCamelContext.class).getExchangeFactoryManager();
249        modelineFactory = context.adapt(ExtendedCamelContext.class).getModelineFactory();
250        processorExchangeFactory = context.adapt(ExtendedCamelContext.class).getProcessorExchangeFactory();
251        reactiveExecutor = context.adapt(ExtendedCamelContext.class).getReactiveExecutor();
252        asyncProcessorAwaitManager = context.adapt(ExtendedCamelContext.class).getAsyncProcessorAwaitManager();
253        executorServiceManager = context.getExecutorServiceManager();
254        shutdownStrategy = context.getShutdownStrategy();
255        applicationContextClassLoader = context.getApplicationContextClassLoader();
256        unitOfWorkFactory = context.adapt(ExtendedCamelContext.class).getUnitOfWorkFactory();
257        processorFactory = context.adapt(ExtendedCamelContext.class).getProcessorFactory();
258        internalProcessorFactory = context.adapt(ExtendedCamelContext.class).getInternalProcessorFactory();
259        routeController = context.getRouteController();
260        inflightRepository = context.getInflightRepository();
261        periodTaskResolver = context.adapt(ExtendedCamelContext.class).getPeriodTaskResolver();
262        periodTaskScheduler = context.adapt(ExtendedCamelContext.class).getPeriodTaskScheduler();
263        globalOptions = context.getGlobalOptions();
264        injector = context.getInjector();
265        classResolver = context.getClassResolver();
266        name = context.getName();
267        description = context.adapt(ExtendedCamelContext.class).getDescription();
268        eventNotificationApplicable = context.adapt(ExtendedCamelContext.class).isEventNotificationApplicable();
269        useDataType = context.isUseDataType();
270        useBreadcrumb = context.isUseBreadcrumb();
271        dumpRoutes = context.isDumpRoutes();
272        mdcLoggingKeysPattern = context.getMDCLoggingKeysPattern();
273        useMDCLogging = context.isUseMDCLogging();
274        basePackageScan = context.adapt(ExtendedCamelContext.class).getBasePackageScan();
275        messageHistory = context.isMessageHistory();
276        allowUseOriginalMessage = context.isAllowUseOriginalMessage();
277        logExhaustedMessageBody = context.isLogExhaustedMessageBody();
278        version = context.getVersion();
279        startupSummaryLevel = context.getStartupSummaryLevel();
280    }
281
282    /**
283     * Normalize uri so we can do endpoint hits with minor mistakes and parameters is not in the same order.
284     *
285     * @param  uri                            the uri
286     * @return                                normalized uri
287     * @throws ResolveEndpointFailedException if uri cannot be normalized
288     */
289    protected static String normalizeEndpointUri(String uri) {
290        try {
291            uri = URISupport.normalizeUri(uri);
292        } catch (Exception e) {
293            throw new ResolveEndpointFailedException(uri, e);
294        }
295        return uri;
296    }
297
298    //
299    // Lifecycle
300    //
301
302    public CamelContext getCamelContextReference() {
303        return reference;
304    }
305
306    @Override
307    public byte getStatusPhase() {
308        return reference.adapt(ExtendedCamelContext.class).getStatusPhase();
309    }
310
311    @Override
312    public void disposeModel() {
313        // noop
314    }
315
316    @Override
317    public boolean isStarted() {
318        return false;
319    }
320
321    @Override
322    public boolean isStarting() {
323        return false;
324    }
325
326    @Override
327    public boolean isStopped() {
328        return false;
329    }
330
331    @Override
332    public boolean isStopping() {
333        return false;
334    }
335
336    @Override
337    public boolean isSuspended() {
338        return false;
339    }
340
341    @Override
342    public boolean isRunAllowed() {
343        return false;
344    }
345
346    @Override
347    public boolean isSuspending() {
348        return false;
349    }
350
351    @Override
352    public void build() {
353        throw new UnsupportedOperationException();
354    }
355
356    @Override
357    public void init() {
358        throw new UnsupportedOperationException();
359    }
360
361    @Override
362    public void suspend() {
363        throw new UnsupportedOperationException();
364    }
365
366    @Override
367    public void resume() {
368        throw new UnsupportedOperationException();
369    }
370
371    @Override
372    public void start() {
373        startDate = new Date();
374        LOG.info("Apache Camel {} ({}) is starting", getVersion(), getName());
375        for (Route route : routes) {
376            route.getConsumer().start();
377        }
378        if (LOG.isInfoEnabled()) {
379            long l = System.currentTimeMillis() - startDate.getTime();
380            LOG.info("Apache Camel {} ({}) {} routes started in {}",
381                    getVersion(), getName(), routes.size(), TimeUtils.printDuration(l, true));
382        }
383    }
384
385    @Override
386    public void stop() {
387        for (Route route : routes) {
388            route.getConsumer().stop();
389        }
390    }
391
392    @Override
393    public void shutdown() {
394    }
395
396    //
397    // RuntimeConfig
398    //
399
400    @Override
401    public void close() throws IOException {
402        stop();
403    }
404
405    @Override
406    public void setStreamCaching(Boolean cache) {
407        throw new UnsupportedOperationException();
408    }
409
410    @Override
411    public Boolean isStreamCaching() {
412        throw new UnsupportedOperationException();
413    }
414
415    @Override
416    public Boolean isTracing() {
417        throw new UnsupportedOperationException();
418    }
419
420    @Override
421    public String getTracingPattern() {
422        throw new UnsupportedOperationException();
423    }
424
425    @Override
426    public void setTracingPattern(String tracePattern) {
427        throw new UnsupportedOperationException();
428    }
429
430    @Override
431    public String getTracingLoggingFormat() {
432        throw new UnsupportedOperationException();
433    }
434
435    @Override
436    public void setTracingLoggingFormat(String format) {
437        throw new UnsupportedOperationException();
438    }
439
440    @Override
441    public Boolean isBacklogTracing() {
442        throw new UnsupportedOperationException();
443    }
444
445    @Override
446    public Boolean isDebugging() {
447        throw new UnsupportedOperationException();
448    }
449
450    @Override
451    public Boolean isMessageHistory() {
452        return messageHistory;
453    }
454
455    @Override
456    public Boolean isLogMask() {
457        throw new UnsupportedOperationException();
458    }
459
460    @Override
461    public Boolean isLogExhaustedMessageBody() {
462        return logExhaustedMessageBody;
463    }
464
465    @Override
466    public Long getDelayer() {
467        throw new UnsupportedOperationException();
468    }
469
470    @Override
471    public void setDelayer(Long delay) {
472        throw new UnsupportedOperationException();
473    }
474
475    @Override
476    public Boolean isAutoStartup() {
477        throw new UnsupportedOperationException();
478    }
479
480    @Override
481    public ShutdownRoute getShutdownRoute() {
482        throw new UnsupportedOperationException();
483    }
484
485    @Override
486    public void setShutdownRoute(ShutdownRoute shutdownRoute) {
487        throw new UnsupportedOperationException();
488    }
489
490    @Override
491    public ShutdownRunningTask getShutdownRunningTask() {
492        throw new UnsupportedOperationException();
493    }
494
495    //
496    // Model
497    //
498
499    @Override
500    public void setShutdownRunningTask(ShutdownRunningTask shutdownRunningTask) {
501        throw new UnsupportedOperationException();
502    }
503
504    @Override
505    public void setAllowUseOriginalMessage(Boolean allowUseOriginalMessage) {
506        throw new UnsupportedOperationException();
507    }
508
509    @Override
510    public Boolean isAllowUseOriginalMessage() {
511        return allowUseOriginalMessage;
512    }
513
514    @Override
515    public Boolean isCaseInsensitiveHeaders() {
516        throw new UnsupportedOperationException();
517    }
518
519    @Override
520    public void setCaseInsensitiveHeaders(Boolean caseInsensitiveHeaders) {
521        throw new UnsupportedOperationException();
522    }
523
524    @Override
525    public Boolean isAutowiredEnabled() {
526        throw new UnsupportedOperationException();
527    }
528
529    @Override
530    public void setAutowiredEnabled(Boolean autowiredEnabled) {
531        throw new UnsupportedOperationException();
532    }
533
534    @Override
535    public Registry getRegistry() {
536        return registry;
537    }
538
539    @Override
540    public void setRegistry(Registry registry) {
541        throw new UnsupportedOperationException();
542    }
543
544    @Override
545    public TypeConverterRegistry getTypeConverterRegistry() {
546        return typeConverter;
547    }
548
549    @Override
550    public void setTypeConverterRegistry(TypeConverterRegistry typeConverterRegistry) {
551        throw new UnsupportedOperationException();
552    }
553
554    @Override
555    public ModelJAXBContextFactory getModelJAXBContextFactory() {
556        return modelJAXBContextFactory;
557    }
558
559    @Override
560    public void setModelJAXBContextFactory(ModelJAXBContextFactory modelJAXBContextFactory) {
561        throw new UnsupportedOperationException();
562    }
563
564    @Override
565    public ComponentResolver getComponentResolver() {
566        return componentResolver;
567    }
568
569    @Override
570    public void setComponentResolver(ComponentResolver componentResolver) {
571        throw new UnsupportedOperationException();
572    }
573
574    @Override
575    public ComponentNameResolver getComponentNameResolver() {
576        return componentNameResolver;
577    }
578
579    @Override
580    public void setComponentNameResolver(ComponentNameResolver componentResolver) {
581        throw new UnsupportedOperationException();
582    }
583
584    @Override
585    public LanguageResolver getLanguageResolver() {
586        return languageResolver;
587    }
588
589    @Override
590    public void setLanguageResolver(LanguageResolver languageResolver) {
591        throw new UnsupportedOperationException();
592    }
593
594    @Override
595    public DataFormatResolver getDataFormatResolver() {
596        return dataFormatResolver;
597    }
598
599    @Override
600    public void setDataFormatResolver(DataFormatResolver dataFormatResolver) {
601        throw new UnsupportedOperationException();
602    }
603
604    @Override
605    public HealthCheckResolver getHealthCheckResolver() {
606        return healthCheckResolver;
607    }
608
609    @Override
610    public void setHealthCheckResolver(HealthCheckResolver healthCheckResolver) {
611        throw new UnsupportedOperationException();
612    }
613
614    @Override
615    public DevConsoleResolver getDevConsoleResolver() {
616        return devConsoleResolver;
617    }
618
619    @Override
620    public void setDevConsoleResolver(DevConsoleResolver devConsoleResolver) {
621        throw new UnsupportedOperationException();
622    }
623
624    @Override
625    public UuidGenerator getUuidGenerator() {
626        return uuidGenerator;
627    }
628
629    @Override
630    public void setUuidGenerator(UuidGenerator uuidGenerator) {
631        throw new UnsupportedOperationException();
632    }
633
634    @Override
635    public <T extends CamelContext> T adapt(Class<T> type) {
636        if (type.isInstance(this)) {
637            return type.cast(this);
638        }
639        throw new UnsupportedOperationException();
640    }
641
642    @Override
643    public <T> T getExtension(Class<T> type) {
644        throw new UnsupportedOperationException();
645    }
646
647    @Override
648    public <T> void setExtension(Class<T> type, T module) {
649        throw new UnsupportedOperationException();
650    }
651
652    @Override
653    public boolean isVetoStarted() {
654        throw new UnsupportedOperationException();
655    }
656
657    @Override
658    public String getName() {
659        return name;
660    }
661
662    @Override
663    public void setName(String name) {
664        throw new UnsupportedOperationException();
665    }
666
667    @Override
668    public String getDescription() {
669        return description;
670    }
671
672    @Override
673    public void setDescription(String description) {
674        throw new UnsupportedOperationException();
675    }
676
677    @Override
678    public CamelContextNameStrategy getNameStrategy() {
679        throw new UnsupportedOperationException();
680    }
681
682    @Override
683    public void setNameStrategy(CamelContextNameStrategy nameStrategy) {
684        throw new UnsupportedOperationException();
685    }
686
687    @Override
688    public ManagementNameStrategy getManagementNameStrategy() {
689        throw new UnsupportedOperationException();
690    }
691
692    @Override
693    public void setManagementNameStrategy(ManagementNameStrategy nameStrategy) {
694        throw new UnsupportedOperationException();
695    }
696
697    @Override
698    public String getManagementName() {
699        throw new UnsupportedOperationException();
700    }
701
702    @Override
703    public void setManagementName(String name) {
704        throw new UnsupportedOperationException();
705    }
706
707    @Override
708    public String getVersion() {
709        return version;
710    }
711
712    @Override
713    public ServiceStatus getStatus() {
714        return ServiceStatus.Started;
715    }
716
717    @Override
718    public String getUptime() {
719        long delta = getUptimeMillis();
720        if (delta == 0) {
721            return "";
722        }
723        return TimeUtils.printDuration(delta);
724    }
725
726    @Override
727    public long getUptimeMillis() {
728        if (startDate == null) {
729            return 0;
730        }
731        return new Date().getTime() - startDate.getTime();
732    }
733
734    @Override
735    public Date getStartDate() {
736        return startDate;
737    }
738
739    @Override
740    public void addService(Object object) throws Exception {
741    }
742
743    @Override
744    public void addService(Object object, boolean stopOnShutdown) throws Exception {
745
746    }
747
748    @Override
749    public void addService(Object object, boolean stopOnShutdown, boolean forceStart) throws Exception {
750
751    }
752
753    @Override
754    public void addPrototypeService(Object object) throws Exception {
755
756    }
757
758    @Override
759    public boolean removeService(Object object) throws Exception {
760        return false;
761    }
762
763    @Override
764    public void addBootstrap(BootstrapCloseable bootstrap) {
765    }
766
767    @Override
768    public List<Service> getServices() {
769        return null;
770    }
771
772    @Override
773    public boolean hasService(Object object) {
774        return false;
775    }
776
777    @Override
778    public <T> T hasService(Class<T> type) {
779        return null;
780    }
781
782    @Override
783    public <T> Set<T> hasServices(Class<T> type) {
784        return null;
785    }
786
787    @Override
788    public void deferStartService(Object object, boolean stopOnShutdown) throws Exception {
789    }
790
791    @Override
792    public void addStartupListener(StartupListener listener) throws Exception {
793    }
794
795    @Override
796    public Component hasComponent(String componentName) {
797        return components.get(componentName);
798    }
799
800    @Override
801    public Component getComponent(String componentName) {
802        return getComponent(name, true, true);
803    }
804
805    @Override
806    public Component getComponent(String name, boolean autoCreateComponents) {
807        return getComponent(name, autoCreateComponents, true);
808    }
809
810    @Override
811    public Component getComponent(String name, boolean autoCreateComponents, boolean autoStart) {
812        return components.get(name);
813    }
814
815    @Override
816    public <T extends Component> T getComponent(String name, Class<T> componentType) {
817        return componentType.cast(hasComponent(name));
818    }
819
820    @Override
821    public Set<String> getComponentNames() {
822        return Collections.unmodifiableSet(components.keySet());
823    }
824
825    @Override
826    public EndpointRegistry<? extends ValueHolder<String>> getEndpointRegistry() {
827        return endpoints;
828    }
829
830    @Override
831    public Endpoint getEndpoint(String uri) {
832        return doGetEndpoint(uri, false, false);
833    }
834
835    @Override
836    public Endpoint getEndpoint(String uri, Map<String, Object> parameters) {
837        return doGetEndpoint(uri, parameters, false);
838    }
839
840    @Override
841    public <T extends Endpoint> T getEndpoint(String name, Class<T> endpointType) {
842        Endpoint endpoint = getEndpoint(name);
843        if (endpoint == null) {
844            throw new NoSuchEndpointException(name);
845        }
846        if (endpoint instanceof InterceptSendToEndpoint) {
847            endpoint = ((InterceptSendToEndpoint) endpoint).getOriginalEndpoint();
848        }
849        if (endpointType.isInstance(endpoint)) {
850            return endpointType.cast(endpoint);
851        } else {
852            throw new IllegalArgumentException(
853                    "The endpoint is not of type: " + endpointType + " but is: " + endpoint.getClass().getCanonicalName());
854        }
855    }
856
857    @Override
858    public Collection<Endpoint> getEndpoints() {
859        return new ArrayList<>(endpoints.values());
860    }
861
862    @Override
863    public Map<String, Endpoint> getEndpointMap() {
864        throw new UnsupportedOperationException();
865    }
866
867    @Override
868    public Endpoint hasEndpoint(String uri) {
869        return endpoints.get(NormalizedUri.newNormalizedUri(uri, false));
870    }
871
872    @Override
873    public GlobalEndpointConfiguration getGlobalEndpointConfiguration() {
874        throw new UnsupportedOperationException();
875    }
876
877    @Override
878    public RouteController getRouteController() {
879        return routeController;
880    }
881
882    @Override
883    public void setRouteController(RouteController routeController) {
884        throw new UnsupportedOperationException();
885    }
886
887    @Override
888    public List<Route> getRoutes() {
889        return routes;
890    }
891
892    @Override
893    public int getRoutesSize() {
894        return routes.size();
895    }
896
897    @Override
898    public Route getRoute(String id) {
899        throw new UnsupportedOperationException();
900    }
901
902    @Override
903    public Processor getProcessor(String id) {
904        throw new UnsupportedOperationException();
905    }
906
907    @Override
908    public <T extends Processor> T getProcessor(String id, Class<T> type) {
909        throw new UnsupportedOperationException();
910    }
911
912    @Override
913    public List<RoutePolicyFactory> getRoutePolicyFactories() {
914        throw new UnsupportedOperationException();
915    }
916
917    @Override
918    public RestConfiguration getRestConfiguration() {
919        throw new UnsupportedOperationException();
920    }
921
922    @Override
923    public void setRestConfiguration(RestConfiguration restConfiguration) {
924        throw new UnsupportedOperationException();
925    }
926
927    @Override
928    public void setVaultConfiguration(VaultConfiguration vaultConfiguration) {
929        throw new UnsupportedOperationException();
930    }
931
932    @Override
933    public VaultConfiguration getVaultConfiguration() {
934        throw new UnsupportedOperationException();
935    }
936
937    @Override
938    public RestRegistry getRestRegistry() {
939        throw new UnsupportedOperationException();
940    }
941
942    @Override
943    public void setRestRegistry(RestRegistry restRegistry) {
944        throw new UnsupportedOperationException();
945    }
946
947    @Override
948    public TypeConverter getTypeConverter() {
949        return typeConverter;
950    }
951
952    @Override
953    public <T> T getRegistry(Class<T> type) {
954        return type.cast(registry);
955    }
956
957    @Override
958    public Injector getInjector() {
959        return injector;
960    }
961
962    @Override
963    public void setInjector(Injector injector) {
964        throw new UnsupportedOperationException();
965    }
966
967    @Override
968    public List<LifecycleStrategy> getLifecycleStrategies() {
969        throw new UnsupportedOperationException();
970    }
971
972    @Override
973    public Language resolveLanguage(String language) throws NoSuchLanguageException {
974        Language answer;
975        synchronized (languages) {
976            answer = languages.get(language);
977            // check if the language is singleton, if so return the shared
978            // instance
979            if (answer instanceof IsSingleton) {
980                boolean singleton = ((IsSingleton) answer).isSingleton();
981                if (singleton) {
982                    return answer;
983                }
984            }
985            // language not known or not singleton, then use resolver
986            answer = getLanguageResolver().resolveLanguage(language, reference);
987            // inject CamelContext if aware
988            if (answer != null) {
989                CamelContextAware.trySetCamelContext(answer, reference);
990                if (answer instanceof Service) {
991                    try {
992                        startService((Service) answer);
993                    } catch (Exception e) {
994                        throw RuntimeCamelException.wrapRuntimeCamelException(e);
995                    }
996                }
997                languages.put(language, answer);
998            }
999        }
1000        return answer;
1001    }
1002
1003    @Override
1004    public String resolvePropertyPlaceholders(String text) {
1005        return resolvePropertyPlaceholders(text, false);
1006    }
1007
1008    @Override
1009    public String resolvePropertyPlaceholders(String text, boolean keepUnresolvedOptional) {
1010        if (text != null && text.contains(PropertiesComponent.PREFIX_TOKEN)) {
1011            // the parser will throw exception if property key was not found
1012            return getPropertiesComponent().parseUri(text, keepUnresolvedOptional);
1013        }
1014        // is the value a known field (currently we only support
1015        // constants from Exchange.class)
1016        if (text != null && text.startsWith("Exchange.")) {
1017            String field = StringHelper.after(text, "Exchange.");
1018            String constant = ExchangeConstantProvider.lookup(field);
1019            if (constant != null) {
1020                return constant;
1021            } else {
1022                throw new IllegalArgumentException("Constant field with name: " + field + " not found on Exchange.class");
1023            }
1024        }
1025        // return original text as is
1026        return text;
1027    }
1028
1029    @Override
1030    public PropertiesComponent getPropertiesComponent() {
1031        return propertiesComponent;
1032    }
1033
1034    @Override
1035    public void setPropertiesComponent(PropertiesComponent propertiesComponent) {
1036        throw new UnsupportedOperationException();
1037    }
1038
1039    @Override
1040    public Set<String> getLanguageNames() {
1041        throw new UnsupportedOperationException();
1042    }
1043
1044    @Override
1045    public ProducerTemplate createProducerTemplate() {
1046        throw new UnsupportedOperationException();
1047    }
1048
1049    @Override
1050    public ProducerTemplate createProducerTemplate(int maximumCacheSize) {
1051        throw new UnsupportedOperationException();
1052    }
1053
1054    @Override
1055    public FluentProducerTemplate createFluentProducerTemplate() {
1056        throw new UnsupportedOperationException();
1057    }
1058
1059    @Override
1060    public FluentProducerTemplate createFluentProducerTemplate(int maximumCacheSize) {
1061        throw new UnsupportedOperationException();
1062    }
1063
1064    @Override
1065    public ConsumerTemplate createConsumerTemplate() {
1066        throw new UnsupportedOperationException();
1067    }
1068
1069    @Override
1070    public ConsumerTemplate createConsumerTemplate(int maximumCacheSize) {
1071        throw new UnsupportedOperationException();
1072    }
1073
1074    @Override
1075    public DataFormat resolveDataFormat(String name) {
1076        throw new UnsupportedOperationException();
1077    }
1078
1079    @Override
1080    public DataFormat createDataFormat(String name) {
1081        throw new UnsupportedOperationException();
1082    }
1083
1084    @Override
1085    public Set<String> getDataFormatNames() {
1086        throw new UnsupportedOperationException();
1087    }
1088
1089    @Override
1090    public Transformer resolveTransformer(String model) {
1091        throw new UnsupportedOperationException();
1092    }
1093
1094    @Override
1095    public Transformer resolveTransformer(DataType from, DataType to) {
1096        throw new UnsupportedOperationException();
1097    }
1098
1099    @Override
1100    public TransformerRegistry getTransformerRegistry() {
1101        throw new UnsupportedOperationException();
1102    }
1103
1104    @Override
1105    public Validator resolveValidator(DataType type) {
1106        throw new UnsupportedOperationException();
1107    }
1108
1109    @Override
1110    public ValidatorRegistry getValidatorRegistry() {
1111        throw new UnsupportedOperationException();
1112    }
1113
1114    @Override
1115    public Map<String, String> getGlobalOptions() {
1116        return globalOptions;
1117    }
1118
1119    @Override
1120    public void setGlobalOptions(Map<String, String> globalOptions) {
1121        throw new UnsupportedOperationException();
1122    }
1123
1124    @Override
1125    public String getGlobalOption(String key) {
1126        String value = getGlobalOptions().get(key);
1127        if (ObjectHelper.isNotEmpty(value)) {
1128            try {
1129                value = resolvePropertyPlaceholders(value);
1130            } catch (Exception e) {
1131                throw new RuntimeCamelException("Error getting global option: " + key, e);
1132            }
1133        }
1134        return value;
1135    }
1136
1137    @Override
1138    public ClassResolver getClassResolver() {
1139        return classResolver;
1140    }
1141
1142    @Override
1143    public void setClassResolver(ClassResolver resolver) {
1144        throw new UnsupportedOperationException();
1145    }
1146
1147    @Override
1148    public ManagementStrategy getManagementStrategy() {
1149        return null;
1150    }
1151
1152    @Override
1153    public void setManagementStrategy(ManagementStrategy strategy) {
1154        throw new UnsupportedOperationException();
1155    }
1156
1157    @Override
1158    public void disableJMX() throws IllegalStateException {
1159        throw new UnsupportedOperationException();
1160    }
1161
1162    @Override
1163    public InflightRepository getInflightRepository() {
1164        return inflightRepository;
1165    }
1166
1167    @Override
1168    public void setInflightRepository(InflightRepository repository) {
1169        throw new UnsupportedOperationException();
1170    }
1171
1172    @Override
1173    public void setTracingStandby(boolean tracingStandby) {
1174        throw new UnsupportedOperationException();
1175    }
1176
1177    @Override
1178    public boolean isTracingStandby() {
1179        return false;
1180    }
1181
1182    @Override
1183    public void setBacklogTracingStandby(boolean backlogTracingStandby) {
1184        throw new UnsupportedOperationException();
1185    }
1186
1187    @Override
1188    public boolean isBacklogTracingStandby() {
1189        return false;
1190    }
1191
1192    //
1193    // ExtendedCamelContext
1194    //
1195
1196    @Override
1197    public ClassLoader getApplicationContextClassLoader() {
1198        return applicationContextClassLoader;
1199    }
1200
1201    @Override
1202    public void setApplicationContextClassLoader(ClassLoader classLoader) {
1203        throw new UnsupportedOperationException();
1204    }
1205
1206    @Override
1207    public ShutdownStrategy getShutdownStrategy() {
1208        return shutdownStrategy;
1209    }
1210
1211    @Override
1212    public void setShutdownStrategy(ShutdownStrategy shutdownStrategy) {
1213        throw new UnsupportedOperationException();
1214    }
1215
1216    @Override
1217    public ExecutorServiceManager getExecutorServiceManager() {
1218        return executorServiceManager;
1219    }
1220
1221    @Override
1222    public void setExecutorServiceManager(ExecutorServiceManager executorServiceManager) {
1223        throw new UnsupportedOperationException();
1224    }
1225
1226    @Override
1227    public MessageHistoryFactory getMessageHistoryFactory() {
1228        throw new UnsupportedOperationException();
1229    }
1230
1231    @Override
1232    public void setMessageHistoryFactory(MessageHistoryFactory messageHistoryFactory) {
1233        throw new UnsupportedOperationException();
1234    }
1235
1236    @Override
1237    public Debugger getDebugger() {
1238        throw new UnsupportedOperationException();
1239    }
1240
1241    @Override
1242    public void setDebugger(Debugger debugger) {
1243        throw new UnsupportedOperationException();
1244    }
1245
1246    @Override
1247    public Tracer getTracer() {
1248        throw new UnsupportedOperationException();
1249    }
1250
1251    @Override
1252    public void setTracer(Tracer tracer) {
1253        throw new UnsupportedOperationException();
1254    }
1255
1256    @Override
1257    public Boolean isLoadTypeConverters() {
1258        throw new UnsupportedOperationException();
1259    }
1260
1261    @Override
1262    public void setLoadTypeConverters(Boolean loadTypeConverters) {
1263        throw new UnsupportedOperationException();
1264    }
1265
1266    @Override
1267    public Boolean isLoadHealthChecks() {
1268        throw new UnsupportedOperationException();
1269    }
1270
1271    @Override
1272    public Boolean isDevConsole() {
1273        throw new UnsupportedOperationException();
1274    }
1275
1276    @Override
1277    public void setDevConsole(Boolean loadDevConsoles) {
1278        throw new UnsupportedOperationException();
1279    }
1280
1281    @Override
1282    public Boolean isModeline() {
1283        throw new UnsupportedOperationException();
1284    }
1285
1286    @Override
1287    public void setModeline(Boolean modeline) {
1288        throw new UnsupportedOperationException();
1289    }
1290
1291    @Override
1292    public void setLoadHealthChecks(Boolean loadHealthChecks) {
1293        throw new UnsupportedOperationException();
1294    }
1295
1296    @Override
1297    public Boolean isSourceLocationEnabled() {
1298        throw new UnsupportedOperationException();
1299    }
1300
1301    @Override
1302    public void setSourceLocationEnabled(Boolean sourceLocationEnabled) {
1303        throw new UnsupportedOperationException();
1304    }
1305
1306    @Override
1307    public Boolean isTypeConverterStatisticsEnabled() {
1308        throw new UnsupportedOperationException();
1309    }
1310
1311    @Override
1312    public void setTypeConverterStatisticsEnabled(Boolean typeConverterStatisticsEnabled) {
1313        throw new UnsupportedOperationException();
1314    }
1315
1316    @Override
1317    public String getBasePackageScan() {
1318        return basePackageScan;
1319    }
1320
1321    @Override
1322    public void setBasePackageScan(String basePackageScan) {
1323        throw new UnsupportedOperationException();
1324    }
1325
1326    @Override
1327    public Boolean isDumpRoutes() {
1328        return dumpRoutes;
1329    }
1330
1331    @Override
1332    public void setDumpRoutes(Boolean dumpRoutes) {
1333        throw new UnsupportedOperationException();
1334    }
1335
1336    @Override
1337    public Boolean isUseMDCLogging() {
1338        return useMDCLogging;
1339    }
1340
1341    @Override
1342    public void setUseMDCLogging(Boolean useMDCLogging) {
1343        throw new UnsupportedOperationException();
1344    }
1345
1346    @Override
1347    public String getMDCLoggingKeysPattern() {
1348        return mdcLoggingKeysPattern;
1349    }
1350
1351    @Override
1352    public void setMDCLoggingKeysPattern(String pattern) {
1353        throw new UnsupportedOperationException();
1354    }
1355
1356    @Override
1357    public Boolean isUseDataType() {
1358        return useDataType;
1359    }
1360
1361    @Override
1362    public void setUseDataType(Boolean useDataType) {
1363        throw new UnsupportedOperationException();
1364    }
1365
1366    @Override
1367    public Boolean isUseBreadcrumb() {
1368        return useBreadcrumb;
1369    }
1370
1371    @Override
1372    public void setUseBreadcrumb(Boolean useBreadcrumb) {
1373        throw new UnsupportedOperationException();
1374    }
1375
1376    @Override
1377    public StreamCachingStrategy getStreamCachingStrategy() {
1378        throw new UnsupportedOperationException();
1379    }
1380
1381    @Override
1382    public void setStreamCachingStrategy(StreamCachingStrategy streamCachingStrategy) {
1383        throw new UnsupportedOperationException();
1384    }
1385
1386    @Override
1387    public RuntimeEndpointRegistry getRuntimeEndpointRegistry() {
1388        throw new UnsupportedOperationException();
1389    }
1390
1391    @Override
1392    public void setRuntimeEndpointRegistry(RuntimeEndpointRegistry runtimeEndpointRegistry) {
1393        throw new UnsupportedOperationException();
1394    }
1395
1396    @Override
1397    public SSLContextParameters getSSLContextParameters() {
1398        throw new UnsupportedOperationException();
1399    }
1400
1401    @Override
1402    public void setSSLContextParameters(SSLContextParameters sslContextParameters) {
1403        throw new UnsupportedOperationException();
1404    }
1405
1406    @Override
1407    public void setStartupSummaryLevel(StartupSummaryLevel startupSummaryLevel) {
1408        throw new UnsupportedOperationException();
1409    }
1410
1411    @Override
1412    public StartupSummaryLevel getStartupSummaryLevel() {
1413        return startupSummaryLevel;
1414    }
1415
1416    @Override
1417    public Endpoint getPrototypeEndpoint(String uri) {
1418        throw new UnsupportedOperationException();
1419    }
1420
1421    @Override
1422    public Endpoint getPrototypeEndpoint(NormalizedEndpointUri uri) {
1423        throw new UnsupportedOperationException();
1424    }
1425
1426    @Override
1427    public Endpoint hasEndpoint(NormalizedEndpointUri uri) {
1428        return endpoints.get(uri);
1429    }
1430
1431    @Override
1432    public Endpoint getEndpoint(NormalizedEndpointUri uri) {
1433        return doGetEndpoint(uri.getUri(), true, false);
1434    }
1435
1436    @Override
1437    public Endpoint getEndpoint(NormalizedEndpointUri uri, Map<String, Object> parameters) {
1438        return doGetEndpoint(uri.getUri(), parameters, true);
1439    }
1440
1441    protected Endpoint doGetEndpoint(String uri, boolean normalized, boolean prototype) {
1442        StringHelper.notEmpty(uri, "uri");
1443        // in case path has property placeholders then try to let property
1444        // component resolve those
1445        if (!normalized) {
1446            try {
1447                uri = resolvePropertyPlaceholders(uri);
1448            } catch (Exception e) {
1449                throw new ResolveEndpointFailedException(uri, e);
1450            }
1451        }
1452        // normalize uri so we can do endpoint hits with minor mistakes and
1453        // parameters is not in the same order
1454        if (!normalized) {
1455            uri = normalizeEndpointUri(uri);
1456        }
1457        Endpoint answer = null;
1458        if (!prototype) {
1459            // use optimized method to get the endpoint uri
1460            NormalizedUri key = NormalizedUri.newNormalizedUri(uri, true);
1461            // only lookup and reuse existing endpoints if not prototype scoped
1462            answer = endpoints.get(key);
1463        }
1464        // unknown scheme
1465        if (answer == null) {
1466            throw new NoSuchEndpointException(uri);
1467        }
1468        return answer;
1469    }
1470
1471    protected Endpoint doGetEndpoint(String uri, Map<String, Object> parameters, boolean normalized) {
1472        StringHelper.notEmpty(uri, "uri");
1473        // in case path has property placeholders then try to let property
1474        // component resolve those
1475        if (!normalized) {
1476            try {
1477                uri = resolvePropertyPlaceholders(uri);
1478            } catch (Exception e) {
1479                throw new ResolveEndpointFailedException(uri, e);
1480            }
1481        }
1482        // normalize uri so we can do endpoint hits with minor mistakes and
1483        // parameters is not in the same order
1484        if (!normalized) {
1485            uri = normalizeEndpointUri(uri);
1486        }
1487        Endpoint answer;
1488        String scheme = null;
1489        // use optimized method to get the endpoint uri
1490        NormalizedUri key = NormalizedUri.newNormalizedUri(uri, true);
1491        answer = endpoints.get(key);
1492        // unknown scheme
1493        if (answer == null) {
1494            throw new ResolveEndpointFailedException(uri, "No component found with scheme: " + scheme);
1495        }
1496        return answer;
1497    }
1498
1499    @Override
1500    public NormalizedEndpointUri normalizeUri(String uri) {
1501        try {
1502            uri = resolvePropertyPlaceholders(uri);
1503            return NormalizedUri.newNormalizedUri(uri, false);
1504        } catch (Exception e) {
1505            throw new ResolveEndpointFailedException(uri, e);
1506        }
1507    }
1508
1509    @Override
1510    public List<RouteStartupOrder> getRouteStartupOrder() {
1511        throw new UnsupportedOperationException();
1512    }
1513
1514    @Override
1515    public CamelBeanPostProcessor getBeanPostProcessor() {
1516        return beanPostProcessor;
1517    }
1518
1519    @Override
1520    public void setBeanPostProcessor(CamelBeanPostProcessor beanPostProcessor) {
1521        throw new UnsupportedOperationException();
1522    }
1523
1524    @Override
1525    public CamelDependencyInjectionAnnotationFactory getDependencyInjectionAnnotationFactory() {
1526        return dependencyInjectionAnnotationFactory;
1527    }
1528
1529    @Override
1530    public void setDependencyInjectionAnnotationFactory(CamelDependencyInjectionAnnotationFactory factory) {
1531        throw new UnsupportedOperationException();
1532    }
1533
1534    @Override
1535    public ManagementMBeanAssembler getManagementMBeanAssembler() {
1536        throw new UnsupportedOperationException();
1537    }
1538
1539    @Override
1540    public ErrorHandlerFactory getErrorHandlerFactory() {
1541        throw new UnsupportedOperationException();
1542    }
1543
1544    //
1545    // Unsupported mutable methods
1546    //
1547
1548    @Override
1549    public void setErrorHandlerFactory(ErrorHandlerFactory errorHandlerFactory) {
1550        throw new UnsupportedOperationException();
1551    }
1552
1553    @Override
1554    public PackageScanClassResolver getPackageScanClassResolver() {
1555        throw new UnsupportedOperationException();
1556    }
1557
1558    @Override
1559    public void setPackageScanClassResolver(PackageScanClassResolver resolver) {
1560        throw new UnsupportedOperationException();
1561    }
1562
1563    @Override
1564    public PackageScanResourceResolver getPackageScanResourceResolver() {
1565        throw new UnsupportedOperationException();
1566    }
1567
1568    @Override
1569    public void setPackageScanResourceResolver(PackageScanResourceResolver resolver) {
1570        throw new UnsupportedOperationException();
1571    }
1572
1573    @Override
1574    public FactoryFinder getDefaultFactoryFinder() {
1575        throw new UnsupportedOperationException();
1576    }
1577
1578    @Override
1579    public ConfigurerResolver getBootstrapConfigurerResolver() {
1580        throw new UnsupportedOperationException();
1581    }
1582
1583    @Override
1584    public void setBootstrapConfigurerResolver(ConfigurerResolver configurerResolver) {
1585        throw new UnsupportedOperationException();
1586    }
1587
1588    @Override
1589    public FactoryFinder getBootstrapFactoryFinder() {
1590        throw new UnsupportedOperationException();
1591    }
1592
1593    @Override
1594    public void setBootstrapFactoryFinder(FactoryFinder factoryFinder) {
1595        throw new UnsupportedOperationException();
1596    }
1597
1598    @Override
1599    public FactoryFinder getBootstrapFactoryFinder(String path) {
1600        throw new UnsupportedOperationException();
1601    }
1602
1603    @Override
1604    public FactoryFinder getFactoryFinder(String path) {
1605        throw new UnsupportedOperationException();
1606    }
1607
1608    @Override
1609    public FactoryFinderResolver getFactoryFinderResolver() {
1610        throw new UnsupportedOperationException();
1611    }
1612
1613    @Override
1614    public void setFactoryFinderResolver(FactoryFinderResolver resolver) {
1615        throw new UnsupportedOperationException();
1616    }
1617
1618    @Override
1619    public ProcessorFactory getProcessorFactory() {
1620        return processorFactory;
1621    }
1622
1623    @Override
1624    public void setProcessorFactory(ProcessorFactory processorFactory) {
1625        throw new UnsupportedOperationException();
1626    }
1627
1628    @Override
1629    public ModelineFactory getModelineFactory() {
1630        return modelineFactory;
1631    }
1632
1633    @Override
1634    public void setModelineFactory(ModelineFactory modelineFactory) {
1635        throw new UnsupportedOperationException();
1636    }
1637
1638    @Override
1639    public InternalProcessorFactory getInternalProcessorFactory() {
1640        return internalProcessorFactory;
1641    }
1642
1643    @Override
1644    public void setInternalProcessorFactory(InternalProcessorFactory internalProcessorFactory) {
1645        throw new UnsupportedOperationException();
1646    }
1647
1648    @Override
1649    public InterceptEndpointFactory getInterceptEndpointFactory() {
1650        throw new UnsupportedOperationException();
1651    }
1652
1653    @Override
1654    public void setInterceptEndpointFactory(InterceptEndpointFactory interceptEndpointFactory) {
1655        throw new UnsupportedOperationException();
1656    }
1657
1658    @Override
1659    public RouteFactory getRouteFactory() {
1660        throw new UnsupportedOperationException();
1661    }
1662
1663    @Override
1664    public void setRouteFactory(RouteFactory routeFactory) {
1665        throw new UnsupportedOperationException();
1666    }
1667
1668    @Override
1669    public DeferServiceFactory getDeferServiceFactory() {
1670        throw new UnsupportedOperationException();
1671    }
1672
1673    @Override
1674    public void setDeferServiceFactory(DeferServiceFactory deferServiceFactory) {
1675        throw new UnsupportedOperationException();
1676    }
1677
1678    @Override
1679    public UnitOfWorkFactory getUnitOfWorkFactory() {
1680        return unitOfWorkFactory;
1681    }
1682
1683    @Override
1684    public void setUnitOfWorkFactory(UnitOfWorkFactory unitOfWorkFactory) {
1685        throw new UnsupportedOperationException();
1686    }
1687
1688    @Override
1689    public AnnotationBasedProcessorFactory getAnnotationBasedProcessorFactory() {
1690        throw new UnsupportedOperationException();
1691    }
1692
1693    @Override
1694    public void setAnnotationBasedProcessorFactory(AnnotationBasedProcessorFactory annotationBasedProcessorFactory) {
1695        throw new UnsupportedOperationException();
1696    }
1697
1698    @Override
1699    public BeanProxyFactory getBeanProxyFactory() {
1700        throw new UnsupportedOperationException();
1701    }
1702
1703    @Override
1704    public BeanProcessorFactory getBeanProcessorFactory() {
1705        throw new UnsupportedOperationException();
1706    }
1707
1708    @Override
1709    public ScheduledExecutorService getErrorHandlerExecutorService() {
1710        throw new UnsupportedOperationException();
1711    }
1712
1713    @Override
1714    public List<InterceptStrategy> getInterceptStrategies() {
1715        throw new UnsupportedOperationException();
1716    }
1717
1718    @Override
1719    public Set<LogListener> getLogListeners() {
1720        throw new UnsupportedOperationException();
1721    }
1722
1723    @Override
1724    public AsyncProcessorAwaitManager getAsyncProcessorAwaitManager() {
1725        return asyncProcessorAwaitManager;
1726    }
1727
1728    @Override
1729    public void setAsyncProcessorAwaitManager(AsyncProcessorAwaitManager manager) {
1730        throw new UnsupportedOperationException();
1731    }
1732
1733    @Override
1734    public BeanIntrospection getBeanIntrospection() {
1735        return beanIntrospection;
1736    }
1737
1738    @Override
1739    public void setBeanIntrospection(BeanIntrospection beanIntrospection) {
1740        throw new UnsupportedOperationException();
1741    }
1742
1743    @Override
1744    public HeadersMapFactory getHeadersMapFactory() {
1745        return headersMapFactory;
1746    }
1747
1748    @Override
1749    public void setHeadersMapFactory(HeadersMapFactory factory) {
1750        throw new UnsupportedOperationException();
1751    }
1752
1753    @Override
1754    public CliConnectorFactory getCliConnectorFactory() {
1755        return cliConnectorFactory;
1756    }
1757
1758    @Override
1759    public void setCliConnectorFactory(CliConnectorFactory cliConnectorFactory) {
1760        throw new UnsupportedOperationException();
1761    }
1762
1763    @Override
1764    public ExchangeFactory getExchangeFactory() {
1765        return exchangeFactory;
1766    }
1767
1768    @Override
1769    public ExchangeFactoryManager getExchangeFactoryManager() {
1770        return exchangeFactoryManager;
1771    }
1772
1773    @Override
1774    public void setExchangeFactoryManager(ExchangeFactoryManager exchangeFactoryManager) {
1775        throw new UnsupportedOperationException();
1776    }
1777
1778    @Override
1779    public void setExchangeFactory(ExchangeFactory exchangeFactory) {
1780        throw new UnsupportedOperationException();
1781    }
1782
1783    @Override
1784    public ProcessorExchangeFactory getProcessorExchangeFactory() {
1785        return processorExchangeFactory;
1786    }
1787
1788    @Override
1789    public void setProcessorExchangeFactory(ProcessorExchangeFactory processorExchangeFactory) {
1790        throw new UnsupportedOperationException();
1791    }
1792
1793    @Override
1794    public ReactiveExecutor getReactiveExecutor() {
1795        return reactiveExecutor;
1796    }
1797
1798    @Override
1799    public void setReactiveExecutor(ReactiveExecutor reactiveExecutor) {
1800        throw new UnsupportedOperationException();
1801    }
1802
1803    @Override
1804    public boolean isEventNotificationApplicable() {
1805        return eventNotificationApplicable;
1806    }
1807
1808    @Override
1809    public void setEventNotificationApplicable(boolean eventNotificationApplicable) {
1810        throw new UnsupportedOperationException();
1811    }
1812
1813    @Override
1814    public ModelToXMLDumper getModelToXMLDumper() {
1815        throw new UnsupportedOperationException();
1816    }
1817
1818    @Override
1819    public void setModelToXMLDumper(ModelToXMLDumper modelToXMLDumper) {
1820        throw new UnsupportedOperationException();
1821    }
1822
1823    @Override
1824    public RuntimeCamelCatalog getRuntimeCamelCatalog() {
1825        throw new UnsupportedOperationException();
1826    }
1827
1828    @Override
1829    public void setRuntimeCamelCatalog(RuntimeCamelCatalog runtimeCamelCatalog) {
1830        throw new UnsupportedOperationException();
1831    }
1832
1833    @Override
1834    public ConfigurerResolver getConfigurerResolver() {
1835        throw new UnsupportedOperationException();
1836    }
1837
1838    @Override
1839    public void setConfigurerResolver(ConfigurerResolver configurerResolver) {
1840        throw new UnsupportedOperationException();
1841    }
1842
1843    @Override
1844    public void addRoute(Route route) {
1845        throw new UnsupportedOperationException();
1846    }
1847
1848    @Override
1849    public void removeRoute(Route route) {
1850        throw new UnsupportedOperationException();
1851    }
1852
1853    @Override
1854    public Processor createErrorHandler(Route route, Processor processor) throws Exception {
1855        // TODO: need to revisit this in order to support dynamic endpoints uri
1856        throw new UnsupportedOperationException();
1857    }
1858
1859    @Override
1860    public String getComponentParameterJsonSchema(String componentName) throws IOException {
1861        Class<?> clazz;
1862        Object instance = getRegistry().lookupByNameAndType(componentName, Component.class);
1863        if (instance != null) {
1864            clazz = instance.getClass();
1865        } else {
1866            clazz = getFactoryFinder(DefaultComponentResolver.RESOURCE_PATH).findClass(componentName).orElse(null);
1867            if (clazz == null) {
1868                instance = hasComponent(componentName);
1869                if (instance != null) {
1870                    clazz = instance.getClass();
1871                } else {
1872                    return null;
1873                }
1874            }
1875        }
1876        // special for ActiveMQ as it is really just JMS
1877        if ("ActiveMQComponent".equals(clazz.getSimpleName())) {
1878            return getComponentParameterJsonSchema("jms");
1879        } else {
1880            return getJsonSchema(clazz.getPackage().getName(), componentName);
1881        }
1882    }
1883
1884    @Override
1885    public String getDataFormatParameterJsonSchema(String dataFormatName) throws IOException {
1886        Class<?> clazz;
1887        Object instance = getRegistry().lookupByNameAndType(dataFormatName, DataFormat.class);
1888        if (instance != null) {
1889            clazz = instance.getClass();
1890        } else {
1891            clazz = getFactoryFinder(DefaultDataFormatResolver.DATAFORMAT_RESOURCE_PATH).findClass(dataFormatName).orElse(null);
1892            if (clazz == null) {
1893                return null;
1894            }
1895        }
1896        return getJsonSchema(clazz.getPackage().getName(), dataFormatName);
1897    }
1898
1899    @Override
1900    public String getLanguageParameterJsonSchema(String languageName) throws IOException {
1901        Class<?> clazz;
1902        Object instance = getRegistry().lookupByNameAndType(languageName, Language.class);
1903        if (instance != null) {
1904            clazz = instance.getClass();
1905        } else {
1906            clazz = getFactoryFinder(DefaultLanguageResolver.LANGUAGE_RESOURCE_PATH).findClass(languageName).orElse(null);
1907            if (clazz == null) {
1908                return null;
1909            }
1910        }
1911        return getJsonSchema(clazz.getPackage().getName(), languageName);
1912    }
1913
1914    @Override
1915    public String getEipParameterJsonSchema(String eipName) throws IOException {
1916        // the eip json schema may be in some of the sub-packages so look until
1917        // we find it
1918        String[] subPackages = new String[] { "", "/config", "/dataformat", "/language", "/loadbalancer", "/rest" };
1919        for (String sub : subPackages) {
1920            String path = CamelContextHelper.MODEL_DOCUMENTATION_PREFIX + sub + "/" + eipName + ".json";
1921            InputStream inputStream = getClassResolver().loadResourceAsStream(path);
1922            if (inputStream != null) {
1923                try {
1924                    return IOHelper.loadText(inputStream);
1925                } finally {
1926                    IOHelper.close(inputStream);
1927                }
1928            }
1929        }
1930        return null;
1931    }
1932
1933    private String getJsonSchema(String packageName, String name) throws IOException {
1934        String path = packageName.replace('.', '/') + "/" + name + ".json";
1935        InputStream inputStream = getClassResolver().loadResourceAsStream(path);
1936        if (inputStream != null) {
1937            try {
1938                return IOHelper.loadText(inputStream);
1939            } finally {
1940                IOHelper.close(inputStream);
1941            }
1942        }
1943        return null;
1944    }
1945
1946    @Override
1947    public void setupRoutes(boolean done) {
1948        throw new UnsupportedOperationException();
1949    }
1950
1951    @Override
1952    public boolean isSetupRoutes() {
1953        return false;
1954    }
1955
1956    @Override
1957    public void addInterceptStrategy(InterceptStrategy interceptStrategy) {
1958        throw new UnsupportedOperationException();
1959    }
1960
1961    @Override
1962    public void setupManagement(Map<String, Object> options) {
1963        throw new UnsupportedOperationException();
1964    }
1965
1966    @Override
1967    public void addLogListener(LogListener listener) {
1968        throw new UnsupportedOperationException();
1969    }
1970
1971    @Override
1972    public RestBindingJaxbDataFormatFactory getRestBindingJaxbDataFormatFactory() {
1973        throw new UnsupportedOperationException();
1974    }
1975
1976    @Override
1977    public void setRestBindingJaxbDataFormatFactory(RestBindingJaxbDataFormatFactory restBindingJaxbDataFormatFactory) {
1978        throw new UnsupportedOperationException();
1979    }
1980
1981    @Override
1982    public XMLRoutesDefinitionLoader getXMLRoutesDefinitionLoader() {
1983        throw new UnsupportedOperationException();
1984    }
1985
1986    @Override
1987    public void setXMLRoutesDefinitionLoader(XMLRoutesDefinitionLoader xmlRoutesDefinitionLoader) {
1988        throw new UnsupportedOperationException();
1989    }
1990
1991    @Override
1992    public void setRoutesLoader(RoutesLoader routesLoader) {
1993        throw new UnsupportedOperationException();
1994    }
1995
1996    @Override
1997    public RoutesLoader getRoutesLoader() {
1998        throw new UnsupportedOperationException();
1999    }
2000
2001    @Override
2002    public ResourceLoader getResourceLoader() {
2003        throw new UnsupportedOperationException();
2004    }
2005
2006    @Override
2007    public void setResourceLoader(ResourceLoader resourceLoader) {
2008        throw new UnsupportedOperationException();
2009    }
2010
2011    @Override
2012    public void registerEndpointCallback(EndpointStrategy strategy) {
2013        throw new UnsupportedOperationException();
2014    }
2015
2016    @Override
2017    public Endpoint addEndpoint(String uri, Endpoint endpoint) throws Exception {
2018        throw new UnsupportedOperationException();
2019    }
2020
2021    @Override
2022    public void removeEndpoint(Endpoint endpoint) throws Exception {
2023        throw new UnsupportedOperationException();
2024    }
2025
2026    @Override
2027    public Collection<Endpoint> removeEndpoints(String pattern) throws Exception {
2028        throw new UnsupportedOperationException();
2029    }
2030
2031    @Override
2032    public NodeIdFactory getNodeIdFactory() {
2033        throw new UnsupportedOperationException();
2034    }
2035
2036    @Override
2037    public void setNodeIdFactory(NodeIdFactory factory) {
2038        throw new UnsupportedOperationException();
2039    }
2040
2041    @Override
2042    public void addComponent(String componentName, Component component) {
2043        throw new UnsupportedOperationException();
2044    }
2045
2046    @Override
2047    public Component removeComponent(String componentName) {
2048        throw new UnsupportedOperationException();
2049    }
2050
2051    @Override
2052    public void addRoutes(RoutesBuilder builder) throws Exception {
2053        throw new UnsupportedOperationException();
2054    }
2055
2056    @Override
2057    public void addTemplatedRoutes(RoutesBuilder builder) throws Exception {
2058        throw new UnsupportedOperationException();
2059    }
2060
2061    @Override
2062    public void addRoutesConfigurations(RouteConfigurationsBuilder builder) throws Exception {
2063        throw new UnsupportedOperationException();
2064    }
2065
2066    @Override
2067    public boolean removeRoute(String routeId) throws Exception {
2068        throw new UnsupportedOperationException();
2069    }
2070
2071    @Override
2072    public void addRoutePolicyFactory(RoutePolicyFactory routePolicyFactory) {
2073        throw new UnsupportedOperationException();
2074    }
2075
2076    @Override
2077    public void setTracing(Boolean tracing) {
2078        throw new UnsupportedOperationException();
2079    }
2080
2081    @Override
2082    public void setBacklogTracing(Boolean backlogTrace) {
2083        throw new UnsupportedOperationException();
2084    }
2085
2086    @Override
2087    public void setDebugging(Boolean debugging) {
2088        throw new UnsupportedOperationException();
2089    }
2090
2091    @Override
2092    public void setMessageHistory(Boolean messageHistory) {
2093        throw new UnsupportedOperationException();
2094    }
2095
2096    @Override
2097    public void setLogMask(Boolean logMask) {
2098        throw new UnsupportedOperationException();
2099    }
2100
2101    @Override
2102    public void setLogExhaustedMessageBody(Boolean logExhaustedMessageBody) {
2103        throw new UnsupportedOperationException();
2104    }
2105
2106    @Override
2107    public void setAutoStartup(Boolean autoStartup) {
2108        throw new UnsupportedOperationException();
2109    }
2110
2111    @Override
2112    public void addLifecycleStrategy(LifecycleStrategy lifecycleStrategy) {
2113        throw new UnsupportedOperationException();
2114    }
2115
2116    @Override
2117    public String addRouteFromTemplate(String routeId, String routeTemplateId, Map<String, Object> parameters)
2118            throws Exception {
2119        throw new UnsupportedOperationException();
2120    }
2121
2122    @Override
2123    public String addRouteFromTemplate(String routeId, String routeTemplateId, String prefixId, Map<String, Object> parameters)
2124            throws Exception {
2125        throw new UnsupportedOperationException();
2126    }
2127
2128    @Override
2129    public String addRouteFromTemplate(String routeId, String routeTemplateId, RouteTemplateContext routeTemplateContext)
2130            throws Exception {
2131        throw new UnsupportedOperationException();
2132    }
2133
2134    @Override
2135    public String addRouteFromTemplate(
2136            String routeId, String routeTemplateId, String prefixId, RouteTemplateContext routeTemplateContext)
2137            throws Exception {
2138        throw new UnsupportedOperationException();
2139    }
2140
2141    @Override
2142    public void removeRouteTemplates(String pattern) throws Exception {
2143        throw new UnsupportedOperationException();
2144    }
2145
2146    @Override
2147    public void setLightweight(boolean lightweight) {
2148        throw new UnsupportedOperationException();
2149    }
2150
2151    @Override
2152    public boolean isLightweight() {
2153        return true;
2154    }
2155
2156    @Override
2157    public String getTestExcludeRoutes() {
2158        return null;
2159    }
2160
2161    @Override
2162    public RouteController getInternalRouteController() {
2163        return new RouteController() {
2164            @Override
2165            public LoggingLevel getLoggingLevel() {
2166                throw new UnsupportedOperationException();
2167            }
2168
2169            @Override
2170            public void setLoggingLevel(LoggingLevel loggingLevel) {
2171                throw new UnsupportedOperationException();
2172            }
2173
2174            @Override
2175            public boolean isSupervising() {
2176                return false;
2177            }
2178
2179            @Override
2180            public SupervisingRouteController supervising() {
2181                throw new UnsupportedOperationException();
2182            }
2183
2184            @Override
2185            public <T extends RouteController> T adapt(Class<T> type) {
2186                return type.cast(this);
2187            }
2188
2189            @Override
2190            public Collection<Route> getControlledRoutes() {
2191                return routes;
2192            }
2193
2194            @Override
2195            public void startAllRoutes() throws Exception {
2196                throw new UnsupportedOperationException();
2197            }
2198
2199            @Override
2200            public void stopAllRoutes() throws Exception {
2201                throw new UnsupportedOperationException();
2202            }
2203
2204            @Override
2205            public void removeAllRoutes() throws Exception {
2206                throw new UnsupportedOperationException();
2207            }
2208
2209            @Override
2210            public boolean isStartingRoutes() {
2211                return false;
2212            }
2213
2214            @Override
2215            public void reloadAllRoutes() throws Exception {
2216                throw new UnsupportedOperationException();
2217            }
2218
2219            @Override
2220            public boolean isReloadingRoutes() {
2221                return false;
2222            }
2223
2224            @Override
2225            public ServiceStatus getRouteStatus(String routeId) {
2226                return ServiceStatus.Started;
2227            }
2228
2229            @Override
2230            public void startRoute(String routeId) throws Exception {
2231                throw new UnsupportedOperationException();
2232            }
2233
2234            @Override
2235            public void stopRoute(String routeId) throws Exception {
2236                throw new UnsupportedOperationException();
2237            }
2238
2239            @Override
2240            public void stopRoute(String routeId, Throwable cause) throws Exception {
2241                throw new UnsupportedOperationException();
2242            }
2243
2244            @Override
2245            public void stopRoute(String routeId, long timeout, TimeUnit timeUnit) throws Exception {
2246                throw new UnsupportedOperationException();
2247            }
2248
2249            @Override
2250            public boolean stopRoute(String routeId, long timeout, TimeUnit timeUnit, boolean abortAfterTimeout)
2251                    throws Exception {
2252                throw new UnsupportedOperationException();
2253            }
2254
2255            @Override
2256            public void suspendRoute(String routeId) throws Exception {
2257                throw new UnsupportedOperationException();
2258            }
2259
2260            @Override
2261            public void suspendRoute(String routeId, long timeout, TimeUnit timeUnit) throws Exception {
2262                throw new UnsupportedOperationException();
2263            }
2264
2265            @Override
2266            public void resumeRoute(String routeId) throws Exception {
2267                throw new UnsupportedOperationException();
2268            }
2269
2270            @Override
2271            public CamelContext getCamelContext() {
2272                throw new UnsupportedOperationException();
2273            }
2274
2275            @Override
2276            public void setCamelContext(CamelContext camelContext) {
2277                throw new UnsupportedOperationException();
2278            }
2279
2280            @Override
2281            public void start() {
2282                throw new UnsupportedOperationException();
2283            }
2284
2285            @Override
2286            public void stop() {
2287                throw new UnsupportedOperationException();
2288            }
2289        };
2290    }
2291
2292    @Override
2293    public UriFactoryResolver getUriFactoryResolver() {
2294        throw new UnsupportedOperationException();
2295    }
2296
2297    @Override
2298    public void setUriFactoryResolver(UriFactoryResolver uriFactoryResolver) {
2299        throw new UnsupportedOperationException();
2300    }
2301
2302    @Override
2303    public EndpointUriFactory getEndpointUriFactory(String scheme) {
2304        throw new UnsupportedOperationException();
2305    }
2306
2307    @Override
2308    public StartupStepRecorder getStartupStepRecorder() {
2309        throw new UnsupportedOperationException();
2310    }
2311
2312    @Override
2313    public void setStartupStepRecorder(StartupStepRecorder startupStepRecorder) {
2314        throw new UnsupportedOperationException();
2315    }
2316
2317    @Override
2318    public PeriodTaskResolver getPeriodTaskResolver() {
2319        return periodTaskResolver;
2320    }
2321
2322    @Override
2323    public void setPeriodTaskScheduler(PeriodTaskScheduler periodTaskScheduler) {
2324        throw new UnsupportedOperationException();
2325    }
2326
2327    @Override
2328    public PeriodTaskScheduler getPeriodTaskScheduler() {
2329        return periodTaskScheduler;
2330    }
2331
2332    @Override
2333    public void setPeriodTaskResolver(PeriodTaskResolver periodTaskResolver) {
2334        throw new UnsupportedOperationException();
2335    }
2336
2337    private void startService(Service service) throws Exception {
2338        // and register startup aware so they can be notified when
2339        // camel context has been started
2340        if (service instanceof StartupListener) {
2341            StartupListener listener = (StartupListener) service;
2342            addStartupListener(listener);
2343        }
2344        CamelContextAware.trySetCamelContext(service, reference);
2345        service.start();
2346    }
2347}