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.stream.Collectors; 029 030import org.apache.camel.CamelContext; 031import org.apache.camel.CamelContextAware; 032import org.apache.camel.CatalogCamelContext; 033import org.apache.camel.Component; 034import org.apache.camel.ConsumerTemplate; 035import org.apache.camel.Endpoint; 036import org.apache.camel.Experimental; 037import org.apache.camel.ExtendedCamelContext; 038import org.apache.camel.FluentProducerTemplate; 039import org.apache.camel.GlobalEndpointConfiguration; 040import org.apache.camel.IsSingleton; 041import org.apache.camel.NoSuchEndpointException; 042import org.apache.camel.NoSuchLanguageException; 043import org.apache.camel.Processor; 044import org.apache.camel.ProducerTemplate; 045import org.apache.camel.Route; 046import org.apache.camel.RouteConfigurationsBuilder; 047import org.apache.camel.RouteTemplateContext; 048import org.apache.camel.RoutesBuilder; 049import org.apache.camel.RuntimeCamelException; 050import org.apache.camel.Service; 051import org.apache.camel.ServiceStatus; 052import org.apache.camel.ShutdownRoute; 053import org.apache.camel.ShutdownRunningTask; 054import org.apache.camel.StartupListener; 055import org.apache.camel.StartupSummaryLevel; 056import org.apache.camel.TypeConverter; 057import org.apache.camel.ValueHolder; 058import org.apache.camel.impl.converter.CoreTypeConverterRegistry; 059import org.apache.camel.impl.engine.DefaultComponentResolver; 060import org.apache.camel.impl.engine.DefaultDataFormatResolver; 061import org.apache.camel.impl.engine.DefaultLanguageResolver; 062import org.apache.camel.spi.CamelContextNameStrategy; 063import org.apache.camel.spi.ClassResolver; 064import org.apache.camel.spi.DataFormat; 065import org.apache.camel.spi.DataType; 066import org.apache.camel.spi.Debugger; 067import org.apache.camel.spi.EndpointRegistry; 068import org.apache.camel.spi.ExecutorServiceManager; 069import org.apache.camel.spi.InflightRepository; 070import org.apache.camel.spi.Injector; 071import org.apache.camel.spi.InterceptSendToEndpoint; 072import org.apache.camel.spi.Language; 073import org.apache.camel.spi.LifecycleStrategy; 074import org.apache.camel.spi.ManagementNameStrategy; 075import org.apache.camel.spi.ManagementStrategy; 076import org.apache.camel.spi.MessageHistoryFactory; 077import org.apache.camel.spi.PropertiesComponent; 078import org.apache.camel.spi.Registry; 079import org.apache.camel.spi.RestConfiguration; 080import org.apache.camel.spi.RestRegistry; 081import org.apache.camel.spi.RouteController; 082import org.apache.camel.spi.RoutePolicyFactory; 083import org.apache.camel.spi.RuntimeEndpointRegistry; 084import org.apache.camel.spi.ShutdownStrategy; 085import org.apache.camel.spi.StreamCachingStrategy; 086import org.apache.camel.spi.Tracer; 087import org.apache.camel.spi.Transformer; 088import org.apache.camel.spi.TransformerRegistry; 089import org.apache.camel.spi.TypeConverterRegistry; 090import org.apache.camel.spi.UuidGenerator; 091import org.apache.camel.spi.Validator; 092import org.apache.camel.spi.ValidatorRegistry; 093import org.apache.camel.support.CamelContextHelper; 094import org.apache.camel.support.NormalizedUri; 095import org.apache.camel.support.jsse.SSLContextParameters; 096import org.apache.camel.util.IOHelper; 097import org.apache.camel.util.ObjectHelper; 098import org.apache.camel.util.TimeUtils; 099import org.apache.camel.vault.VaultConfiguration; 100import org.slf4j.Logger; 101import org.slf4j.LoggerFactory; 102 103@Experimental 104public class LightweightRuntimeCamelContext implements CamelContext, CatalogCamelContext { 105 106 private static final Logger LOG = LoggerFactory.getLogger(LightweightRuntimeCamelContext.class); 107 108 private final CamelContext reference; 109 private final Registry registry; 110 private final CoreTypeConverterRegistry typeConverter; 111 private final UuidGenerator uuidGenerator; 112 private final EndpointRegistry<? extends ValueHolder<String>> endpoints; 113 private final Map<String, Component> components; 114 private final Map<String, Language> languages; 115 private final PropertiesComponent propertiesComponent; 116 private final ExecutorServiceManager executorServiceManager; 117 private final ShutdownStrategy shutdownStrategy; 118 private final ClassLoader applicationContextClassLoader; 119 private final RouteController routeController; 120 private final InflightRepository inflightRepository; 121 private final Injector injector; 122 private final ClassResolver classResolver; 123 private final Map<String, String> globalOptions; 124 private final String name; 125 private final boolean useDataType; 126 private final boolean useBreadcrumb; 127 private final boolean dumpRoutes; 128 private final String mdcLoggingKeysPattern; 129 private final boolean useMDCLogging; 130 private final List<Route> routes; 131 private final boolean messageHistory; 132 private final boolean allowUseOriginalMessage; 133 private final boolean logExhaustedMessageBody; 134 private final String version; 135 private final LightweightCamelContextExtension lwCamelContextExtension = new LightweightCamelContextExtension(this); 136 private Date startDate; 137 private StartupSummaryLevel startupSummaryLevel; 138 139 LightweightRuntimeCamelContext(CamelContext reference, CamelContext context) { 140 this.reference = reference; 141 registry = context.getRegistry(); 142 typeConverter = new CoreTypeConverterRegistry(context.getTypeConverterRegistry()); 143 routes = Collections.unmodifiableList(context.getRoutes()); 144 uuidGenerator = context.getUuidGenerator(); 145 endpoints = context.getEndpointRegistry(); 146 components = context.getComponentNames().stream().collect(Collectors.toMap(s -> s, context::hasComponent)); 147 languages = context.getLanguageNames().stream().collect(Collectors.toMap(s -> s, context::resolveLanguage)); 148 propertiesComponent = context.getPropertiesComponent(); 149 executorServiceManager = context.getExecutorServiceManager(); 150 shutdownStrategy = context.getShutdownStrategy(); 151 applicationContextClassLoader = context.getApplicationContextClassLoader(); 152 routeController = context.getRouteController(); 153 inflightRepository = context.getInflightRepository(); 154 globalOptions = context.getGlobalOptions(); 155 injector = context.getInjector(); 156 classResolver = context.getClassResolver(); 157 name = context.getName(); 158 useDataType = context.isUseDataType(); 159 useBreadcrumb = context.isUseBreadcrumb(); 160 dumpRoutes = context.isDumpRoutes(); 161 mdcLoggingKeysPattern = context.getMDCLoggingKeysPattern(); 162 useMDCLogging = context.isUseMDCLogging(); 163 messageHistory = context.isMessageHistory(); 164 allowUseOriginalMessage = context.isAllowUseOriginalMessage(); 165 logExhaustedMessageBody = context.isLogExhaustedMessageBody(); 166 version = context.getVersion(); 167 startupSummaryLevel = context.getStartupSummaryLevel(); 168 } 169 170 // 171 // Lifecycle 172 // 173 @Override 174 public boolean isStarted() { 175 return false; 176 } 177 178 @Override 179 public boolean isStarting() { 180 return false; 181 } 182 183 @Override 184 public boolean isStopped() { 185 return false; 186 } 187 188 @Override 189 public boolean isStopping() { 190 return false; 191 } 192 193 @Override 194 public boolean isSuspended() { 195 return false; 196 } 197 198 @Override 199 public boolean isRunAllowed() { 200 return false; 201 } 202 203 @Override 204 public boolean isSuspending() { 205 return false; 206 } 207 208 @Override 209 public void build() { 210 throw new UnsupportedOperationException(); 211 } 212 213 @Override 214 public void init() { 215 throw new UnsupportedOperationException(); 216 } 217 218 @Override 219 public void suspend() { 220 throw new UnsupportedOperationException(); 221 } 222 223 @Override 224 public void resume() { 225 throw new UnsupportedOperationException(); 226 } 227 228 @Override 229 public void start() { 230 startDate = new Date(); 231 LOG.info("Apache Camel {} ({}) is starting", getVersion(), lwCamelContextExtension.getName()); 232 for (Route route : routes) { 233 route.getConsumer().start(); 234 } 235 if (LOG.isInfoEnabled()) { 236 long l = System.currentTimeMillis() - startDate.getTime(); 237 LOG.info("Apache Camel {} ({}) {} routes started in {}", 238 getVersion(), lwCamelContextExtension.getName(), routes.size(), TimeUtils.printDuration(l, true)); 239 } 240 } 241 242 @Override 243 public void stop() { 244 for (Route route : routes) { 245 route.getConsumer().stop(); 246 } 247 } 248 249 @Override 250 public void shutdown() { 251 } 252 253 // 254 // RuntimeConfig 255 // 256 257 @Override 258 public void close() throws IOException { 259 stop(); 260 } 261 262 @Override 263 public void setStreamCaching(Boolean cache) { 264 throw new UnsupportedOperationException(); 265 } 266 267 @Override 268 public Boolean isStreamCaching() { 269 throw new UnsupportedOperationException(); 270 } 271 272 @Override 273 public Boolean isTracing() { 274 throw new UnsupportedOperationException(); 275 } 276 277 @Override 278 public String getTracingPattern() { 279 throw new UnsupportedOperationException(); 280 } 281 282 @Override 283 public void setTracingPattern(String tracePattern) { 284 throw new UnsupportedOperationException(); 285 } 286 287 @Override 288 public String getTracingLoggingFormat() { 289 throw new UnsupportedOperationException(); 290 } 291 292 @Override 293 public void setTracingLoggingFormat(String format) { 294 throw new UnsupportedOperationException(); 295 } 296 297 @Override 298 public Boolean isBacklogTracing() { 299 throw new UnsupportedOperationException(); 300 } 301 302 @Override 303 public Boolean isDebugging() { 304 throw new UnsupportedOperationException(); 305 } 306 307 @Override 308 public Boolean isMessageHistory() { 309 return messageHistory; 310 } 311 312 @Override 313 public Boolean isLogMask() { 314 throw new UnsupportedOperationException(); 315 } 316 317 @Override 318 public Boolean isLogExhaustedMessageBody() { 319 return logExhaustedMessageBody; 320 } 321 322 @Override 323 public Long getDelayer() { 324 throw new UnsupportedOperationException(); 325 } 326 327 @Override 328 public void setDelayer(Long delay) { 329 throw new UnsupportedOperationException(); 330 } 331 332 @Override 333 public Boolean isAutoStartup() { 334 throw new UnsupportedOperationException(); 335 } 336 337 @Override 338 public ShutdownRoute getShutdownRoute() { 339 throw new UnsupportedOperationException(); 340 } 341 342 @Override 343 public void setShutdownRoute(ShutdownRoute shutdownRoute) { 344 throw new UnsupportedOperationException(); 345 } 346 347 @Override 348 public ShutdownRunningTask getShutdownRunningTask() { 349 throw new UnsupportedOperationException(); 350 } 351 352 // 353 // Model 354 // 355 356 @Override 357 public void setShutdownRunningTask(ShutdownRunningTask shutdownRunningTask) { 358 throw new UnsupportedOperationException(); 359 } 360 361 @Override 362 public void setAllowUseOriginalMessage(Boolean allowUseOriginalMessage) { 363 throw new UnsupportedOperationException(); 364 } 365 366 @Override 367 public Boolean isAllowUseOriginalMessage() { 368 return allowUseOriginalMessage; 369 } 370 371 @Override 372 public Boolean isCaseInsensitiveHeaders() { 373 throw new UnsupportedOperationException(); 374 } 375 376 @Override 377 public void setCaseInsensitiveHeaders(Boolean caseInsensitiveHeaders) { 378 throw new UnsupportedOperationException(); 379 } 380 381 @Override 382 public Boolean isAutowiredEnabled() { 383 throw new UnsupportedOperationException(); 384 } 385 386 @Override 387 public void setAutowiredEnabled(Boolean autowiredEnabled) { 388 throw new UnsupportedOperationException(); 389 } 390 391 @Override 392 public TypeConverterRegistry getTypeConverterRegistry() { 393 return typeConverter; 394 } 395 396 @Override 397 public void setTypeConverterRegistry(TypeConverterRegistry typeConverterRegistry) { 398 throw new UnsupportedOperationException(); 399 } 400 401 @Override 402 public Registry getRegistry() { 403 return null; 404 } 405 406 @Override 407 public UuidGenerator getUuidGenerator() { 408 return uuidGenerator; 409 } 410 411 @Override 412 public void setUuidGenerator(UuidGenerator uuidGenerator) { 413 throw new UnsupportedOperationException(); 414 } 415 416 @Override 417 public ExtendedCamelContext getCamelContextExtension() { 418 return lwCamelContextExtension; 419 } 420 421 @Override 422 public <T> T getExtension(Class<T> type) { 423 throw new UnsupportedOperationException(); 424 } 425 426 @Override 427 public <T> void setExtension(Class<T> type, T module) { 428 throw new UnsupportedOperationException(); 429 } 430 431 @Override 432 public boolean isVetoStarted() { 433 throw new UnsupportedOperationException(); 434 } 435 436 @Override 437 public String getName() { 438 return name; 439 } 440 441 @Override 442 public String getDescription() { 443 return lwCamelContextExtension.getDescription(); 444 } 445 446 @Override 447 public CamelContextNameStrategy getNameStrategy() { 448 throw new UnsupportedOperationException(); 449 } 450 451 @Override 452 public void setNameStrategy(CamelContextNameStrategy nameStrategy) { 453 throw new UnsupportedOperationException(); 454 } 455 456 @Override 457 public ManagementNameStrategy getManagementNameStrategy() { 458 throw new UnsupportedOperationException(); 459 } 460 461 @Override 462 public void setManagementNameStrategy(ManagementNameStrategy nameStrategy) { 463 throw new UnsupportedOperationException(); 464 } 465 466 @Override 467 public String getManagementName() { 468 throw new UnsupportedOperationException(); 469 } 470 471 @Override 472 public void setManagementName(String name) { 473 throw new UnsupportedOperationException(); 474 } 475 476 @Override 477 public String getVersion() { 478 return version; 479 } 480 481 @Override 482 public ServiceStatus getStatus() { 483 return ServiceStatus.Started; 484 } 485 486 @Override 487 public String getUptime() { 488 long delta = getUptimeMillis(); 489 if (delta == 0) { 490 return ""; 491 } 492 return TimeUtils.printDuration(delta); 493 } 494 495 @Override 496 public long getUptimeMillis() { 497 if (startDate == null) { 498 return 0; 499 } 500 return new Date().getTime() - startDate.getTime(); 501 } 502 503 @Override 504 public Date getStartDate() { 505 return startDate; 506 } 507 508 @Override 509 public void addService(Object object) throws Exception { 510 } 511 512 @Override 513 public void addService(Object object, boolean stopOnShutdown) throws Exception { 514 515 } 516 517 @Override 518 public void addService(Object object, boolean stopOnShutdown, boolean forceStart) throws Exception { 519 520 } 521 522 @Override 523 public void addPrototypeService(Object object) throws Exception { 524 525 } 526 527 @Override 528 public boolean removeService(Object object) throws Exception { 529 return false; 530 } 531 532 @Override 533 public boolean hasService(Object object) { 534 return false; 535 } 536 537 @Override 538 public <T> T hasService(Class<T> type) { 539 return null; 540 } 541 542 @Override 543 public <T> Set<T> hasServices(Class<T> type) { 544 return null; 545 } 546 547 @Override 548 public void deferStartService(Object object, boolean stopOnShutdown) throws Exception { 549 } 550 551 @Override 552 public void addStartupListener(StartupListener listener) throws Exception { 553 } 554 555 @Override 556 public Component hasComponent(String componentName) { 557 return components.get(componentName); 558 } 559 560 @Override 561 public Component getComponent(String componentName) { 562 return getComponent(name, true, true); 563 } 564 565 @Override 566 public Component getComponent(String name, boolean autoCreateComponents) { 567 return getComponent(name, autoCreateComponents, true); 568 } 569 570 @Override 571 public Component getComponent(String name, boolean autoCreateComponents, boolean autoStart) { 572 return components.get(name); 573 } 574 575 @Override 576 public <T extends Component> T getComponent(String name, Class<T> componentType) { 577 return componentType.cast(hasComponent(name)); 578 } 579 580 @Override 581 public Set<String> getComponentNames() { 582 return Collections.unmodifiableSet(components.keySet()); 583 } 584 585 @Override 586 public EndpointRegistry<? extends ValueHolder<String>> getEndpointRegistry() { 587 return endpoints; 588 } 589 590 @Override 591 public Endpoint getEndpoint(String uri) { 592 return lwCamelContextExtension.doGetEndpoint(uri, false, false); 593 } 594 595 @Override 596 public Endpoint getEndpoint(String uri, Map<String, Object> parameters) { 597 return lwCamelContextExtension.doGetEndpoint(uri, parameters, false); 598 } 599 600 @Override 601 public <T extends Endpoint> T getEndpoint(String name, Class<T> endpointType) { 602 Endpoint endpoint = getEndpoint(name); 603 if (endpoint == null) { 604 throw new NoSuchEndpointException(name); 605 } 606 if (endpoint instanceof InterceptSendToEndpoint) { 607 endpoint = ((InterceptSendToEndpoint) endpoint).getOriginalEndpoint(); 608 } 609 if (endpointType.isInstance(endpoint)) { 610 return endpointType.cast(endpoint); 611 } else { 612 throw new IllegalArgumentException( 613 "The endpoint is not of type: " + endpointType + " but is: " + endpoint.getClass().getCanonicalName()); 614 } 615 } 616 617 @Override 618 public Collection<Endpoint> getEndpoints() { 619 return new ArrayList<>(endpoints.values()); 620 } 621 622 @Override 623 public Endpoint hasEndpoint(String uri) { 624 return endpoints.get(NormalizedUri.newNormalizedUri(uri, false)); 625 } 626 627 @Override 628 public GlobalEndpointConfiguration getGlobalEndpointConfiguration() { 629 throw new UnsupportedOperationException(); 630 } 631 632 @Override 633 public RouteController getRouteController() { 634 return routeController; 635 } 636 637 @Override 638 public void setRouteController(RouteController routeController) { 639 throw new UnsupportedOperationException(); 640 } 641 642 @Override 643 public List<Route> getRoutes() { 644 return routes; 645 } 646 647 @Override 648 public int getRoutesSize() { 649 return routes.size(); 650 } 651 652 @Override 653 public Route getRoute(String id) { 654 throw new UnsupportedOperationException(); 655 } 656 657 @Override 658 public Processor getProcessor(String id) { 659 throw new UnsupportedOperationException(); 660 } 661 662 @Override 663 public <T extends Processor> T getProcessor(String id, Class<T> type) { 664 throw new UnsupportedOperationException(); 665 } 666 667 @Override 668 public List<RoutePolicyFactory> getRoutePolicyFactories() { 669 throw new UnsupportedOperationException(); 670 } 671 672 @Override 673 public RestConfiguration getRestConfiguration() { 674 throw new UnsupportedOperationException(); 675 } 676 677 @Override 678 public void setRestConfiguration(RestConfiguration restConfiguration) { 679 throw new UnsupportedOperationException(); 680 } 681 682 @Override 683 public void setVaultConfiguration(VaultConfiguration vaultConfiguration) { 684 throw new UnsupportedOperationException(); 685 } 686 687 @Override 688 public VaultConfiguration getVaultConfiguration() { 689 throw new UnsupportedOperationException(); 690 } 691 692 @Override 693 public RestRegistry getRestRegistry() { 694 throw new UnsupportedOperationException(); 695 } 696 697 @Override 698 public void setRestRegistry(RestRegistry restRegistry) { 699 throw new UnsupportedOperationException(); 700 } 701 702 @Override 703 public TypeConverter getTypeConverter() { 704 return typeConverter; 705 } 706 707 @Override 708 public <T> T getRegistry(Class<T> type) { 709 return type.cast(registry); 710 } 711 712 @Override 713 public Injector getInjector() { 714 return injector; 715 } 716 717 @Override 718 public void setInjector(Injector injector) { 719 throw new UnsupportedOperationException(); 720 } 721 722 @Override 723 public List<LifecycleStrategy> getLifecycleStrategies() { 724 throw new UnsupportedOperationException(); 725 } 726 727 @Override 728 public Language resolveLanguage(String language) throws NoSuchLanguageException { 729 Language answer; 730 synchronized (languages) { 731 answer = languages.get(language); 732 // check if the language is singleton, if so return the shared 733 // instance 734 if (answer instanceof IsSingleton) { 735 boolean singleton = ((IsSingleton) answer).isSingleton(); 736 if (singleton) { 737 return answer; 738 } 739 } 740 // language not known or not singleton, then use resolver 741 answer = lwCamelContextExtension.getLanguageResolver().resolveLanguage(language, reference); 742 // inject CamelContext if aware 743 if (answer != null) { 744 CamelContextAware.trySetCamelContext(answer, reference); 745 if (answer instanceof Service) { 746 try { 747 startService((Service) answer); 748 } catch (Exception e) { 749 throw RuntimeCamelException.wrapRuntimeCamelException(e); 750 } 751 } 752 languages.put(language, answer); 753 } 754 } 755 return answer; 756 } 757 758 @Override 759 public String resolvePropertyPlaceholders(String text) { 760 return lwCamelContextExtension.resolvePropertyPlaceholders(text, false); 761 } 762 763 @Override 764 public PropertiesComponent getPropertiesComponent() { 765 return propertiesComponent; 766 } 767 768 @Override 769 public void setPropertiesComponent(PropertiesComponent propertiesComponent) { 770 throw new UnsupportedOperationException(); 771 } 772 773 @Override 774 public Set<String> getLanguageNames() { 775 throw new UnsupportedOperationException(); 776 } 777 778 @Override 779 public ProducerTemplate createProducerTemplate() { 780 throw new UnsupportedOperationException(); 781 } 782 783 @Override 784 public ProducerTemplate createProducerTemplate(int maximumCacheSize) { 785 throw new UnsupportedOperationException(); 786 } 787 788 @Override 789 public FluentProducerTemplate createFluentProducerTemplate() { 790 throw new UnsupportedOperationException(); 791 } 792 793 @Override 794 public FluentProducerTemplate createFluentProducerTemplate(int maximumCacheSize) { 795 throw new UnsupportedOperationException(); 796 } 797 798 @Override 799 public ConsumerTemplate createConsumerTemplate() { 800 throw new UnsupportedOperationException(); 801 } 802 803 @Override 804 public ConsumerTemplate createConsumerTemplate(int maximumCacheSize) { 805 throw new UnsupportedOperationException(); 806 } 807 808 @Override 809 public DataFormat resolveDataFormat(String name) { 810 throw new UnsupportedOperationException(); 811 } 812 813 @Override 814 public DataFormat createDataFormat(String name) { 815 throw new UnsupportedOperationException(); 816 } 817 818 @Override 819 public Set<String> getDataFormatNames() { 820 throw new UnsupportedOperationException(); 821 } 822 823 @Override 824 public Transformer resolveTransformer(String model) { 825 throw new UnsupportedOperationException(); 826 } 827 828 @Override 829 public Transformer resolveTransformer(DataType from, DataType to) { 830 throw new UnsupportedOperationException(); 831 } 832 833 @Override 834 public TransformerRegistry getTransformerRegistry() { 835 throw new UnsupportedOperationException(); 836 } 837 838 @Override 839 public Validator resolveValidator(DataType type) { 840 throw new UnsupportedOperationException(); 841 } 842 843 @Override 844 public ValidatorRegistry getValidatorRegistry() { 845 throw new UnsupportedOperationException(); 846 } 847 848 @Override 849 public Map<String, String> getGlobalOptions() { 850 return globalOptions; 851 } 852 853 @Override 854 public void setGlobalOptions(Map<String, String> globalOptions) { 855 throw new UnsupportedOperationException(); 856 } 857 858 @Override 859 public String getGlobalOption(String key) { 860 String value = getGlobalOptions().get(key); 861 if (ObjectHelper.isNotEmpty(value)) { 862 try { 863 value = resolvePropertyPlaceholders(value); 864 } catch (Exception e) { 865 throw new RuntimeCamelException("Error getting global option: " + key, e); 866 } 867 } 868 return value; 869 } 870 871 @Override 872 public ClassResolver getClassResolver() { 873 return classResolver; 874 } 875 876 @Override 877 public void setClassResolver(ClassResolver resolver) { 878 throw new UnsupportedOperationException(); 879 } 880 881 @Override 882 public ManagementStrategy getManagementStrategy() { 883 return null; 884 } 885 886 @Override 887 public void setManagementStrategy(ManagementStrategy strategy) { 888 throw new UnsupportedOperationException(); 889 } 890 891 @Override 892 public void disableJMX() throws IllegalStateException { 893 throw new UnsupportedOperationException(); 894 } 895 896 @Override 897 public InflightRepository getInflightRepository() { 898 return inflightRepository; 899 } 900 901 @Override 902 public void setInflightRepository(InflightRepository repository) { 903 throw new UnsupportedOperationException(); 904 } 905 906 @Override 907 public void setTracingStandby(boolean tracingStandby) { 908 throw new UnsupportedOperationException(); 909 } 910 911 @Override 912 public boolean isTracingStandby() { 913 return false; 914 } 915 916 @Override 917 public void setBacklogTracingStandby(boolean backlogTracingStandby) { 918 throw new UnsupportedOperationException(); 919 } 920 921 @Override 922 public boolean isBacklogTracingStandby() { 923 return false; 924 } 925 926 // 927 // ExtendedCamelContext 928 // 929 930 @Override 931 public ClassLoader getApplicationContextClassLoader() { 932 return applicationContextClassLoader; 933 } 934 935 @Override 936 public void setApplicationContextClassLoader(ClassLoader classLoader) { 937 throw new UnsupportedOperationException(); 938 } 939 940 @Override 941 public ShutdownStrategy getShutdownStrategy() { 942 return shutdownStrategy; 943 } 944 945 @Override 946 public void setShutdownStrategy(ShutdownStrategy shutdownStrategy) { 947 throw new UnsupportedOperationException(); 948 } 949 950 @Override 951 public ExecutorServiceManager getExecutorServiceManager() { 952 return executorServiceManager; 953 } 954 955 @Override 956 public void setExecutorServiceManager(ExecutorServiceManager executorServiceManager) { 957 throw new UnsupportedOperationException(); 958 } 959 960 @Override 961 public MessageHistoryFactory getMessageHistoryFactory() { 962 throw new UnsupportedOperationException(); 963 } 964 965 @Override 966 public void setMessageHistoryFactory(MessageHistoryFactory messageHistoryFactory) { 967 throw new UnsupportedOperationException(); 968 } 969 970 @Override 971 public Debugger getDebugger() { 972 throw new UnsupportedOperationException(); 973 } 974 975 @Override 976 public void setDebugger(Debugger debugger) { 977 throw new UnsupportedOperationException(); 978 } 979 980 @Override 981 public Tracer getTracer() { 982 throw new UnsupportedOperationException(); 983 } 984 985 @Override 986 public void setTracer(Tracer tracer) { 987 throw new UnsupportedOperationException(); 988 } 989 990 @Override 991 public Boolean isLoadTypeConverters() { 992 throw new UnsupportedOperationException(); 993 } 994 995 @Override 996 public void setLoadTypeConverters(Boolean loadTypeConverters) { 997 throw new UnsupportedOperationException(); 998 } 999 1000 @Override 1001 public Boolean isLoadHealthChecks() { 1002 throw new UnsupportedOperationException(); 1003 } 1004 1005 @Override 1006 public Boolean isDevConsole() { 1007 throw new UnsupportedOperationException(); 1008 } 1009 1010 @Override 1011 public void setDevConsole(Boolean loadDevConsoles) { 1012 throw new UnsupportedOperationException(); 1013 } 1014 1015 @Override 1016 public Boolean isModeline() { 1017 throw new UnsupportedOperationException(); 1018 } 1019 1020 @Override 1021 public void setModeline(Boolean modeline) { 1022 throw new UnsupportedOperationException(); 1023 } 1024 1025 @Override 1026 public void setLoadHealthChecks(Boolean loadHealthChecks) { 1027 throw new UnsupportedOperationException(); 1028 } 1029 1030 @Override 1031 public Boolean isSourceLocationEnabled() { 1032 throw new UnsupportedOperationException(); 1033 } 1034 1035 @Override 1036 public void setSourceLocationEnabled(Boolean sourceLocationEnabled) { 1037 throw new UnsupportedOperationException(); 1038 } 1039 1040 @Override 1041 public Boolean isTypeConverterStatisticsEnabled() { 1042 throw new UnsupportedOperationException(); 1043 } 1044 1045 @Override 1046 public void setTypeConverterStatisticsEnabled(Boolean typeConverterStatisticsEnabled) { 1047 throw new UnsupportedOperationException(); 1048 } 1049 1050 @Override 1051 public Boolean isDumpRoutes() { 1052 return dumpRoutes; 1053 } 1054 1055 @Override 1056 public void setDumpRoutes(Boolean dumpRoutes) { 1057 throw new UnsupportedOperationException(); 1058 } 1059 1060 @Override 1061 public Boolean isUseMDCLogging() { 1062 return useMDCLogging; 1063 } 1064 1065 @Override 1066 public void setUseMDCLogging(Boolean useMDCLogging) { 1067 throw new UnsupportedOperationException(); 1068 } 1069 1070 @Override 1071 public String getMDCLoggingKeysPattern() { 1072 return mdcLoggingKeysPattern; 1073 } 1074 1075 @Override 1076 public void setMDCLoggingKeysPattern(String pattern) { 1077 throw new UnsupportedOperationException(); 1078 } 1079 1080 @Override 1081 public Boolean isUseDataType() { 1082 return useDataType; 1083 } 1084 1085 @Override 1086 public void setUseDataType(Boolean useDataType) { 1087 throw new UnsupportedOperationException(); 1088 } 1089 1090 @Override 1091 public Boolean isUseBreadcrumb() { 1092 return useBreadcrumb; 1093 } 1094 1095 @Override 1096 public void setUseBreadcrumb(Boolean useBreadcrumb) { 1097 throw new UnsupportedOperationException(); 1098 } 1099 1100 @Override 1101 public StreamCachingStrategy getStreamCachingStrategy() { 1102 throw new UnsupportedOperationException(); 1103 } 1104 1105 @Override 1106 public void setStreamCachingStrategy(StreamCachingStrategy streamCachingStrategy) { 1107 throw new UnsupportedOperationException(); 1108 } 1109 1110 @Override 1111 public RuntimeEndpointRegistry getRuntimeEndpointRegistry() { 1112 throw new UnsupportedOperationException(); 1113 } 1114 1115 @Override 1116 public void setRuntimeEndpointRegistry(RuntimeEndpointRegistry runtimeEndpointRegistry) { 1117 throw new UnsupportedOperationException(); 1118 } 1119 1120 @Override 1121 public SSLContextParameters getSSLContextParameters() { 1122 throw new UnsupportedOperationException(); 1123 } 1124 1125 @Override 1126 public void setSSLContextParameters(SSLContextParameters sslContextParameters) { 1127 throw new UnsupportedOperationException(); 1128 } 1129 1130 @Override 1131 public void setStartupSummaryLevel(StartupSummaryLevel startupSummaryLevel) { 1132 throw new UnsupportedOperationException(); 1133 } 1134 1135 @Override 1136 public StartupSummaryLevel getStartupSummaryLevel() { 1137 return startupSummaryLevel; 1138 } 1139 1140 // 1141 // Unsupported mutable methods 1142 // 1143 1144 @Override 1145 public String getComponentParameterJsonSchema(String componentName) throws IOException { 1146 Class<?> clazz; 1147 Object instance = lwCamelContextExtension.getRegistry().lookupByNameAndType(componentName, Component.class); 1148 if (instance != null) { 1149 clazz = instance.getClass(); 1150 } else { 1151 clazz = lwCamelContextExtension.getFactoryFinder(DefaultComponentResolver.RESOURCE_PATH).findClass(componentName) 1152 .orElse(null); 1153 if (clazz == null) { 1154 instance = hasComponent(componentName); 1155 if (instance != null) { 1156 clazz = instance.getClass(); 1157 } else { 1158 return null; 1159 } 1160 } 1161 } 1162 1163 return getJsonSchema(clazz.getPackage().getName(), componentName); 1164 } 1165 1166 @Override 1167 public String getDataFormatParameterJsonSchema(String dataFormatName) throws IOException { 1168 Class<?> clazz; 1169 Object instance = lwCamelContextExtension.getRegistry().lookupByNameAndType(dataFormatName, DataFormat.class); 1170 if (instance != null) { 1171 clazz = instance.getClass(); 1172 } else { 1173 clazz = lwCamelContextExtension.getFactoryFinder(DefaultDataFormatResolver.DATAFORMAT_RESOURCE_PATH) 1174 .findClass(dataFormatName).orElse(null); 1175 if (clazz == null) { 1176 return null; 1177 } 1178 } 1179 return getJsonSchema(clazz.getPackage().getName(), dataFormatName); 1180 } 1181 1182 @Override 1183 public String getLanguageParameterJsonSchema(String languageName) throws IOException { 1184 Class<?> clazz; 1185 Object instance = lwCamelContextExtension.getRegistry().lookupByNameAndType(languageName, Language.class); 1186 if (instance != null) { 1187 clazz = instance.getClass(); 1188 } else { 1189 clazz = lwCamelContextExtension.getFactoryFinder(DefaultLanguageResolver.LANGUAGE_RESOURCE_PATH) 1190 .findClass(languageName).orElse(null); 1191 if (clazz == null) { 1192 return null; 1193 } 1194 } 1195 return getJsonSchema(clazz.getPackage().getName(), languageName); 1196 } 1197 1198 @Override 1199 public String getEipParameterJsonSchema(String eipName) throws IOException { 1200 // the eip json schema may be in some of the sub-packages so look until 1201 // we find it 1202 String[] subPackages = new String[] { "", "/config", "/dataformat", "/language", "/loadbalancer", "/rest" }; 1203 for (String sub : subPackages) { 1204 String path = CamelContextHelper.MODEL_DOCUMENTATION_PREFIX + sub + "/" + eipName + ".json"; 1205 InputStream inputStream = getClassResolver().loadResourceAsStream(path); 1206 if (inputStream != null) { 1207 try { 1208 return IOHelper.loadText(inputStream); 1209 } finally { 1210 IOHelper.close(inputStream); 1211 } 1212 } 1213 } 1214 return null; 1215 } 1216 1217 private String getJsonSchema(String packageName, String name) throws IOException { 1218 String path = packageName.replace('.', '/') + "/" + name + ".json"; 1219 InputStream inputStream = getClassResolver().loadResourceAsStream(path); 1220 if (inputStream != null) { 1221 try { 1222 return IOHelper.loadText(inputStream); 1223 } finally { 1224 IOHelper.close(inputStream); 1225 } 1226 } 1227 return null; 1228 } 1229 1230 @Override 1231 public Endpoint addEndpoint(String uri, Endpoint endpoint) throws Exception { 1232 throw new UnsupportedOperationException(); 1233 } 1234 1235 @Override 1236 public void removeEndpoint(Endpoint endpoint) throws Exception { 1237 throw new UnsupportedOperationException(); 1238 } 1239 1240 @Override 1241 public Collection<Endpoint> removeEndpoints(String pattern) throws Exception { 1242 throw new UnsupportedOperationException(); 1243 } 1244 1245 @Override 1246 public void addComponent(String componentName, Component component) { 1247 throw new UnsupportedOperationException(); 1248 } 1249 1250 @Override 1251 public Component removeComponent(String componentName) { 1252 throw new UnsupportedOperationException(); 1253 } 1254 1255 @Override 1256 public void addRoutes(RoutesBuilder builder) throws Exception { 1257 throw new UnsupportedOperationException(); 1258 } 1259 1260 @Override 1261 public void addTemplatedRoutes(RoutesBuilder builder) throws Exception { 1262 throw new UnsupportedOperationException(); 1263 } 1264 1265 @Override 1266 public void addRoutesConfigurations(RouteConfigurationsBuilder builder) throws Exception { 1267 throw new UnsupportedOperationException(); 1268 } 1269 1270 @Override 1271 public boolean removeRoute(String routeId) throws Exception { 1272 throw new UnsupportedOperationException(); 1273 } 1274 1275 @Override 1276 public void addRoutePolicyFactory(RoutePolicyFactory routePolicyFactory) { 1277 throw new UnsupportedOperationException(); 1278 } 1279 1280 @Override 1281 public void setTracing(Boolean tracing) { 1282 throw new UnsupportedOperationException(); 1283 } 1284 1285 @Override 1286 public void setBacklogTracing(Boolean backlogTrace) { 1287 throw new UnsupportedOperationException(); 1288 } 1289 1290 @Override 1291 public void setDebugging(Boolean debugging) { 1292 throw new UnsupportedOperationException(); 1293 } 1294 1295 @Override 1296 public void setMessageHistory(Boolean messageHistory) { 1297 throw new UnsupportedOperationException(); 1298 } 1299 1300 @Override 1301 public void setLogMask(Boolean logMask) { 1302 throw new UnsupportedOperationException(); 1303 } 1304 1305 @Override 1306 public void setLogExhaustedMessageBody(Boolean logExhaustedMessageBody) { 1307 throw new UnsupportedOperationException(); 1308 } 1309 1310 @Override 1311 public void setAutoStartup(Boolean autoStartup) { 1312 throw new UnsupportedOperationException(); 1313 } 1314 1315 @Override 1316 public void addLifecycleStrategy(LifecycleStrategy lifecycleStrategy) { 1317 throw new UnsupportedOperationException(); 1318 } 1319 1320 @Override 1321 public String addRouteFromTemplate(String routeId, String routeTemplateId, Map<String, Object> parameters) 1322 throws Exception { 1323 throw new UnsupportedOperationException(); 1324 } 1325 1326 @Override 1327 public String addRouteFromTemplate(String routeId, String routeTemplateId, String prefixId, Map<String, Object> parameters) 1328 throws Exception { 1329 throw new UnsupportedOperationException(); 1330 } 1331 1332 @Override 1333 public String addRouteFromTemplate(String routeId, String routeTemplateId, RouteTemplateContext routeTemplateContext) 1334 throws Exception { 1335 throw new UnsupportedOperationException(); 1336 } 1337 1338 @Override 1339 public String addRouteFromTemplate( 1340 String routeId, String routeTemplateId, String prefixId, RouteTemplateContext routeTemplateContext) 1341 throws Exception { 1342 throw new UnsupportedOperationException(); 1343 } 1344 1345 @Override 1346 public void removeRouteTemplates(String pattern) throws Exception { 1347 throw new UnsupportedOperationException(); 1348 } 1349 1350 private void startService(Service service) throws Exception { 1351 // and register startup aware so they can be notified when 1352 // camel context has been started 1353 if (service instanceof StartupListener) { 1354 StartupListener listener = (StartupListener) service; 1355 addStartupListener(listener); 1356 } 1357 CamelContextAware.trySetCamelContext(service, reference); 1358 service.start(); 1359 } 1360 1361 public ExtendedCamelContext getLwCamelContextExtension() { 1362 return lwCamelContextExtension; 1363 } 1364 1365}