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.ExecutorService; 029import java.util.concurrent.ScheduledExecutorService; 030import java.util.concurrent.TimeUnit; 031import java.util.stream.Collectors; 032 033import org.apache.camel.AsyncProcessor; 034import org.apache.camel.CamelContext; 035import org.apache.camel.CamelContextAware; 036import org.apache.camel.CatalogCamelContext; 037import org.apache.camel.Component; 038import org.apache.camel.ConsumerTemplate; 039import org.apache.camel.Endpoint; 040import org.apache.camel.ErrorHandlerFactory; 041import org.apache.camel.ExchangeConstantProvider; 042import org.apache.camel.ExtendedCamelContext; 043import org.apache.camel.FluentProducerTemplate; 044import org.apache.camel.GlobalEndpointConfiguration; 045import org.apache.camel.IsSingleton; 046import org.apache.camel.LoggingLevel; 047import org.apache.camel.NoSuchEndpointException; 048import org.apache.camel.NoSuchLanguageException; 049import org.apache.camel.Processor; 050import org.apache.camel.ProducerTemplate; 051import org.apache.camel.ResolveEndpointFailedException; 052import org.apache.camel.Route; 053import org.apache.camel.RoutesBuilder; 054import org.apache.camel.RuntimeCamelException; 055import org.apache.camel.Service; 056import org.apache.camel.ServiceStatus; 057import org.apache.camel.ShutdownRoute; 058import org.apache.camel.ShutdownRunningTask; 059import org.apache.camel.StartupListener; 060import org.apache.camel.TypeConverter; 061import org.apache.camel.ValueHolder; 062import org.apache.camel.catalog.RuntimeCamelCatalog; 063import org.apache.camel.impl.converter.CoreTypeConverterRegistry; 064import org.apache.camel.impl.engine.DefaultComponentResolver; 065import org.apache.camel.impl.engine.DefaultDataFormatResolver; 066import org.apache.camel.impl.engine.DefaultLanguageResolver; 067import org.apache.camel.impl.engine.EndpointKey; 068import org.apache.camel.spi.AnnotationBasedProcessorFactory; 069import org.apache.camel.spi.AsyncProcessorAwaitManager; 070import org.apache.camel.spi.BeanIntrospection; 071import org.apache.camel.spi.BeanProcessorFactory; 072import org.apache.camel.spi.BeanProxyFactory; 073import org.apache.camel.spi.CamelBeanPostProcessor; 074import org.apache.camel.spi.CamelContextNameStrategy; 075import org.apache.camel.spi.ClassResolver; 076import org.apache.camel.spi.ComponentNameResolver; 077import org.apache.camel.spi.ComponentResolver; 078import org.apache.camel.spi.ConfigurerResolver; 079import org.apache.camel.spi.DataFormat; 080import org.apache.camel.spi.DataFormatResolver; 081import org.apache.camel.spi.DataType; 082import org.apache.camel.spi.Debugger; 083import org.apache.camel.spi.DeferServiceFactory; 084import org.apache.camel.spi.EndpointRegistry; 085import org.apache.camel.spi.EndpointStrategy; 086import org.apache.camel.spi.ExecutorServiceManager; 087import org.apache.camel.spi.FactoryFinder; 088import org.apache.camel.spi.FactoryFinderResolver; 089import org.apache.camel.spi.HeadersMapFactory; 090import org.apache.camel.spi.InflightRepository; 091import org.apache.camel.spi.Injector; 092import org.apache.camel.spi.InterceptSendToEndpoint; 093import org.apache.camel.spi.InterceptStrategy; 094import org.apache.camel.spi.Language; 095import org.apache.camel.spi.LanguageResolver; 096import org.apache.camel.spi.LifecycleStrategy; 097import org.apache.camel.spi.LogListener; 098import org.apache.camel.spi.ManagementMBeanAssembler; 099import org.apache.camel.spi.ManagementNameStrategy; 100import org.apache.camel.spi.ManagementStrategy; 101import org.apache.camel.spi.MessageHistoryFactory; 102import org.apache.camel.spi.ModelJAXBContextFactory; 103import org.apache.camel.spi.ModelToXMLDumper; 104import org.apache.camel.spi.NodeIdFactory; 105import org.apache.camel.spi.NormalizedEndpointUri; 106import org.apache.camel.spi.PackageScanClassResolver; 107import org.apache.camel.spi.PackageScanResourceResolver; 108import org.apache.camel.spi.ProcessorFactory; 109import org.apache.camel.spi.PropertiesComponent; 110import org.apache.camel.spi.ReactiveExecutor; 111import org.apache.camel.spi.Registry; 112import org.apache.camel.spi.RestBindingJaxbDataFormatFactory; 113import org.apache.camel.spi.RestConfiguration; 114import org.apache.camel.spi.RestRegistry; 115import org.apache.camel.spi.RouteController; 116import org.apache.camel.spi.RoutePolicyFactory; 117import org.apache.camel.spi.RouteStartupOrder; 118import org.apache.camel.spi.RuntimeEndpointRegistry; 119import org.apache.camel.spi.ShutdownStrategy; 120import org.apache.camel.spi.StreamCachingStrategy; 121import org.apache.camel.spi.SupervisingRouteController; 122import org.apache.camel.spi.Tracer; 123import org.apache.camel.spi.Transformer; 124import org.apache.camel.spi.TransformerRegistry; 125import org.apache.camel.spi.TypeConverterRegistry; 126import org.apache.camel.spi.UnitOfWorkFactory; 127import org.apache.camel.spi.UuidGenerator; 128import org.apache.camel.spi.Validator; 129import org.apache.camel.spi.ValidatorRegistry; 130import org.apache.camel.spi.XMLRoutesDefinitionLoader; 131import org.apache.camel.support.CamelContextHelper; 132import org.apache.camel.support.NormalizedUri; 133import org.apache.camel.support.jsse.SSLContextParameters; 134import org.apache.camel.util.IOHelper; 135import org.apache.camel.util.ObjectHelper; 136import org.apache.camel.util.StringHelper; 137import org.apache.camel.util.TimeUtils; 138import org.apache.camel.util.URISupport; 139import org.slf4j.Logger; 140import org.slf4j.LoggerFactory; 141 142public class LightweightRuntimeCamelContext implements ExtendedCamelContext, CatalogCamelContext { 143 144 private static final Logger LOG = LoggerFactory.getLogger(LightweightRuntimeCamelContext.class); 145 146 private final CamelContext reference; 147 private final Registry registry; 148 private final CoreTypeConverterRegistry typeConverter; 149 private final ModelJAXBContextFactory modelJAXBContextFactory; 150 private final RuntimeCamelCatalog camelRuntimeCatalog; 151 private final ComponentResolver componentResolver; 152 private final ComponentNameResolver componentNameResolver; 153 private final LanguageResolver languageResolver; 154 private final DataFormatResolver dataFormatResolver; 155 private final UuidGenerator uuidGenerator; 156 private final EndpointRegistry<EndpointKey> endpoints; 157 private final Map<String, Component> components; 158 private final Map<String, Language> languages; 159 private final PropertiesComponent propertiesComponent; 160 private final BeanIntrospection beanIntrospection; 161 private final HeadersMapFactory headersMapFactory; 162 private final ReactiveExecutor reactiveExecutor; 163 private final AsyncProcessorAwaitManager asyncProcessorAwaitManager; 164 private final ExecutorServiceManager executorServiceManager; 165 private final ShutdownStrategy shutdownStrategy; 166 private final ClassLoader applicationContextClassLoader; 167 private final UnitOfWorkFactory unitOfWorkFactory; 168 private final RouteController routeController; 169 private final InflightRepository inflightRepository; 170 private final Injector injector; 171 private final ClassResolver classResolver; 172 private final Map<String, String> globalOptions; 173 private final String name; 174 private final boolean eventNotificationApplicable; 175 private final boolean useDataType; 176 private final boolean useBreadcrumb; 177 private final String mdcLoggingKeysPattern; 178 private final boolean useMDCLogging; 179 private final List<Route> routes; 180 private final boolean messageHistory; 181 private final boolean allowUseOriginalMessage; 182 private final boolean logExhaustedMessageBody; 183 private final String version; 184 private Date startDate; 185 186 LightweightRuntimeCamelContext(CamelContext reference, CamelContext context) { 187 this.reference = reference; 188 registry = context.getRegistry(); 189 typeConverter = new CoreTypeConverterRegistry(context.getTypeConverterRegistry()); 190 modelJAXBContextFactory = context.adapt(ExtendedCamelContext.class).getModelJAXBContextFactory(); 191 camelRuntimeCatalog = context.adapt(ExtendedCamelContext.class).getRuntimeCamelCatalog(); 192 routes = Collections.unmodifiableList(context.getRoutes()); 193 uuidGenerator = context.getUuidGenerator(); 194 componentResolver = context.adapt(ExtendedCamelContext.class).getComponentResolver(); 195 componentNameResolver = context.adapt(ExtendedCamelContext.class).getComponentNameResolver(); 196 languageResolver = context.adapt(ExtendedCamelContext.class).getLanguageResolver(); 197 dataFormatResolver = context.adapt(ExtendedCamelContext.class).getDataFormatResolver(); 198 endpoints = (EndpointRegistry) context.getEndpointRegistry(); 199 components = context.getComponentNames().stream() 200 .collect(Collectors.toMap(s -> s, s -> context.hasComponent(s))); 201 languages = context.getLanguageNames().stream() 202 .collect(Collectors.toMap(s -> s, s -> context.resolveLanguage(s))); 203 propertiesComponent = context.getPropertiesComponent(); 204 beanIntrospection = context.adapt(ExtendedCamelContext.class).getBeanIntrospection(); 205 headersMapFactory = context.adapt(ExtendedCamelContext.class).getHeadersMapFactory(); 206 reactiveExecutor = context.adapt(ExtendedCamelContext.class).getReactiveExecutor(); 207 asyncProcessorAwaitManager = context.adapt(ExtendedCamelContext.class).getAsyncProcessorAwaitManager(); 208 executorServiceManager = context.getExecutorServiceManager(); 209 shutdownStrategy = context.getShutdownStrategy(); 210 applicationContextClassLoader = context.getApplicationContextClassLoader(); 211 unitOfWorkFactory = context.adapt(ExtendedCamelContext.class).getUnitOfWorkFactory(); 212 routeController = context.getRouteController(); 213 inflightRepository = context.getInflightRepository(); 214 globalOptions = context.getGlobalOptions(); 215 injector = context.getInjector(); 216 classResolver = context.getClassResolver(); 217 name = context.getName(); 218 eventNotificationApplicable = context.adapt(ExtendedCamelContext.class).isEventNotificationApplicable(); 219 useDataType = context.isUseDataType(); 220 useBreadcrumb = context.isUseBreadcrumb(); 221 mdcLoggingKeysPattern = context.getMDCLoggingKeysPattern(); 222 useMDCLogging = context.isUseMDCLogging(); 223 messageHistory = context.isMessageHistory(); 224 allowUseOriginalMessage = context.isAllowUseOriginalMessage(); 225 logExhaustedMessageBody = context.isLogExhaustedMessageBody(); 226 version = context.getVersion(); 227 } 228 229 public CamelContext getCamelContextReference() { 230 return reference; 231 } 232 233 // 234 // Lifecycle 235 // 236 237 @Override 238 public boolean isStarted() { 239 return false; 240 } 241 242 @Override 243 public boolean isStarting() { 244 return false; 245 } 246 247 @Override 248 public boolean isStopped() { 249 return false; 250 } 251 252 @Override 253 public boolean isStopping() { 254 return false; 255 } 256 257 @Override 258 public boolean isSuspended() { 259 return false; 260 } 261 262 @Override 263 public boolean isRunAllowed() { 264 return false; 265 } 266 267 @Override 268 public boolean isSuspending() { 269 return false; 270 } 271 272 @Override 273 public void build() { 274 throw new UnsupportedOperationException(); 275 } 276 277 @Override 278 public void init() { 279 throw new UnsupportedOperationException(); 280 } 281 282 @Override 283 public void suspend() { 284 throw new UnsupportedOperationException(); 285 } 286 287 @Override 288 public void resume() { 289 throw new UnsupportedOperationException(); 290 } 291 292 @Override 293 public void start() { 294 startDate = new Date(); 295 LOG.info("Apache Camel {} ({}) is starting", getVersion(), getName()); 296 for (Route route : routes) { 297 route.getConsumer().start(); 298 } 299 if (LOG.isInfoEnabled()) { 300 long l = System.currentTimeMillis() - startDate.getTime(); 301 LOG.info("Apache Camel {} ({}) {} routes started in {}", 302 getVersion(), getName(), routes.size(), TimeUtils.printDuration(l)); 303 } 304 } 305 306 @Override 307 public void stop() { 308 for (Route route : routes) { 309 route.getConsumer().stop(); 310 } 311 } 312 313 @Override 314 public void shutdown() { 315 } 316 317 @Override 318 public void close() throws IOException { 319 stop(); 320 } 321 322 // 323 // RuntimeConfig 324 // 325 326 @Override 327 public void setStreamCaching(Boolean cache) { 328 throw new UnsupportedOperationException(); 329 } 330 331 @Override 332 public Boolean isStreamCaching() { 333 throw new UnsupportedOperationException(); 334 } 335 336 @Override 337 public Boolean isTracing() { 338 throw new UnsupportedOperationException(); 339 } 340 341 @Override 342 public String getTracingPattern() { 343 throw new UnsupportedOperationException(); 344 } 345 346 @Override 347 public Boolean isBacklogTracing() { 348 throw new UnsupportedOperationException(); 349 } 350 351 @Override 352 public Boolean isDebugging() { 353 throw new UnsupportedOperationException(); 354 } 355 356 @Override 357 public Boolean isMessageHistory() { 358 return messageHistory; 359 } 360 361 @Override 362 public Boolean isLogMask() { 363 throw new UnsupportedOperationException(); 364 } 365 366 @Override 367 public Boolean isLogExhaustedMessageBody() { 368 return logExhaustedMessageBody; 369 } 370 371 @Override 372 public Long getDelayer() { 373 throw new UnsupportedOperationException(); 374 } 375 376 @Override 377 public Boolean isAutoStartup() { 378 throw new UnsupportedOperationException(); 379 } 380 381 @Override 382 public ShutdownRoute getShutdownRoute() { 383 throw new UnsupportedOperationException(); 384 } 385 386 @Override 387 public ShutdownRunningTask getShutdownRunningTask() { 388 throw new UnsupportedOperationException(); 389 } 390 391 @Override 392 public void setAllowUseOriginalMessage(Boolean allowUseOriginalMessage) { 393 throw new UnsupportedOperationException(); 394 } 395 396 @Override 397 public Boolean isAllowUseOriginalMessage() { 398 return allowUseOriginalMessage; 399 } 400 401 @Override 402 public Boolean isCaseInsensitiveHeaders() { 403 throw new UnsupportedOperationException(); 404 } 405 406 @Override 407 public void setCaseInsensitiveHeaders(Boolean caseInsensitiveHeaders) { 408 throw new UnsupportedOperationException(); 409 } 410 411 412 // 413 // Model 414 // 415 416 @Override 417 public Registry getRegistry() { 418 return registry; 419 } 420 421 @Override 422 public TypeConverterRegistry getTypeConverterRegistry() { 423 return typeConverter; 424 } 425 426 @Override 427 public ModelJAXBContextFactory getModelJAXBContextFactory() { 428 return modelJAXBContextFactory; 429 } 430 431 @Override 432 public ComponentResolver getComponentResolver() { 433 return componentResolver; 434 } 435 436 @Override 437 public ComponentNameResolver getComponentNameResolver() { 438 return componentNameResolver; 439 } 440 441 @Override 442 public LanguageResolver getLanguageResolver() { 443 return languageResolver; 444 } 445 446 @Override 447 public DataFormatResolver getDataFormatResolver() { 448 return dataFormatResolver; 449 } 450 451 @Override 452 public UuidGenerator getUuidGenerator() { 453 return uuidGenerator; 454 } 455 456 @Override 457 public <T extends CamelContext> T adapt(Class<T> type) { 458 if (type.isInstance(this)) { 459 return type.cast(this); 460 } 461 throw new UnsupportedOperationException(); 462 } 463 464 @Override 465 public <T> T getExtension(Class<T> type) { 466 throw new UnsupportedOperationException(); 467 } 468 469 @Override 470 public <T> void setExtension(Class<T> type, T module) { 471 throw new UnsupportedOperationException(); 472 } 473 474 @Override 475 public boolean isVetoStarted() { 476 throw new UnsupportedOperationException(); 477 } 478 479 @Override 480 public String getName() { 481 return name; 482 } 483 484 @Override 485 public CamelContextNameStrategy getNameStrategy() { 486 throw new UnsupportedOperationException(); 487 } 488 489 @Override 490 public void setNameStrategy(CamelContextNameStrategy nameStrategy) { 491 throw new UnsupportedOperationException(); 492 } 493 494 @Override 495 public ManagementNameStrategy getManagementNameStrategy() { 496 throw new UnsupportedOperationException(); 497 } 498 499 @Override 500 public void setManagementNameStrategy(ManagementNameStrategy nameStrategy) { 501 throw new UnsupportedOperationException(); 502 } 503 504 @Override 505 public String getManagementName() { 506 throw new UnsupportedOperationException(); 507 } 508 509 @Override 510 public void setManagementName(String name) { 511 throw new UnsupportedOperationException(); 512 } 513 514 @Override 515 public String getVersion() { 516 return version; 517 } 518 519 @Override 520 public ServiceStatus getStatus() { 521 return ServiceStatus.Started; 522 } 523 524 @Override 525 public String getUptime() { 526 long delta = getUptimeMillis(); 527 if (delta == 0) { 528 return ""; 529 } 530 return TimeUtils.printDuration(delta); 531 } 532 533 @Override 534 public long getUptimeMillis() { 535 if (startDate == null) { 536 return 0; 537 } 538 return new Date().getTime() - startDate.getTime(); 539 } 540 541 @Override 542 public Date getStartDate() { 543 return startDate; 544 } 545 546 @Override 547 public void addService(Object object) throws Exception { 548 } 549 550 @Override 551 public void addService(Object object, boolean stopOnShutdown) throws Exception { 552 553 } 554 555 @Override 556 public void addService(Object object, boolean stopOnShutdown, boolean forceStart) throws Exception { 557 558 } 559 560 @Override 561 public void addPrototypeService(Object object) throws Exception { 562 563 } 564 565 @Override 566 public boolean removeService(Object object) throws Exception { 567 return false; 568 } 569 570 @Override 571 public boolean hasService(Object object) { 572 return false; 573 } 574 575 @Override 576 public <T> T hasService(Class<T> type) { 577 return null; 578 } 579 580 @Override 581 public <T> Set<T> hasServices(Class<T> type) { 582 return null; 583 } 584 585 @Override 586 public void deferStartService(Object object, boolean stopOnShutdown) throws Exception { 587 } 588 589 @Override 590 public void addStartupListener(StartupListener listener) throws Exception { 591 } 592 593 @Override 594 public Component hasComponent(String componentName) { 595 return components.get(componentName); 596 } 597 598 @Override 599 public Component getComponent(String componentName) { 600 return getComponent(name, true, true); 601 } 602 603 @Override 604 public Component getComponent(String name, boolean autoCreateComponents) { 605 return getComponent(name, autoCreateComponents, true); 606 } 607 608 @Override 609 public Component getComponent(String name, boolean autoCreateComponents, boolean autoStart) { 610 return components.get(name); 611 } 612 613 @Override 614 public <T extends Component> T getComponent(String name, Class<T> componentType) { 615 return componentType.cast(hasComponent(name)); 616 } 617 618 @Override 619 public List<String> getComponentNames() { 620 return new ArrayList<>(components.keySet()); 621 } 622 623 @Override 624 public EndpointRegistry<? extends ValueHolder<String>> getEndpointRegistry() { 625 return endpoints; 626 } 627 628 @Override 629 public Endpoint getEndpoint(String uri) { 630 return doGetEndpoint(uri, false, false); 631 } 632 633 /** 634 * Normalize uri so we can do endpoint hits with minor mistakes and 635 * parameters is not in the same order. 636 * 637 * @param uri the uri 638 * @return normalized uri 639 * @throws ResolveEndpointFailedException if uri cannot be normalized 640 */ 641 protected static String normalizeEndpointUri(String uri) { 642 try { 643 uri = URISupport.normalizeUri(uri); 644 } catch (Exception e) { 645 throw new ResolveEndpointFailedException(uri, e); 646 } 647 return uri; 648 } 649 650 @Override 651 public Endpoint getEndpoint(String uri, Map<String, Object> parameters) { 652 return doGetEndpoint(uri, parameters, false); 653 } 654 655 @Override 656 public <T extends Endpoint> T getEndpoint(String name, Class<T> endpointType) { 657 Endpoint endpoint = getEndpoint(name); 658 if (endpoint == null) { 659 throw new NoSuchEndpointException(name); 660 } 661 if (endpoint instanceof InterceptSendToEndpoint) { 662 endpoint = ((InterceptSendToEndpoint)endpoint).getOriginalEndpoint(); 663 } 664 if (endpointType.isInstance(endpoint)) { 665 return endpointType.cast(endpoint); 666 } else { 667 throw new IllegalArgumentException("The endpoint is not of type: " + endpointType + " but is: " + endpoint.getClass().getCanonicalName()); 668 } 669 } 670 671 @Override 672 public Collection<Endpoint> getEndpoints() { 673 return new ArrayList<>(endpoints.values()); 674 } 675 676 @Override 677 public Map<String, Endpoint> getEndpointMap() { 678 throw new UnsupportedOperationException(); 679 } 680 681 @Override 682 public Endpoint hasEndpoint(String uri) { 683 return endpoints.get(new EndpointKey(uri)); 684 } 685 686 @Override 687 public GlobalEndpointConfiguration getGlobalEndpointConfiguration() { 688 throw new UnsupportedOperationException(); 689 } 690 691 @Override 692 public RouteController getRouteController() { 693 return routeController; 694 } 695 696 @Override 697 public List<Route> getRoutes() { 698 return routes; 699 } 700 701 @Override 702 public int getRoutesSize() { 703 return routes.size(); 704 } 705 706 @Override 707 public Route getRoute(String id) { 708 throw new UnsupportedOperationException(); 709 } 710 711 @Override 712 public Processor getProcessor(String id) { 713 throw new UnsupportedOperationException(); 714 } 715 716 @Override 717 public <T extends Processor> T getProcessor(String id, Class<T> type) { 718 throw new UnsupportedOperationException(); 719 } 720 721 @Override 722 public List<RoutePolicyFactory> getRoutePolicyFactories() { 723 throw new UnsupportedOperationException(); 724 } 725 726 @Override 727 public RestConfiguration getRestConfiguration() { 728 throw new UnsupportedOperationException(); 729 } 730 731 @Override 732 public RestRegistry getRestRegistry() { 733 throw new UnsupportedOperationException(); 734 } 735 736 @Override 737 public TypeConverter getTypeConverter() { 738 return typeConverter; 739 } 740 741 @Override 742 public <T> T getRegistry(Class<T> type) { 743 return type.cast(registry); 744 } 745 746 @Override 747 public Injector getInjector() { 748 return injector; 749 } 750 751 @Override 752 public List<LifecycleStrategy> getLifecycleStrategies() { 753 throw new UnsupportedOperationException(); 754 } 755 756 @Override 757 public Language resolveLanguage(String language) throws NoSuchLanguageException { 758 Language answer; 759 synchronized (languages) { 760 answer = languages.get(language); 761 // check if the language is singleton, if so return the shared 762 // instance 763 if (answer instanceof IsSingleton) { 764 boolean singleton = ((IsSingleton)answer).isSingleton(); 765 if (singleton) { 766 return answer; 767 } 768 } 769 // language not known or not singleton, then use resolver 770 answer = getLanguageResolver().resolveLanguage(language, reference); 771 // inject CamelContext if aware 772 if (answer != null) { 773 if (answer instanceof CamelContextAware) { 774 ((CamelContextAware)answer).setCamelContext(reference); 775 } 776 if (answer instanceof Service) { 777 try { 778 startService((Service)answer); 779 } catch (Exception e) { 780 throw RuntimeCamelException.wrapRuntimeCamelException(e); 781 } 782 } 783 languages.put(language, answer); 784 } 785 } 786 return answer; 787 } 788 789 @Override 790 public String resolvePropertyPlaceholders(String text) { 791 if (text != null && text.contains(PropertiesComponent.PREFIX_TOKEN)) { 792 // the parser will throw exception if property key was not found 793 return getPropertiesComponent().parseUri(text); 794 } 795 // is the value a known field (currently we only support 796 // constants from Exchange.class) 797 if (text != null && text.startsWith("Exchange.")) { 798 String field = StringHelper.after(text, "Exchange."); 799 String constant = ExchangeConstantProvider.lookup(field); 800 if (constant != null) { 801 return constant; 802 } else { 803 throw new IllegalArgumentException("Constant field with name: " + field + " not found on Exchange.class"); 804 } 805 } 806 // return original text as is 807 return text; 808 } 809 810 @Override 811 public PropertiesComponent getPropertiesComponent() { 812 return propertiesComponent; 813 } 814 815 @Override 816 public List<String> getLanguageNames() { 817 throw new UnsupportedOperationException(); 818 } 819 820 @Override 821 public ProducerTemplate createProducerTemplate() { 822 throw new UnsupportedOperationException(); 823 } 824 825 @Override 826 public ProducerTemplate createProducerTemplate(int maximumCacheSize) { 827 throw new UnsupportedOperationException(); 828 } 829 830 @Override 831 public FluentProducerTemplate createFluentProducerTemplate() { 832 throw new UnsupportedOperationException(); 833 } 834 835 @Override 836 public FluentProducerTemplate createFluentProducerTemplate(int maximumCacheSize) { 837 throw new UnsupportedOperationException(); 838 } 839 840 @Override 841 public ConsumerTemplate createConsumerTemplate() { 842 throw new UnsupportedOperationException(); 843 } 844 845 @Override 846 public ConsumerTemplate createConsumerTemplate(int maximumCacheSize) { 847 throw new UnsupportedOperationException(); 848 } 849 850 @Override 851 public DataFormat resolveDataFormat(String name) { 852 throw new UnsupportedOperationException(); 853 } 854 855 @Override 856 public DataFormat createDataFormat(String name) { 857 throw new UnsupportedOperationException(); 858 } 859 860 @Override 861 public Transformer resolveTransformer(String model) { 862 throw new UnsupportedOperationException(); 863 } 864 865 @Override 866 public Transformer resolveTransformer(DataType from, DataType to) { 867 throw new UnsupportedOperationException(); 868 } 869 870 @Override 871 public TransformerRegistry getTransformerRegistry() { 872 throw new UnsupportedOperationException(); 873 } 874 875 @Override 876 public Validator resolveValidator(DataType type) { 877 throw new UnsupportedOperationException(); 878 } 879 880 @Override 881 public ValidatorRegistry getValidatorRegistry() { 882 throw new UnsupportedOperationException(); 883 } 884 885 @Override 886 public void setGlobalOptions(Map<String, String> globalOptions) { 887 throw new UnsupportedOperationException(); 888 } 889 890 @Override 891 public Map<String, String> getGlobalOptions() { 892 return globalOptions; 893 } 894 895 @Override 896 public String getGlobalOption(String key) { 897 String value = getGlobalOptions().get(key); 898 if (ObjectHelper.isNotEmpty(value)) { 899 try { 900 value = resolvePropertyPlaceholders(value); 901 } catch (Exception e) { 902 throw new RuntimeCamelException("Error getting global option: " + key, e); 903 } 904 } 905 return value; 906 } 907 908 @Override 909 public ClassResolver getClassResolver() { 910 return classResolver; 911 } 912 913 @Override 914 public ManagementStrategy getManagementStrategy() { 915 return null; 916 } 917 918 @Override 919 public void disableJMX() throws IllegalStateException { 920 throw new UnsupportedOperationException(); 921 } 922 923 @Override 924 public InflightRepository getInflightRepository() { 925 return inflightRepository; 926 } 927 928 @Override 929 public ClassLoader getApplicationContextClassLoader() { 930 return applicationContextClassLoader; 931 } 932 933 @Override 934 public ShutdownStrategy getShutdownStrategy() { 935 return shutdownStrategy; 936 } 937 938 @Override 939 public ExecutorServiceManager getExecutorServiceManager() { 940 return executorServiceManager; 941 } 942 943 @Override 944 public MessageHistoryFactory getMessageHistoryFactory() { 945 throw new UnsupportedOperationException(); 946 } 947 948 @Override 949 public Debugger getDebugger() { 950 throw new UnsupportedOperationException(); 951 } 952 953 @Override 954 public Tracer getTracer() { 955 throw new UnsupportedOperationException(); 956 } 957 958 @Override 959 public Boolean isLoadTypeConverters() { 960 throw new UnsupportedOperationException(); 961 } 962 963 @Override 964 public void setLoadTypeConverters(Boolean loadTypeConverters) { 965 throw new UnsupportedOperationException(); 966 } 967 968 @Override 969 public Boolean isTypeConverterStatisticsEnabled() { 970 throw new UnsupportedOperationException(); 971 } 972 973 @Override 974 public void setTypeConverterStatisticsEnabled(Boolean typeConverterStatisticsEnabled) { 975 throw new UnsupportedOperationException(); 976 } 977 978 @Override 979 public Boolean isUseMDCLogging() { 980 return useMDCLogging; 981 } 982 983 @Override 984 public void setUseMDCLogging(Boolean useMDCLogging) { 985 throw new UnsupportedOperationException(); 986 } 987 988 @Override 989 public String getMDCLoggingKeysPattern() { 990 return mdcLoggingKeysPattern; 991 } 992 993 @Override 994 public void setMDCLoggingKeysPattern(String pattern) { 995 throw new UnsupportedOperationException(); 996 } 997 998 @Override 999 public Boolean isUseDataType() { 1000 return useDataType; 1001 } 1002 1003 @Override 1004 public void setUseDataType(Boolean useDataType) { 1005 throw new UnsupportedOperationException(); 1006 } 1007 1008 @Override 1009 public Boolean isUseBreadcrumb() { 1010 return useBreadcrumb; 1011 } 1012 1013 @Override 1014 public void setUseBreadcrumb(Boolean useBreadcrumb) { 1015 throw new UnsupportedOperationException(); 1016 } 1017 1018 @Override 1019 public StreamCachingStrategy getStreamCachingStrategy() { 1020 throw new UnsupportedOperationException(); 1021 } 1022 1023 @Override 1024 public RuntimeEndpointRegistry getRuntimeEndpointRegistry() { 1025 throw new UnsupportedOperationException(); 1026 } 1027 1028 @Override 1029 public SSLContextParameters getSSLContextParameters() { 1030 throw new UnsupportedOperationException(); 1031 } 1032 1033 // 1034 // ExtendedCamelContext 1035 // 1036 1037 @Override 1038 public Endpoint getPrototypeEndpoint(String uri) { 1039 throw new UnsupportedOperationException(); 1040 } 1041 1042 @Override 1043 public Endpoint getPrototypeEndpoint(NormalizedEndpointUri uri) { 1044 throw new UnsupportedOperationException(); 1045 } 1046 1047 @Override 1048 public Endpoint hasEndpoint(NormalizedEndpointUri uri) { 1049 EndpointKey key; 1050 if (uri instanceof EndpointKey) { 1051 key = (EndpointKey) uri; 1052 } else { 1053 key = getEndpointKeyPreNormalized(uri.getUri()); 1054 } 1055 return endpoints.get(key); 1056 } 1057 1058 @Override 1059 public Endpoint getEndpoint(NormalizedEndpointUri uri) { 1060 return doGetEndpoint(uri.getUri(), true, false); 1061 } 1062 1063 @Override 1064 public Endpoint getEndpoint(NormalizedEndpointUri uri, Map<String, Object> parameters) { 1065 return doGetEndpoint(uri.getUri(), parameters, true); 1066 } 1067 1068 protected Endpoint doGetEndpoint(String uri, boolean normalized, boolean prototype) { 1069 StringHelper.notEmpty(uri, "uri"); 1070 // in case path has property placeholders then try to let property 1071 // component resolve those 1072 if (!normalized) { 1073 try { 1074 uri = resolvePropertyPlaceholders(uri); 1075 } catch (Exception e) { 1076 throw new ResolveEndpointFailedException(uri, e); 1077 } 1078 } 1079 final String rawUri = uri; 1080 // normalize uri so we can do endpoint hits with minor mistakes and 1081 // parameters is not in the same order 1082 if (!normalized) { 1083 uri = normalizeEndpointUri(uri); 1084 } 1085 String scheme; 1086 Endpoint answer = null; 1087 if (!prototype) { 1088 // use optimized method to get the endpoint uri 1089 EndpointKey key = getEndpointKeyPreNormalized(uri); 1090 // only lookup and reuse existing endpoints if not prototype scoped 1091 answer = endpoints.get(key); 1092 } 1093 // unknown scheme 1094 if (answer == null) { 1095 throw new NoSuchEndpointException(uri); 1096 } 1097 return answer; 1098 } 1099 1100 protected Endpoint doGetEndpoint(String uri, Map<String, Object> parameters, boolean normalized) { 1101 StringHelper.notEmpty(uri, "uri"); 1102 // in case path has property placeholders then try to let property 1103 // component resolve those 1104 if (!normalized) { 1105 try { 1106 uri = resolvePropertyPlaceholders(uri); 1107 } catch (Exception e) { 1108 throw new ResolveEndpointFailedException(uri, e); 1109 } 1110 } 1111 final String rawUri = uri; 1112 // normalize uri so we can do endpoint hits with minor mistakes and 1113 // parameters is not in the same order 1114 if (!normalized) { 1115 uri = normalizeEndpointUri(uri); 1116 } 1117 Endpoint answer; 1118 String scheme = null; 1119 // use optimized method to get the endpoint uri 1120 EndpointKey key = getEndpointKeyPreNormalized(uri); 1121 answer = endpoints.get(key); 1122 // unknown scheme 1123 if (answer == null) { 1124 throw new ResolveEndpointFailedException(uri, "No component found with scheme: " + scheme); 1125 } 1126 return answer; 1127 } 1128 1129 protected EndpointKey getEndpointKeyPreNormalized(String uri) { 1130 return new EndpointKey(uri, true); 1131 } 1132 1133 @Override 1134 public NormalizedEndpointUri normalizeUri(String uri) { 1135 try { 1136 uri = resolvePropertyPlaceholders(uri); 1137 uri = normalizeEndpointUri(uri); 1138 return new NormalizedUri(uri); 1139 } catch (Exception e) { 1140 throw new ResolveEndpointFailedException(uri, e); 1141 } 1142 } 1143 1144 @Override 1145 public List<RouteStartupOrder> getRouteStartupOrder() { 1146 throw new UnsupportedOperationException(); 1147 } 1148 1149 @Override 1150 public CamelBeanPostProcessor getBeanPostProcessor() { 1151 throw new UnsupportedOperationException(); 1152 } 1153 1154 @Override 1155 public ManagementMBeanAssembler getManagementMBeanAssembler() { 1156 throw new UnsupportedOperationException(); 1157 } 1158 1159 @Override 1160 public AsyncProcessor createMulticast(Collection<Processor> processors, ExecutorService executor, boolean shutdownExecutorService) { 1161 throw new UnsupportedOperationException(); 1162 } 1163 1164 @Override 1165 public ErrorHandlerFactory getErrorHandlerFactory() { 1166 throw new UnsupportedOperationException(); 1167 } 1168 1169 @Override 1170 public PackageScanClassResolver getPackageScanClassResolver() { 1171 throw new UnsupportedOperationException(); 1172 } 1173 1174 @Override 1175 public PackageScanResourceResolver getPackageScanResourceResolver() { 1176 throw new UnsupportedOperationException(); 1177 } 1178 1179 @Override 1180 public FactoryFinder getDefaultFactoryFinder() { 1181 throw new UnsupportedOperationException(); 1182 } 1183 1184 @Override 1185 public FactoryFinder getFactoryFinder(String path) { 1186 throw new UnsupportedOperationException(); 1187 } 1188 1189 @Override 1190 public FactoryFinderResolver getFactoryFinderResolver() { 1191 throw new UnsupportedOperationException(); 1192 } 1193 1194 @Override 1195 public ProcessorFactory getProcessorFactory() { 1196 throw new UnsupportedOperationException(); 1197 } 1198 1199 @Override 1200 public DeferServiceFactory getDeferServiceFactory() { 1201 throw new UnsupportedOperationException(); 1202 } 1203 1204 @Override 1205 public UnitOfWorkFactory getUnitOfWorkFactory() { 1206 return unitOfWorkFactory; 1207 } 1208 1209 @Override 1210 public AnnotationBasedProcessorFactory getAnnotationBasedProcessorFactory() { 1211 throw new UnsupportedOperationException(); 1212 } 1213 1214 @Override 1215 public BeanProxyFactory getBeanProxyFactory() { 1216 throw new UnsupportedOperationException(); 1217 } 1218 1219 @Override 1220 public BeanProcessorFactory getBeanProcessorFactory() { 1221 throw new UnsupportedOperationException(); 1222 } 1223 1224 @Override 1225 public ScheduledExecutorService getErrorHandlerExecutorService() { 1226 throw new UnsupportedOperationException(); 1227 } 1228 1229 @Override 1230 public List<InterceptStrategy> getInterceptStrategies() { 1231 throw new UnsupportedOperationException(); 1232 } 1233 1234 @Override 1235 public Set<LogListener> getLogListeners() { 1236 throw new UnsupportedOperationException(); 1237 } 1238 1239 @Override 1240 public AsyncProcessorAwaitManager getAsyncProcessorAwaitManager() { 1241 return asyncProcessorAwaitManager; 1242 } 1243 1244 @Override 1245 public BeanIntrospection getBeanIntrospection() { 1246 return beanIntrospection; 1247 } 1248 1249 @Override 1250 public HeadersMapFactory getHeadersMapFactory() { 1251 return headersMapFactory; 1252 } 1253 1254 @Override 1255 public ReactiveExecutor getReactiveExecutor() { 1256 return reactiveExecutor; 1257 } 1258 1259 @Override 1260 public boolean isEventNotificationApplicable() { 1261 return eventNotificationApplicable; 1262 } 1263 1264 @Override 1265 public ModelToXMLDumper getModelToXMLDumper() { 1266 throw new UnsupportedOperationException(); 1267 } 1268 1269 @Override 1270 public RuntimeCamelCatalog getRuntimeCamelCatalog() { 1271 throw new UnsupportedOperationException(); 1272 } 1273 1274 @Override 1275 public ConfigurerResolver getConfigurerResolver() { 1276 throw new UnsupportedOperationException(); 1277 } 1278 1279 @Override 1280 public void addRoute(Route route) { 1281 throw new UnsupportedOperationException(); 1282 } 1283 1284 @Override 1285 public void removeRoute(Route route) { 1286 throw new UnsupportedOperationException(); 1287 } 1288 1289 @Override 1290 public Processor createErrorHandler(Route route, Processor processor) throws Exception { 1291 // TODO: need to revisit this in order to support dynamic endpoints uri 1292 throw new UnsupportedOperationException(); 1293 } 1294 1295 // 1296 // CatalogCamelContext 1297 // 1298 1299 @Override 1300 public String getComponentParameterJsonSchema(String componentName) throws IOException { 1301 Class<?> clazz; 1302 Object instance = getRegistry().lookupByNameAndType(componentName, Component.class); 1303 if (instance != null) { 1304 clazz = instance.getClass(); 1305 } else { 1306 clazz = getFactoryFinder(DefaultComponentResolver.RESOURCE_PATH).findClass(componentName).orElse(null); 1307 if (clazz == null) { 1308 instance = hasComponent(componentName); 1309 if (instance != null) { 1310 clazz = instance.getClass(); 1311 } else { 1312 return null; 1313 } 1314 } 1315 } 1316 // special for ActiveMQ as it is really just JMS 1317 if ("ActiveMQComponent".equals(clazz.getSimpleName())) { 1318 return getComponentParameterJsonSchema("jms"); 1319 } else { 1320 return getJsonSchema(clazz.getPackage().getName(), componentName); 1321 } 1322 } 1323 1324 @Override 1325 public String getDataFormatParameterJsonSchema(String dataFormatName) throws IOException { 1326 Class<?> clazz; 1327 Object instance = getRegistry().lookupByNameAndType(dataFormatName, DataFormat.class); 1328 if (instance != null) { 1329 clazz = instance.getClass(); 1330 } else { 1331 clazz = getFactoryFinder(DefaultDataFormatResolver.DATAFORMAT_RESOURCE_PATH).findClass(dataFormatName).orElse(null); 1332 if (clazz == null) { 1333 return null; 1334 } 1335 } 1336 return getJsonSchema(clazz.getPackage().getName(), dataFormatName); 1337 } 1338 1339 @Override 1340 public String getLanguageParameterJsonSchema(String languageName) throws IOException { 1341 Class<?> clazz; 1342 Object instance = getRegistry().lookupByNameAndType(languageName, Language.class); 1343 if (instance != null) { 1344 clazz = instance.getClass(); 1345 } else { 1346 clazz = getFactoryFinder(DefaultLanguageResolver.LANGUAGE_RESOURCE_PATH).findClass(languageName).orElse(null); 1347 if (clazz == null) { 1348 return null; 1349 } 1350 } 1351 return getJsonSchema(clazz.getPackage().getName(), languageName); 1352 } 1353 1354 @Override 1355 public String getEipParameterJsonSchema(String eipName) throws IOException { 1356 // the eip json schema may be in some of the sub-packages so look until 1357 // we find it 1358 String[] subPackages = new String[] {"", "/config", "/dataformat", "/language", "/loadbalancer", "/rest" }; 1359 for (String sub : subPackages) { 1360 String path = CamelContextHelper.MODEL_DOCUMENTATION_PREFIX + sub + "/" + eipName + ".json"; 1361 InputStream inputStream = getClassResolver().loadResourceAsStream(path); 1362 if (inputStream != null) { 1363 try { 1364 return IOHelper.loadText(inputStream); 1365 } finally { 1366 IOHelper.close(inputStream); 1367 } 1368 } 1369 } 1370 return null; 1371 } 1372 1373 private String getJsonSchema(String packageName, String name) throws IOException { 1374 String path = packageName.replace('.', '/') + "/" + name + ".json"; 1375 InputStream inputStream = getClassResolver().loadResourceAsStream(path); 1376 if (inputStream != null) { 1377 try { 1378 return IOHelper.loadText(inputStream); 1379 } finally { 1380 IOHelper.close(inputStream); 1381 } 1382 } 1383 return null; 1384 } 1385 1386 // 1387 // Unsupported mutable methods 1388 // 1389 1390 @Override 1391 public void setName(String name) { 1392 throw new UnsupportedOperationException(); 1393 } 1394 1395 @Override 1396 public void setRegistry(Registry registry) { 1397 throw new UnsupportedOperationException(); 1398 } 1399 1400 @Override 1401 public void setupRoutes(boolean done) { 1402 throw new UnsupportedOperationException(); 1403 } 1404 1405 @Override 1406 public boolean isSetupRoutes() { 1407 return false; 1408 } 1409 1410 @Override 1411 public void setStreamCachingStrategy(StreamCachingStrategy streamCachingStrategy) { 1412 throw new UnsupportedOperationException(); 1413 } 1414 1415 @Override 1416 public void setErrorHandlerFactory(ErrorHandlerFactory errorHandlerFactory) { 1417 throw new UnsupportedOperationException(); 1418 } 1419 1420 @Override 1421 public void setComponentResolver(ComponentResolver componentResolver) { 1422 throw new UnsupportedOperationException(); 1423 } 1424 1425 @Override 1426 public void setComponentNameResolver(ComponentNameResolver componentResolver) { 1427 throw new UnsupportedOperationException(); 1428 } 1429 1430 @Override 1431 public void setLanguageResolver(LanguageResolver languageResolver) { 1432 throw new UnsupportedOperationException(); 1433 } 1434 1435 @Override 1436 public void setDataFormatResolver(DataFormatResolver dataFormatResolver) { 1437 throw new UnsupportedOperationException(); 1438 } 1439 1440 @Override 1441 public void setPackageScanClassResolver(PackageScanClassResolver resolver) { 1442 throw new UnsupportedOperationException(); 1443 } 1444 1445 @Override 1446 public void setPackageScanResourceResolver(PackageScanResourceResolver resolver) { 1447 throw new UnsupportedOperationException(); 1448 } 1449 1450 @Override 1451 public void setFactoryFinderResolver(FactoryFinderResolver resolver) { 1452 throw new UnsupportedOperationException(); 1453 } 1454 1455 @Override 1456 public void setProcessorFactory(ProcessorFactory processorFactory) { 1457 throw new UnsupportedOperationException(); 1458 } 1459 1460 @Override 1461 public void setModelJAXBContextFactory(ModelJAXBContextFactory modelJAXBContextFactory) { 1462 throw new UnsupportedOperationException(); 1463 } 1464 1465 @Override 1466 public void setUnitOfWorkFactory(UnitOfWorkFactory unitOfWorkFactory) { 1467 throw new UnsupportedOperationException(); 1468 } 1469 1470 @Override 1471 public void addInterceptStrategy(InterceptStrategy interceptStrategy) { 1472 throw new UnsupportedOperationException(); 1473 } 1474 1475 @Override 1476 public void setupManagement(Map<String, Object> options) { 1477 throw new UnsupportedOperationException(); 1478 } 1479 1480 @Override 1481 public void addLogListener(LogListener listener) { 1482 throw new UnsupportedOperationException(); 1483 } 1484 1485 @Override 1486 public void setAsyncProcessorAwaitManager(AsyncProcessorAwaitManager manager) { 1487 throw new UnsupportedOperationException(); 1488 } 1489 1490 @Override 1491 public void setBeanIntrospection(BeanIntrospection beanIntrospection) { 1492 throw new UnsupportedOperationException(); 1493 } 1494 1495 @Override 1496 public void setHeadersMapFactory(HeadersMapFactory factory) { 1497 throw new UnsupportedOperationException(); 1498 } 1499 1500 @Override 1501 public void setReactiveExecutor(ReactiveExecutor reactiveExecutor) { 1502 throw new UnsupportedOperationException(); 1503 } 1504 1505 @Override 1506 public void setEventNotificationApplicable(boolean eventNotificationApplicable) { 1507 throw new UnsupportedOperationException(); 1508 } 1509 1510 @Override 1511 public void setXMLRoutesDefinitionLoader(XMLRoutesDefinitionLoader xmlRoutesDefinitionLoader) { 1512 throw new UnsupportedOperationException(); 1513 } 1514 1515 @Override 1516 public void setModelToXMLDumper(ModelToXMLDumper modelToXMLDumper) { 1517 throw new UnsupportedOperationException(); 1518 } 1519 1520 @Override 1521 public void setRestBindingJaxbDataFormatFactory(RestBindingJaxbDataFormatFactory restBindingJaxbDataFormatFactory) { 1522 throw new UnsupportedOperationException(); 1523 } 1524 1525 @Override 1526 public RestBindingJaxbDataFormatFactory getRestBindingJaxbDataFormatFactory() { 1527 throw new UnsupportedOperationException(); 1528 } 1529 1530 @Override 1531 public void setRuntimeCamelCatalog(RuntimeCamelCatalog runtimeCamelCatalog) { 1532 throw new UnsupportedOperationException(); 1533 } 1534 1535 @Override 1536 public void setConfigurerResolver(ConfigurerResolver configurerResolver) { 1537 throw new UnsupportedOperationException(); 1538 } 1539 1540 @Override 1541 public XMLRoutesDefinitionLoader getXMLRoutesDefinitionLoader() { 1542 throw new UnsupportedOperationException(); 1543 } 1544 1545 @Override 1546 public void registerEndpointCallback(EndpointStrategy strategy) { 1547 throw new UnsupportedOperationException(); 1548 } 1549 1550 @Override 1551 public void setNodeIdFactory(NodeIdFactory factory) { 1552 throw new UnsupportedOperationException(); 1553 } 1554 1555 @Override 1556 public Endpoint addEndpoint(String uri, Endpoint endpoint) throws Exception { 1557 throw new UnsupportedOperationException(); 1558 } 1559 1560 @Override 1561 public void removeEndpoint(Endpoint endpoint) throws Exception { 1562 throw new UnsupportedOperationException(); 1563 } 1564 1565 @Override 1566 public Collection<Endpoint> removeEndpoints(String pattern) throws Exception { 1567 throw new UnsupportedOperationException(); 1568 } 1569 1570 @Override 1571 public NodeIdFactory getNodeIdFactory() { 1572 throw new UnsupportedOperationException(); 1573 } 1574 1575 @Override 1576 public void setRuntimeEndpointRegistry(RuntimeEndpointRegistry runtimeEndpointRegistry) { 1577 throw new UnsupportedOperationException(); 1578 } 1579 1580 @Override 1581 public void setSSLContextParameters(SSLContextParameters sslContextParameters) { 1582 throw new UnsupportedOperationException(); 1583 } 1584 1585 @Override 1586 public void setTracer(Tracer tracer) { 1587 throw new UnsupportedOperationException(); 1588 } 1589 1590 @Override 1591 public void setUuidGenerator(UuidGenerator uuidGenerator) { 1592 throw new UnsupportedOperationException(); 1593 } 1594 1595 @Override 1596 public void addComponent(String componentName, Component component) { 1597 throw new UnsupportedOperationException(); 1598 } 1599 1600 @Override 1601 public Component removeComponent(String componentName) { 1602 throw new UnsupportedOperationException(); 1603 } 1604 1605 @Override 1606 public void setRouteController(RouteController routeController) { 1607 throw new UnsupportedOperationException(); 1608 } 1609 1610 @Override 1611 public void addRoutes(RoutesBuilder builder) throws Exception { 1612 throw new UnsupportedOperationException(); 1613 } 1614 1615 @Override 1616 public boolean removeRoute(String routeId) throws Exception { 1617 throw new UnsupportedOperationException(); 1618 } 1619 1620 @Override 1621 public void addRoutePolicyFactory(RoutePolicyFactory routePolicyFactory) { 1622 throw new UnsupportedOperationException(); 1623 } 1624 1625 @Override 1626 public void setRestConfiguration(RestConfiguration restConfiguration) { 1627 throw new UnsupportedOperationException(); 1628 } 1629 1630 @Override 1631 public void setRestRegistry(RestRegistry restRegistry) { 1632 throw new UnsupportedOperationException(); 1633 } 1634 1635 @Override 1636 public void setDebugger(Debugger debugger) { 1637 throw new UnsupportedOperationException(); 1638 } 1639 1640 @Override 1641 public void setTracing(Boolean tracing) { 1642 throw new UnsupportedOperationException(); 1643 } 1644 1645 @Override 1646 public void setTracingPattern(String tracePattern) { 1647 throw new UnsupportedOperationException(); 1648 } 1649 1650 @Override 1651 public void setBacklogTracing(Boolean backlogTrace) { 1652 throw new UnsupportedOperationException(); 1653 } 1654 1655 @Override 1656 public void setDebugging(Boolean debugging) { 1657 throw new UnsupportedOperationException(); 1658 } 1659 1660 @Override 1661 public void setMessageHistory(Boolean messageHistory) { 1662 throw new UnsupportedOperationException(); 1663 } 1664 1665 @Override 1666 public void setLogMask(Boolean logMask) { 1667 throw new UnsupportedOperationException(); 1668 } 1669 1670 @Override 1671 public void setLogExhaustedMessageBody(Boolean logExhaustedMessageBody) { 1672 throw new UnsupportedOperationException(); 1673 } 1674 1675 @Override 1676 public void setDelayer(Long delay) { 1677 throw new UnsupportedOperationException(); 1678 } 1679 1680 @Override 1681 public void setAutoStartup(Boolean autoStartup) { 1682 throw new UnsupportedOperationException(); 1683 } 1684 1685 @Override 1686 public void setShutdownRoute(ShutdownRoute shutdownRoute) { 1687 throw new UnsupportedOperationException(); 1688 } 1689 1690 @Override 1691 public void setShutdownRunningTask(ShutdownRunningTask shutdownRunningTask) { 1692 throw new UnsupportedOperationException(); 1693 } 1694 1695 @Override 1696 public void setClassResolver(ClassResolver resolver) { 1697 throw new UnsupportedOperationException(); 1698 } 1699 1700 @Override 1701 public void setManagementStrategy(ManagementStrategy strategy) { 1702 throw new UnsupportedOperationException(); 1703 } 1704 1705 @Override 1706 public void setInflightRepository(InflightRepository repository) { 1707 throw new UnsupportedOperationException(); 1708 } 1709 1710 @Override 1711 public void setApplicationContextClassLoader(ClassLoader classLoader) { 1712 throw new UnsupportedOperationException(); 1713 } 1714 1715 @Override 1716 public void setShutdownStrategy(ShutdownStrategy shutdownStrategy) { 1717 throw new UnsupportedOperationException(); 1718 } 1719 1720 @Override 1721 public void setExecutorServiceManager(ExecutorServiceManager executorServiceManager) { 1722 throw new UnsupportedOperationException(); 1723 } 1724 1725 @Override 1726 public void setMessageHistoryFactory(MessageHistoryFactory messageHistoryFactory) { 1727 throw new UnsupportedOperationException(); 1728 } 1729 1730 @Override 1731 public void setTypeConverterRegistry(TypeConverterRegistry typeConverterRegistry) { 1732 throw new UnsupportedOperationException(); 1733 } 1734 1735 @Override 1736 public void setInjector(Injector injector) { 1737 throw new UnsupportedOperationException(); 1738 } 1739 1740 @Override 1741 public void addLifecycleStrategy(LifecycleStrategy lifecycleStrategy) { 1742 throw new UnsupportedOperationException(); 1743 } 1744 1745 @Override 1746 public void setPropertiesComponent(PropertiesComponent propertiesComponent) { 1747 throw new UnsupportedOperationException(); 1748 } 1749 1750 @Override 1751 public RouteController getInternalRouteController() { 1752 return new RouteController() { 1753 @Override 1754 public LoggingLevel getRouteStartupLoggingLevel() { 1755 throw new UnsupportedOperationException(); 1756 } 1757 1758 @Override 1759 public void setRouteStartupLoggingLevel(LoggingLevel loggingLevel) { 1760 throw new UnsupportedOperationException(); 1761 } 1762 1763 @Override 1764 public SupervisingRouteController supervising() { 1765 throw new UnsupportedOperationException(); 1766 } 1767 1768 @Override 1769 public <T extends RouteController> T adapt(Class<T> type) { 1770 return type.cast(this); 1771 } 1772 1773 @Override 1774 public Collection<Route> getControlledRoutes() { 1775 return routes; 1776 } 1777 1778 @Override 1779 public void startAllRoutes() throws Exception { 1780 throw new UnsupportedOperationException(); 1781 } 1782 1783 @Override 1784 public boolean isStartingRoutes() { 1785 return false; 1786 } 1787 1788 @Override 1789 public ServiceStatus getRouteStatus(String routeId) { 1790 return ServiceStatus.Started; 1791 } 1792 1793 @Override 1794 public void startRoute(String routeId) throws Exception { 1795 throw new UnsupportedOperationException(); 1796 } 1797 1798 @Override 1799 public void stopRoute(String routeId) throws Exception { 1800 throw new UnsupportedOperationException(); 1801 } 1802 1803 @Override 1804 public void stopRoute(String routeId, long timeout, TimeUnit timeUnit) throws Exception { 1805 throw new UnsupportedOperationException(); 1806 } 1807 1808 @Override 1809 public boolean stopRoute(String routeId, long timeout, TimeUnit timeUnit, boolean abortAfterTimeout) throws Exception { 1810 throw new UnsupportedOperationException(); 1811 } 1812 1813 @Override 1814 public void suspendRoute(String routeId) throws Exception { 1815 throw new UnsupportedOperationException(); 1816 } 1817 1818 @Override 1819 public void suspendRoute(String routeId, long timeout, TimeUnit timeUnit) throws Exception { 1820 throw new UnsupportedOperationException(); 1821 } 1822 1823 @Override 1824 public void resumeRoute(String routeId) throws Exception { 1825 throw new UnsupportedOperationException(); 1826 } 1827 1828 @Override 1829 public void setCamelContext(CamelContext camelContext) { 1830 throw new UnsupportedOperationException(); 1831 } 1832 1833 @Override 1834 public CamelContext getCamelContext() { 1835 throw new UnsupportedOperationException(); 1836 } 1837 1838 @Override 1839 public void start() { 1840 throw new UnsupportedOperationException(); 1841 } 1842 1843 @Override 1844 public void stop() { 1845 throw new UnsupportedOperationException(); 1846 } 1847 }; 1848 } 1849 1850 private void startService(Service service) throws Exception { 1851 // and register startup aware so they can be notified when 1852 // camel context has been started 1853 if (service instanceof StartupListener) { 1854 StartupListener listener = (StartupListener)service; 1855 addStartupListener(listener); 1856 } 1857 if (service instanceof CamelContextAware) { 1858 CamelContextAware aware = (CamelContextAware)service; 1859 aware.setCamelContext(reference); 1860 } 1861 service.start(); 1862 } 1863}