This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
commit 06742da5303f465f18ef1e464faa66022adb7617 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Wed Feb 5 14:24:37 2020 +0100 CAMEL-14461: camel-core - Make RuntimeCatalog optional and in its own module --- apache-camel/pom.xml | 4 + apache-camel/src/main/descriptors/common-bin.xml | 1 + catalog/camel-catalog-lucene/pom.xml | 7 - .../catalog/lucene/CamelCatalogLuceneTest.java | 2 +- catalog/camel-catalog-maven/pom.xml | 19 --- catalog/camel-catalog-provider-karaf/pom.xml | 4 - catalog/camel-catalog/pom.xml | 133 +------------------ .../org/apache/camel/catalog/CamelCatalog.java | 5 + .../catalog/CamelCatalogJSonSchemaResolver.java | 2 + .../apache/camel/catalog/DefaultCamelCatalog.java | 10 +- .../org/apache/camel/catalog/CamelCatalogTest.java | 4 + .../java/org/apache/camel/maven/ValidateMojo.java | 6 +- components/camel-file/pom.xml | 6 + .../file/GenericFileSendDynamicAware.java | 5 +- components/camel-ftp/pom.xml | 2 +- components/camel-http-base/pom.xml | 6 + .../camel/http/base/HttpSendDynamicAware.java | 5 +- .../rest/RestComponentVerifierExtension.java | 3 +- .../org/apache/camel/ExtendedCamelContext.java | 11 ++ .../camel/runtimecatalog/RuntimeCamelCatalog.java | 10 +- core/camel-base/pom.xml | 4 - .../camel/impl/engine/AbstractCamelContext.java | 21 +++ .../impl/engine/RuntimeCamelCatalogResolver.java | 76 +++++++++++ .../camel-core-catalog}/pom.xml | 84 ++++++------ .../camel/catalog}/AbstractCamelCatalog.java | 2 +- .../catalog}/CamelContextJSonSchemaResolver.java | 2 +- .../org/apache/camel/catalog}/CatalogHelper.java | 2 +- .../camel/catalog}/DefaultRuntimeCamelCatalog.java | 36 +++-- .../main/java/org/apache/camel/catalog}/Pair.java | 2 +- .../apache/camel/catalog}/SuggestionStrategy.java | 2 +- .../camel/catalog}/TimePatternConverter.java | 2 +- .../java/org/apache/camel/catalog}/URISupport.java | 2 +- .../camel/catalog}/UnsafeUriCharactersEncoder.java | 2 +- .../services/org/apache/camel/runtime-camelcatalog | 18 +++ core/camel-core-engine/pom.xml | 8 -- .../camel/impl/AbstractModelCamelContext.java | 5 - .../org/apache/camel/impl/DefaultCamelContext.java | 7 +- .../core/xml/AbstractCamelContextFactoryBean.java | 7 - core/camel-core/pom.xml | 7 + .../impl => catalog}/RuntimeCamelCatalogTest.java | 15 +-- .../camel/impl/MultipleLifecycleStrategyTest.java | 2 +- .../impl/AbstractCamelCatalogTest.java | 146 --------------------- .../mbean/ManagedRuntimeCamelCatalogMBean.java | 35 ----- .../management/JmxManagementLifecycleStrategy.java | 4 - .../mbean/ManagedRuntimeCamelCatalog.java | 60 --------- .../management/ManagedNonManagedServiceTest.java | 2 +- ...edProducerRouteAddRemoveRegisterAlwaysTest.java | 2 +- .../management/ManagedRouteAddRemoveTest.java | 2 +- .../management/ManagedRuntimeCamelCatalogTest.java | 57 -------- .../DefaultComponentVerifierExtension.java | 3 +- core/pom.xml | 1 + .../modules/ROOT/pages/camel-3x-upgrade-guide.adoc | 10 ++ parent/pom.xml | 5 + .../karaf/features/src/main/resources/features.xml | 5 +- 54 files changed, 283 insertions(+), 600 deletions(-) diff --git a/apache-camel/pom.xml b/apache-camel/pom.xml index 8bf435d..909e6e3 100644 --- a/apache-camel/pom.xml +++ b/apache-camel/pom.xml @@ -86,6 +86,10 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-core-catalog</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-cloud</artifactId> </dependency> <dependency> diff --git a/apache-camel/src/main/descriptors/common-bin.xml b/apache-camel/src/main/descriptors/common-bin.xml index 3422578..66a9d6d 100644 --- a/apache-camel/src/main/descriptors/common-bin.xml +++ b/apache-camel/src/main/descriptors/common-bin.xml @@ -37,6 +37,7 @@ <include>org.apache.camel:camel-core-engine</include> <include>org.apache.camel:camel-core-osgi</include> <include>org.apache.camel:camel-core-xml</include> + <include>org.apache.camel:camel-core-catalog</include> <include>org.apache.camel:camel-cloud</include> <include>org.apache.camel:camel-xml-jaxp</include> <include>org.apache.camel:camel-main</include> diff --git a/catalog/camel-catalog-lucene/pom.xml b/catalog/camel-catalog-lucene/pom.xml index dac9ab6..107b4cf 100644 --- a/catalog/camel-catalog-lucene/pom.xml +++ b/catalog/camel-catalog-lucene/pom.xml @@ -34,13 +34,6 @@ <properties> <firstVersion>2.17.0</firstVersion> <label>tooling</label> - - <camel.osgi.import.additional> - org.apache.lucene.*;version="${lucene-version-range}" - </camel.osgi.import.additional> - <camel.osgi.export.pkg> - org.apache.camel.catalog.lucene - </camel.osgi.export.pkg> </properties> <dependencies> diff --git a/catalog/camel-catalog-lucene/src/test/java/org/apache/camel/catalog/lucene/CamelCatalogLuceneTest.java b/catalog/camel-catalog-lucene/src/test/java/org/apache/camel/catalog/lucene/CamelCatalogLuceneTest.java index 2b5681d..cea13ae 100644 --- a/catalog/camel-catalog-lucene/src/test/java/org/apache/camel/catalog/lucene/CamelCatalogLuceneTest.java +++ b/catalog/camel-catalog-lucene/src/test/java/org/apache/camel/catalog/lucene/CamelCatalogLuceneTest.java @@ -18,7 +18,7 @@ package org.apache.camel.catalog.lucene; import org.apache.camel.catalog.CamelCatalog; import org.apache.camel.catalog.DefaultCamelCatalog; -import org.apache.camel.catalog.EndpointValidationResult; +import org.apache.camel.runtimecatalog.EndpointValidationResult; import org.junit.Before; import org.junit.Test; diff --git a/catalog/camel-catalog-maven/pom.xml b/catalog/camel-catalog-maven/pom.xml index 8fd4588..8d115fc 100644 --- a/catalog/camel-catalog-maven/pom.xml +++ b/catalog/camel-catalog-maven/pom.xml @@ -34,13 +34,6 @@ <properties> <firstVersion>2.18.0</firstVersion> <label>tooling</label> - - <camel.osgi.import.additional> - org.apache.commons.httpclient.*;version="[3.1,4.0)" - </camel.osgi.import.additional> - <camel.osgi.export.pkg> - org.apache.camel.catalog.maven - </camel.osgi.export.pkg> </properties> <dependencies> @@ -100,18 +93,6 @@ <scope>test</scope> </dependency> - </dependencies> - <build> - <plugins> - - <plugin> - <groupId>org.apache.camel</groupId> - <artifactId>camel-bundle-plugin</artifactId> - </plugin> - </plugins> - - </build> - </project> diff --git a/catalog/camel-catalog-provider-karaf/pom.xml b/catalog/camel-catalog-provider-karaf/pom.xml index b12bc2f..14f73bd 100644 --- a/catalog/camel-catalog-provider-karaf/pom.xml +++ b/catalog/camel-catalog-provider-karaf/pom.xml @@ -34,10 +34,6 @@ <properties> <firstVersion>2.18.1</firstVersion> <label>tooling</label> - - <camel.osgi.export.pkg> - org.apache.camel.catalog.karaf - </camel.osgi.export.pkg> </properties> <dependencies> diff --git a/catalog/camel-catalog/pom.xml b/catalog/camel-catalog/pom.xml index 16fdd8d..694fcfd 100644 --- a/catalog/camel-catalog/pom.xml +++ b/catalog/camel-catalog/pom.xml @@ -32,7 +32,6 @@ <description>Camel Catalog</description> <properties> - <camel.osgi.import.pkg>!org.apache.camel.util.json,*</camel.osgi.import.pkg> <!-- use by camel-catalog --> <firstVersion>2.15.0</firstVersion> <label>tooling</label> @@ -41,7 +40,11 @@ <dependencies> <!-- required dependencies by camel-catalog --> - <!-- we shade our patched ordered json-simple parser --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-core-catalog</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-util-json</artifactId> @@ -108,132 +111,6 @@ <build> <plugins> - - <!-- copy catalog source code from camel-core --> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-resources-plugin</artifactId> - <version>${maven-resources-plugin-version}</version> - <executions> - <execution> - <id>copy-resources</id> - <phase>generate-sources</phase> - <goals> - <goal>copy-resources</goal> - </goals> - <configuration> - <outputDirectory>target/generated-sources/java/org/apache/camel/catalog</outputDirectory> - <overwrite>true</overwrite> - <resources> - <resource> - <directory>../../core/camel-api/src/main/java/org/apache/camel/runtimecatalog - </directory> - <!-- the following files are maintained in camel-api and not here, so they are copied over --> - <includes> - <include>ConfigurationPropertiesValidationResult.java</include> - <include>EndpointValidationResult.java</include> - <include>JSonSchemaResolver.java</include> - <include>LanguageValidationResult.java</include> - <include>PropertiesValidationResult.java</include> - </includes> - </resource> - <resource> - <directory> - ../../core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl - </directory> - <!-- the following files are maintained in camel-base and not here, so they are copied over --> - <includes> - <include>AbstractCamelCatalog.java</include> - <include>CamelContextJsonSchemaResolver.java</include> - <include>CatalogHelper.java</include> - <include>Pair.java</include> - <include>SuggestionStrategy.java</include> - <include>TimePatternConverter.java</include> - <include>UnsafeUriCharactersEncoder.java</include> - <include>URISupport.java</include> - </includes> - </resource> - </resources> - </configuration> - </execution> - </executions> - </plugin> - <!-- rename runtimecatalog to catalog which is the package name we use here --> - <plugin> - <groupId>com.google.code.maven-replacer-plugin</groupId> - <artifactId>replacer</artifactId> - <version>1.5.3</version> - <executions> - <execution> - <phase>generate-sources</phase> - <goals> - <goal>replace</goal> - </goals> - </execution> - </executions> - <configuration> - <includes> - <include>${basedir}/target/generated-sources/java/org/apache/camel/catalog/**.java</include> - </includes> - <replacements> - <replacement> - <token>org.apache.camel.runtimecatalog.impl</token> - <value>org.apache.camel.catalog</value> - </replacement> - <replacement> - <token>org.apache.camel.runtimecatalog</token> - <value>org.apache.camel.catalog</value> - </replacement> - <replacement> - <token>org.apache.camel.support</token> - <value>org.apache.camel.catalog</value> - </replacement> - </replacements> - </configuration> - </plugin> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>build-helper-maven-plugin</artifactId> - <version>1.7</version> - <executions> - <execution> - <id>add-source</id> - <phase>generate-sources</phase> - <goals> - <goal>add-source</goal> - </goals> - <configuration> - <sources> - <source>${basedir}/target/generated-sources/java</source> - </sources> - </configuration> - </execution> - </executions> - </plugin> - - <!-- shade caffeine cache for faster Camel and spi-annotations as needed by everybody --> - <!-- shade json-simple for parsing Camel component JSon schema files --> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-shade-plugin</artifactId> - <executions> - <execution> - <phase>package</phase> - <goals> - <goal>shade</goal> - </goals> - <configuration> - <artifactSet> - <includes> - <include>org.apache.camel:camel-util-json</include> - <include>org.apache.camel:camel-tooling-model</include> - </includes> - </artifactSet> - </configuration> - </execution> - </executions> - </plugin> - <!-- generate and include all components in the catalog --> <plugin> <groupId>org.apache.camel</groupId> diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java index bbba0f8..5fabca8 100644 --- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java +++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java @@ -23,6 +23,11 @@ import java.util.Set; import javax.management.MXBean; +import org.apache.camel.runtimecatalog.ConfigurationPropertiesValidationResult; +import org.apache.camel.runtimecatalog.EndpointValidationResult; +import org.apache.camel.runtimecatalog.JSonSchemaResolver; +import org.apache.camel.runtimecatalog.LanguageValidationResult; + /** * Catalog of components, data formats, models (EIPs), languages, and more from this Apache Camel release. */ diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalogJSonSchemaResolver.java b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalogJSonSchemaResolver.java index 53b5158..96d4b78 100644 --- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalogJSonSchemaResolver.java +++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalogJSonSchemaResolver.java @@ -20,6 +20,8 @@ import java.io.IOException; import java.io.InputStream; import java.util.Map; +import org.apache.camel.runtimecatalog.JSonSchemaResolver; + /** * {@link JSonSchemaResolver} used by {@link CamelCatalog} that is able to load all the resources that the complete camel-catalog JAR provides. */ diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java index 8ffefb9..f4c0043 100644 --- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java +++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java @@ -16,6 +16,10 @@ */ package org.apache.camel.catalog; +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathFactory; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; @@ -35,13 +39,9 @@ import java.util.regex.PatternSyntaxException; import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.xml.XMLConstants; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.xpath.XPathConstants; -import javax.xml.xpath.XPathFactory; - import org.w3c.dom.Document; +import org.apache.camel.runtimecatalog.JSonSchemaResolver; import org.apache.camel.tooling.model.BaseModel; import org.apache.camel.tooling.model.ComponentModel; import org.apache.camel.tooling.model.DataFormatModel; diff --git a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java index 3a0799e..b47a82e 100644 --- a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java +++ b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java @@ -24,6 +24,10 @@ import java.util.Map; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.camel.runtimecatalog.ConfigurationPropertiesValidationResult; +import org.apache.camel.runtimecatalog.EndpointValidationResult; +import org.apache.camel.runtimecatalog.LanguageValidationResult; + import org.junit.BeforeClass; import org.junit.Test; import org.slf4j.Logger; diff --git a/catalog/camel-report-maven-plugin/src/main/java/org/apache/camel/maven/ValidateMojo.java b/catalog/camel-report-maven-plugin/src/main/java/org/apache/camel/maven/ValidateMojo.java index ca9c324..3b0a8e3 100644 --- a/catalog/camel-report-maven-plugin/src/main/java/org/apache/camel/maven/ValidateMojo.java +++ b/catalog/camel-report-maven-plugin/src/main/java/org/apache/camel/maven/ValidateMojo.java @@ -29,10 +29,7 @@ import java.util.Set; import java.util.stream.Collectors; import org.apache.camel.catalog.CamelCatalog; -import org.apache.camel.catalog.ConfigurationPropertiesValidationResult; import org.apache.camel.catalog.DefaultCamelCatalog; -import org.apache.camel.catalog.EndpointValidationResult; -import org.apache.camel.catalog.LanguageValidationResult; import org.apache.camel.catalog.lucene.LuceneSuggestionStrategy; import org.apache.camel.catalog.maven.MavenVersionManager; import org.apache.camel.parser.RouteBuilderParser; @@ -40,6 +37,9 @@ import org.apache.camel.parser.XmlRouteParser; import org.apache.camel.parser.model.CamelEndpointDetails; import org.apache.camel.parser.model.CamelRouteDetails; import org.apache.camel.parser.model.CamelSimpleExpressionDetails; +import org.apache.camel.runtimecatalog.ConfigurationPropertiesValidationResult; +import org.apache.camel.runtimecatalog.EndpointValidationResult; +import org.apache.camel.runtimecatalog.LanguageValidationResult; import org.apache.camel.support.PatternHelper; import org.apache.camel.util.IOHelper; import org.apache.camel.util.OrderedProperties; diff --git a/components/camel-file/pom.xml b/components/camel-file/pom.xml index 9598711..e3c0cdb 100644 --- a/components/camel-file/pom.xml +++ b/components/camel-file/pom.xml @@ -39,5 +39,11 @@ <artifactId>camel-support</artifactId> </dependency> + <!-- TODO: needed for dynamic to, until we have a better solution --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-core-catalog</artifactId> + </dependency> + </dependencies> </project> diff --git a/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileSendDynamicAware.java b/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileSendDynamicAware.java index 6ba90bd..97ac5c8 100644 --- a/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileSendDynamicAware.java +++ b/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileSendDynamicAware.java @@ -20,6 +20,7 @@ import java.util.LinkedHashMap; import java.util.Map; import org.apache.camel.Exchange; +import org.apache.camel.ExtendedCamelContext; import org.apache.camel.Processor; import org.apache.camel.runtimecatalog.RuntimeCamelCatalog; import org.apache.camel.spi.SendDynamicAware; @@ -41,7 +42,7 @@ public abstract class GenericFileSendDynamicAware implements SendDynamicAware { @Override public DynamicAwareEntry prepare(Exchange exchange, String uri, String originalUri) throws Exception { - RuntimeCamelCatalog catalog = exchange.getContext().getExtension(RuntimeCamelCatalog.class); + RuntimeCamelCatalog catalog = exchange.getContext().adapt(ExtendedCamelContext.class).getRuntimeCamelCatalog(); Map<String, String> properties = catalog.endpointProperties(uri); Map<String, String> lenient = catalog.endpointLenientProperties(uri); return new DynamicAwareEntry(uri, originalUri, properties, lenient); @@ -105,7 +106,7 @@ public abstract class GenericFileSendDynamicAware implements SendDynamicAware { } } - RuntimeCamelCatalog catalog = exchange.getContext().getExtension(RuntimeCamelCatalog.class); + RuntimeCamelCatalog catalog = exchange.getContext().adapt(ExtendedCamelContext.class).getRuntimeCamelCatalog(); return catalog.asEndpointUri(scheme, params, false); } else { return entry.getUri(); diff --git a/components/camel-ftp/pom.xml b/components/camel-ftp/pom.xml index a6f82fa..27990b3 100644 --- a/components/camel-ftp/pom.xml +++ b/components/camel-ftp/pom.xml @@ -33,7 +33,7 @@ <properties> <camel.osgi.import.before.defaults> - com.jcraft.jsch.*;version="[0.1.40,0.2)" + com.jcraft.jsch.*;version="[0.1.5,0.2)" </camel.osgi.import.before.defaults> </properties> diff --git a/components/camel-http-base/pom.xml b/components/camel-http-base/pom.xml index 5fc3070..9629e92 100644 --- a/components/camel-http-base/pom.xml +++ b/components/camel-http-base/pom.xml @@ -39,5 +39,11 @@ <artifactId>camel-support</artifactId> </dependency> + <!-- TODO: needed for dynamic to, until we have a better solution --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-core-catalog</artifactId> + </dependency> + </dependencies> </project> diff --git a/components/camel-http-base/src/main/java/org/apache/camel/http/base/HttpSendDynamicAware.java b/components/camel-http-base/src/main/java/org/apache/camel/http/base/HttpSendDynamicAware.java index 0f9e1ce..24b1ed8 100644 --- a/components/camel-http-base/src/main/java/org/apache/camel/http/base/HttpSendDynamicAware.java +++ b/components/camel-http-base/src/main/java/org/apache/camel/http/base/HttpSendDynamicAware.java @@ -22,6 +22,7 @@ import java.util.LinkedHashMap; import java.util.Map; import org.apache.camel.Exchange; +import org.apache.camel.ExtendedCamelContext; import org.apache.camel.Processor; import org.apache.camel.runtimecatalog.RuntimeCamelCatalog; import org.apache.camel.spi.SendDynamicAware; @@ -53,7 +54,7 @@ public class HttpSendDynamicAware implements SendDynamicAware { @Override public DynamicAwareEntry prepare(Exchange exchange, String uri, String originalUri) throws Exception { - RuntimeCamelCatalog catalog = exchange.getContext().getExtension(RuntimeCamelCatalog.class); + RuntimeCamelCatalog catalog = exchange.getContext().adapt(ExtendedCamelContext.class).getRuntimeCamelCatalog(); Map<String, String> properties = catalog.endpointProperties(uri); Map<String, String> lenient = catalog.endpointLenientProperties(uri); return new DynamicAwareEntry(uri, originalUri, properties, lenient); @@ -82,7 +83,7 @@ public class HttpSendDynamicAware implements SendDynamicAware { params.remove("path"); } } - RuntimeCamelCatalog catalog = exchange.getContext().getExtension(RuntimeCamelCatalog.class); + RuntimeCamelCatalog catalog = exchange.getContext().adapt(ExtendedCamelContext.class).getRuntimeCamelCatalog(); return catalog.asEndpointUri(scheme, params, false); } else { // no need for optimisation diff --git a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponentVerifierExtension.java b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponentVerifierExtension.java index a18848b..8c4af95 100644 --- a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponentVerifierExtension.java +++ b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponentVerifierExtension.java @@ -22,6 +22,7 @@ import java.util.Optional; import java.util.stream.Stream; import org.apache.camel.Component; +import org.apache.camel.ExtendedCamelContext; import org.apache.camel.component.extension.ComponentVerifierExtension; import org.apache.camel.component.extension.verifier.CatalogVerifierCustomizer; import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension; @@ -92,7 +93,7 @@ public class RestComponentVerifierExtension extends DefaultComponentVerifierExte if (extension.isPresent()) { final ComponentVerifierExtension verifier = extension.get(); - final RuntimeCamelCatalog catalog = getCamelContext().getExtension(RuntimeCamelCatalog.class); + final RuntimeCamelCatalog catalog = getCamelContext().adapt(ExtendedCamelContext.class).getRuntimeCamelCatalog(); final String json = catalog.componentJSonSchema("rest"); final ComponentModel model = JsonMapper.generateComponentModel(json); diff --git a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java index dfa4027..8e00093 100644 --- a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java +++ b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java @@ -23,6 +23,7 @@ import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.ScheduledExecutorService; +import org.apache.camel.runtimecatalog.RuntimeCamelCatalog; import org.apache.camel.spi.AnnotationBasedProcessorFactory; import org.apache.camel.spi.AsyncProcessorAwaitManager; import org.apache.camel.spi.BeanIntrospection; @@ -414,4 +415,14 @@ public interface ExtendedCamelContext extends CamelContext { */ ModelToXMLDumper getModelToXMLDumper(); + /** + * Gets the {@link RuntimeCamelCatalog} if available on the classpath. + */ + RuntimeCamelCatalog getRuntimeCamelCatalog(); + + /** + * Sets the {@link RuntimeCamelCatalog} to use. + */ + void setRuntimeCamelCatalog(RuntimeCamelCatalog runtimeCamelCatalog); + } diff --git a/core/camel-api/src/main/java/org/apache/camel/runtimecatalog/RuntimeCamelCatalog.java b/core/camel-api/src/main/java/org/apache/camel/runtimecatalog/RuntimeCamelCatalog.java index ccd0675..7a35677 100644 --- a/core/camel-api/src/main/java/org/apache/camel/runtimecatalog/RuntimeCamelCatalog.java +++ b/core/camel-api/src/main/java/org/apache/camel/runtimecatalog/RuntimeCamelCatalog.java @@ -16,16 +16,18 @@ */ package org.apache.camel.runtimecatalog; -import java.io.InputStream; import java.net.URISyntaxException; import java.util.Map; +import org.apache.camel.CamelContextAware; import org.apache.camel.StaticService; /** * Runtime based CamelCatalog which are included in camel-core that can provided limit CamelCatalog capabilities */ -public interface RuntimeCamelCatalog extends StaticService { +// TODO: Remove not needed API and rename to a better name/package +@Deprecated +public interface RuntimeCamelCatalog extends StaticService, CamelContextAware { // configuration @@ -79,6 +81,7 @@ public interface RuntimeCamelCatalog extends StaticService { * @param uri the endpoint uri * @return properties as key value pairs of each endpoint option */ + // TODO: needed by SendDynamicAware Map<String, String> endpointProperties(String uri) throws URISyntaxException; /** @@ -89,6 +92,7 @@ public interface RuntimeCamelCatalog extends StaticService { * @param uri the endpoint uri * @return properties as key value pairs of each lenient properties */ + // TODO: needed by SendDynamicAware Map<String, String> endpointLenientProperties(String uri) throws URISyntaxException; /** @@ -106,6 +110,7 @@ public interface RuntimeCamelCatalog extends StaticService { * @param properties the endpoint properties * @return validation result */ + // TODO: needed for extension verifier (make SPI) EndpointValidationResult validateProperties(String scheme, Map<String, String> properties); /** @@ -195,6 +200,7 @@ public interface RuntimeCamelCatalog extends StaticService { * @return the constructed endpoint uri * @throws java.net.URISyntaxException is thrown if there is encoding error */ + // TODO: needed by SendDynamicAware String asEndpointUri(String scheme, Map<String, String> properties, boolean encode) throws URISyntaxException; /** diff --git a/core/camel-base/pom.xml b/core/camel-base/pom.xml index 6260fc6..f67876d 100644 --- a/core/camel-base/pom.xml +++ b/core/camel-base/pom.xml @@ -68,10 +68,6 @@ <groupId>org.apache.camel</groupId> <artifactId>camel-util-json</artifactId> </dependency> - <dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-tooling-model</artifactId> - </dependency> <!-- required logging api dependency by camel-base --> <dependency> diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java index dc801d9..589ee23 100644 --- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java +++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java @@ -77,6 +77,7 @@ import org.apache.camel.TypeConverter; import org.apache.camel.VetoCamelContextStartException; import org.apache.camel.impl.transformer.TransformerKey; import org.apache.camel.impl.validator.ValidatorKey; +import org.apache.camel.runtimecatalog.RuntimeCamelCatalog; import org.apache.camel.spi.AnnotationBasedProcessorFactory; import org.apache.camel.spi.AsyncProcessorAwaitManager; import org.apache.camel.spi.BeanIntrospection; @@ -247,6 +248,7 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext private volatile BeanProcessorFactory beanProcessorFactory; private volatile XMLRoutesDefinitionLoader xmlRoutesDefinitionLoader; private volatile ModelToXMLDumper modelToXMLDumper; + private volatile RuntimeCamelCatalog runtimeCamelCatalog; private volatile ClassResolver classResolver; private volatile PackageScanClassResolver packageScanClassResolver; private volatile PackageScanResourceResolver packageScanResourceResolver; @@ -4162,6 +4164,23 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext } @Override + public RuntimeCamelCatalog getRuntimeCamelCatalog() { + if (runtimeCamelCatalog == null) { + synchronized (lock) { + if (runtimeCamelCatalog == null) { + setRuntimeCamelCatalog(createRuntimeCamelCatalog()); + } + } + } + return runtimeCamelCatalog; + } + + @Override + public void setRuntimeCamelCatalog(RuntimeCamelCatalog runtimeCamelCatalog) { + this.runtimeCamelCatalog = runtimeCamelCatalog; + } + + @Override public ReactiveExecutor getReactiveExecutor() { if (reactiveExecutor == null) { synchronized (lock) { @@ -4324,6 +4343,8 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext protected abstract ModelToXMLDumper createModelToXMLDumper(); + protected abstract RuntimeCamelCatalog createRuntimeCamelCatalog(); + protected abstract Tracer createTracer(); protected abstract LanguageResolver createLanguageResolver(); diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/RuntimeCamelCatalogResolver.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/RuntimeCamelCatalogResolver.java new file mode 100644 index 0000000..c7f2842 --- /dev/null +++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/RuntimeCamelCatalogResolver.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.impl.engine; + +import java.io.IOException; + +import org.apache.camel.CamelContext; +import org.apache.camel.ExtendedCamelContext; +import org.apache.camel.runtimecatalog.RuntimeCamelCatalog; +import org.apache.camel.spi.FactoryFinder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Factory to create the {@link org.apache.camel.runtimecatalog.RuntimeCamelCatalog} implementation to be used. + * + * @see RuntimeCamelCatalog + */ +public class RuntimeCamelCatalogResolver { + + public static final String RESOURCE_PATH = "META-INF/services/org/apache/camel/"; + + private static final Logger LOG = LoggerFactory.getLogger(RuntimeCamelCatalogResolver.class); + + private FactoryFinder factoryFinder; + + public RuntimeCamelCatalog resolve(CamelContext context) { + // use factory finder to find a custom implementations + Class<?> type = null; + try { + type = findFactory("runtime-camelcatalog", context); + } catch (Exception e) { + // ignore + } + + if (type != null) { + if (LOG.isDebugEnabled()) { + LOG.debug("Found RuntimeCamelCatalog: {} via: {}{}", type.getName(), factoryFinder.getResourcePath(), "runtime-camelcatalog"); + } + if (RuntimeCamelCatalog.class.isAssignableFrom(type)) { + RuntimeCamelCatalog answer = (RuntimeCamelCatalog) context.getInjector().newInstance(type, false); + answer.setCamelContext(context); + LOG.info("Detected and using RuntimeCamelCatalog: {}", answer); + return answer; + } else { + throw new IllegalArgumentException("Type is not a RuntimeCamelCatalog implementation. Found: " + type.getName()); + } + } + + // fallback to default + throw new IllegalArgumentException("Cannot find RuntimeCamelCatalog on classpath. Add camel-core-catalog to classpath."); + } + + private Class<?> findFactory(String name, CamelContext context) throws IOException { + if (factoryFinder == null) { + factoryFinder = context.adapt(ExtendedCamelContext.class).getFactoryFinder(RESOURCE_PATH); + } + return factoryFinder.findClass(name).orElse(null); + } + +} + diff --git a/catalog/camel-catalog-maven/pom.xml b/core/camel-core-catalog/pom.xml similarity index 58% copy from catalog/camel-catalog-maven/pom.xml copy to core/camel-core-catalog/pom.xml index 8fd4588..204d72f 100644 --- a/catalog/camel-catalog-maven/pom.xml +++ b/core/camel-core-catalog/pom.xml @@ -17,57 +17,37 @@ limitations under the License. --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.camel</groupId> - <artifactId>catalog</artifactId> + <artifactId>core</artifactId> <version>3.1.0-SNAPSHOT</version> + <relativePath>..</relativePath> </parent> - <artifactId>camel-catalog-maven</artifactId> + <artifactId>camel-core-catalog</artifactId> <packaging>jar</packaging> - <name>Camel :: Catalog :: Maven</name> - <description>Camel Catalog Maven</description> - <properties> - <firstVersion>2.18.0</firstVersion> - <label>tooling</label> - - <camel.osgi.import.additional> - org.apache.commons.httpclient.*;version="[3.1,4.0)" - </camel.osgi.import.additional> - <camel.osgi.export.pkg> - org.apache.camel.catalog.maven - </camel.osgi.export.pkg> - </properties> + <name>Camel :: Core Catalog</name> + <description>The Camel Core Catalog</description> <dependencies> + <!-- required dependencies by camel-core-catalog --> <dependency> <groupId>org.apache.camel</groupId> - <artifactId>camel-catalog</artifactId> - <version>${project.version}</version> - </dependency> - - <!-- use groovy grape to download JARs as that is easy to use --> - <dependency> - <groupId>org.codehaus.groovy</groupId> - <artifactId>groovy</artifactId> - <version>${groovy-version}</version> + <artifactId>camel-api</artifactId> </dependency> <dependency> - <groupId>org.apache.ivy</groupId> - <artifactId>ivy</artifactId> - <version>${ivy-version}</version> + <groupId>org.apache.camel</groupId> + <artifactId>camel-tooling-model</artifactId> </dependency> - <!-- use http client 3.x for downloading as its better than the JDK client --> <dependency> - <groupId>commons-httpclient</groupId> - <artifactId>commons-httpclient</artifactId> - <version>${httpclient-version}</version> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> </dependency> <!-- testing --> @@ -75,11 +55,33 @@ <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> + <exclusions> + <exclusion> + <groupId>org.hamcrest</groupId> + <artifactId>hamcrest-core</artifactId> + </exclusion> + </exclusions> </dependency> <dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-catalog-provider-karaf</artifactId> - <version>${project.version}</version> + <groupId>org.hamcrest</groupId> + <artifactId>hamcrest</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.awaitility</groupId> + <artifactId>awaitility</artifactId> + <scope>test</scope> + <exclusions> + <exclusion> + <groupId>org.hamcrest</groupId> + <artifactId>hamcrest-core</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <version>${assertj-version}</version> <scope>test</scope> </dependency> @@ -100,18 +102,6 @@ <scope>test</scope> </dependency> - </dependencies> - <build> - <plugins> - - <plugin> - <groupId>org.apache.camel</groupId> - <artifactId>camel-bundle-plugin</artifactId> - </plugin> - </plugins> - - </build> - </project> diff --git a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/AbstractCamelCatalog.java b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java similarity index 99% rename from core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/AbstractCamelCatalog.java rename to core/camel-core-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java index 48cd1d5..d2e4f79 100644 --- a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/AbstractCamelCatalog.java +++ b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.runtimecatalog.impl; +package org.apache.camel.catalog; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; diff --git a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/CamelContextJSonSchemaResolver.java b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/CamelContextJSonSchemaResolver.java similarity index 98% rename from core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/CamelContextJSonSchemaResolver.java rename to core/camel-core-catalog/src/main/java/org/apache/camel/catalog/CamelContextJSonSchemaResolver.java index c24b89d..6dd2fd2 100644 --- a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/CamelContextJSonSchemaResolver.java +++ b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/CamelContextJSonSchemaResolver.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.runtimecatalog.impl; +package org.apache.camel.catalog; import java.io.IOException; import java.io.InputStream; diff --git a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/CatalogHelper.java b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/CatalogHelper.java similarity index 99% rename from core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/CatalogHelper.java rename to core/camel-core-catalog/src/main/java/org/apache/camel/catalog/CatalogHelper.java index f8a5d4f..134b254 100644 --- a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/CatalogHelper.java +++ b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/CatalogHelper.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.runtimecatalog.impl; +package org.apache.camel.catalog; import java.io.BufferedReader; import java.io.IOException; diff --git a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/DefaultRuntimeCamelCatalog.java b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeCamelCatalog.java similarity index 85% rename from core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/DefaultRuntimeCamelCatalog.java rename to core/camel-core-catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeCamelCatalog.java index d0c3fb5..fd86922 100644 --- a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/DefaultRuntimeCamelCatalog.java +++ b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeCamelCatalog.java @@ -14,13 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.runtimecatalog.impl; +package org.apache.camel.catalog; import java.util.HashMap; import java.util.Map; import java.util.function.Function; import org.apache.camel.CamelContext; +import org.apache.camel.CamelContextAware; import org.apache.camel.runtimecatalog.RuntimeCamelCatalog; import org.apache.camel.tooling.model.ComponentModel; import org.apache.camel.tooling.model.DataFormatModel; @@ -32,30 +33,23 @@ import org.apache.camel.tooling.model.OtherModel; /** * Default {@link RuntimeCamelCatalog}. */ +@Deprecated public class DefaultRuntimeCamelCatalog extends AbstractCamelCatalog implements RuntimeCamelCatalog { + private CamelContext camelContext; // cache of operation -> result private final Map<String, Object> cache = new HashMap<>(); - private boolean caching; - - /** - * Creates the {@link RuntimeCamelCatalog} without caching enabled. - * - * @param camelContext the camel context - */ - public DefaultRuntimeCamelCatalog(CamelContext camelContext) { - this(camelContext, false); - } - - /** - * Creates the {@link RuntimeCamelCatalog} - * - * @param camelContext the camel context - * @param caching whether to use cache - */ - public DefaultRuntimeCamelCatalog(CamelContext camelContext, boolean caching) { - this.caching = caching; - setJSonSchemaResolver(new CamelContextJSonSchemaResolver(camelContext)); + private boolean caching = true; + + @Override + public CamelContext getCamelContext() { + return camelContext; + } + + @Override + public void setCamelContext(CamelContext camelContext) { + this.camelContext = camelContext; + this.setJSonSchemaResolver(new CamelContextJSonSchemaResolver(camelContext)); } @Override diff --git a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/Pair.java b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/Pair.java similarity index 97% rename from core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/Pair.java rename to core/camel-core-catalog/src/main/java/org/apache/camel/catalog/Pair.java index 2cd0921..2d224a1 100644 --- a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/Pair.java +++ b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/Pair.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.runtimecatalog.impl; +package org.apache.camel.catalog; import java.util.Objects; diff --git a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/SuggestionStrategy.java b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/SuggestionStrategy.java similarity index 96% rename from core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/SuggestionStrategy.java rename to core/camel-core-catalog/src/main/java/org/apache/camel/catalog/SuggestionStrategy.java index 8320e33..f6f0541 100644 --- a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/SuggestionStrategy.java +++ b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/SuggestionStrategy.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.runtimecatalog.impl; +package org.apache.camel.catalog; import java.util.Set; diff --git a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/TimePatternConverter.java b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/TimePatternConverter.java similarity index 99% rename from core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/TimePatternConverter.java rename to core/camel-core-catalog/src/main/java/org/apache/camel/catalog/TimePatternConverter.java index cf25b78..cfc5027 100644 --- a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/TimePatternConverter.java +++ b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/TimePatternConverter.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.runtimecatalog.impl; +package org.apache.camel.catalog; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/URISupport.java b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/URISupport.java similarity index 99% rename from core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/URISupport.java rename to core/camel-core-catalog/src/main/java/org/apache/camel/catalog/URISupport.java index bda5d9e..1610c4e 100644 --- a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/URISupport.java +++ b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/URISupport.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.runtimecatalog.impl; +package org.apache.camel.catalog; import java.io.UnsupportedEncodingException; import java.net.URI; diff --git a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/UnsafeUriCharactersEncoder.java b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/UnsafeUriCharactersEncoder.java similarity index 99% rename from core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/UnsafeUriCharactersEncoder.java rename to core/camel-core-catalog/src/main/java/org/apache/camel/catalog/UnsafeUriCharactersEncoder.java index 16b547d..8b5e06b 100644 --- a/core/camel-base/src/main/java/org/apache/camel/runtimecatalog/impl/UnsafeUriCharactersEncoder.java +++ b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/UnsafeUriCharactersEncoder.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.runtimecatalog.impl; +package org.apache.camel.catalog; import java.util.ArrayList; import java.util.BitSet; diff --git a/core/camel-core-catalog/src/main/resources/META-INF/services/org/apache/camel/runtime-camelcatalog b/core/camel-core-catalog/src/main/resources/META-INF/services/org/apache/camel/runtime-camelcatalog new file mode 100644 index 0000000..4286060 --- /dev/null +++ b/core/camel-core-catalog/src/main/resources/META-INF/services/org/apache/camel/runtime-camelcatalog @@ -0,0 +1,18 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +class=org.apache.camel.catalog.DefaultRuntimeCamelCatalog diff --git a/core/camel-core-engine/pom.xml b/core/camel-core-engine/pom.xml index 6ac7415..af10890 100644 --- a/core/camel-core-engine/pom.xml +++ b/core/camel-core-engine/pom.xml @@ -80,14 +80,6 @@ <groupId>org.apache.camel</groupId> <artifactId>camel-util</artifactId> </dependency> - <dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-util-json</artifactId> - </dependency> - <dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-tooling-model</artifactId> - </dependency> </dependencies> diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java index 190bd94..1976101 100644 --- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java +++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java @@ -45,7 +45,6 @@ import org.apache.camel.model.transformer.TransformerDefinition; import org.apache.camel.model.validator.ValidatorDefinition; import org.apache.camel.processor.MulticastProcessor; import org.apache.camel.reifier.dataformat.DataFormatReifier; -import org.apache.camel.runtimecatalog.RuntimeCamelCatalog; import org.apache.camel.spi.DataFormat; import org.apache.camel.spi.Registry; import org.apache.camel.spi.TransformerRegistry; @@ -87,7 +86,6 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp super(false); setDefaultExtension(HealthCheckRegistry.class, this::createHealthCheckRegistry); - setDefaultExtension(RuntimeCamelCatalog.class, this::createRuntimeCamelCatalog); if (init) { init(); @@ -266,12 +264,9 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp protected abstract HealthCheckRegistry createHealthCheckRegistry(); - protected abstract RuntimeCamelCatalog createRuntimeCamelCatalog(); - @Override protected void doStartStandardServices() { super.doStartStandardServices(); - getExtension(RuntimeCamelCatalog.class); } @Override diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java index 0f41869..9624ac5 100644 --- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java +++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java @@ -16,9 +16,8 @@ */ package org.apache.camel.impl; -import java.util.Map; - import javax.naming.Context; +import java.util.Map; import org.apache.camel.CamelContext; import org.apache.camel.Endpoint; @@ -56,10 +55,10 @@ import org.apache.camel.impl.engine.HeadersMapFactoryResolver; import org.apache.camel.impl.engine.PropertiesComponentFactoryResolver; import org.apache.camel.impl.engine.ReactiveExecutorResolver; import org.apache.camel.impl.engine.RestRegistryFactoryResolver; +import org.apache.camel.impl.engine.RuntimeCamelCatalogResolver; import org.apache.camel.impl.engine.WebSpherePackageScanClassResolver; import org.apache.camel.impl.health.DefaultHealthCheckRegistry; import org.apache.camel.runtimecatalog.RuntimeCamelCatalog; -import org.apache.camel.runtimecatalog.impl.DefaultRuntimeCamelCatalog; import org.apache.camel.spi.AsyncProcessorAwaitManager; import org.apache.camel.spi.BeanIntrospection; import org.apache.camel.spi.BeanProcessorFactory; @@ -301,7 +300,7 @@ public class DefaultCamelContext extends AbstractModelCamelContext { @Override protected RuntimeCamelCatalog createRuntimeCamelCatalog() { - return new DefaultRuntimeCamelCatalog(this, true); + return new RuntimeCamelCatalogResolver().resolve(this); } @Override diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java index 8594aee..21a6b70 100644 --- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java +++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java @@ -86,8 +86,6 @@ import org.apache.camel.model.validator.ValidatorsDefinition; import org.apache.camel.processor.interceptor.BacklogTracer; import org.apache.camel.reifier.transformer.TransformerReifier; import org.apache.camel.reifier.validator.ValidatorReifier; -import org.apache.camel.runtimecatalog.JSonSchemaResolver; -import org.apache.camel.runtimecatalog.RuntimeCamelCatalog; import org.apache.camel.spi.AsyncProcessorAwaitManager; import org.apache.camel.spi.ClassResolver; import org.apache.camel.spi.DataType; @@ -262,11 +260,6 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex LOG.info("Using custom HeadersMapFactory: {}", headersMapFactory); getContext().adapt(ExtendedCamelContext.class).setHeadersMapFactory(headersMapFactory); } - JSonSchemaResolver jsonSchemaResolver = getBeanForType(JSonSchemaResolver.class); - if (jsonSchemaResolver != null) { - LOG.info("Using custom JSonSchemaResolver: {}", jsonSchemaResolver); - getContext().getExtension(RuntimeCamelCatalog.class).setJSonSchemaResolver(jsonSchemaResolver); - } // custom type converters defined as <bean>s Map<String, TypeConverters> typeConverters = getContext().getRegistry().findByTypeWithName(TypeConverters.class); if (typeConverters != null && !typeConverters.isEmpty()) { diff --git a/core/camel-core/pom.xml b/core/camel-core/pom.xml index 079a7f8..286a9d5 100644 --- a/core/camel-core/pom.xml +++ b/core/camel-core/pom.xml @@ -237,6 +237,13 @@ <scope>test</scope> </dependency> + <!-- for testing component verifier extensions --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-core-catalog</artifactId> + <scope>test</scope> + </dependency> + </dependencies> <build> diff --git a/core/camel-core/src/test/java/org/apache/camel/runtimecatalog/impl/RuntimeCamelCatalogTest.java b/core/camel-core/src/test/java/org/apache/camel/catalog/RuntimeCamelCatalogTest.java similarity index 97% rename from core/camel-core/src/test/java/org/apache/camel/runtimecatalog/impl/RuntimeCamelCatalogTest.java rename to core/camel-core/src/test/java/org/apache/camel/catalog/RuntimeCamelCatalogTest.java index 93a79c5..490e191 100644 --- a/core/camel-core/src/test/java/org/apache/camel/runtimecatalog/impl/RuntimeCamelCatalogTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/catalog/RuntimeCamelCatalogTest.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.runtimecatalog.impl; +package org.apache.camel.catalog; import java.util.HashMap; import java.util.Map; @@ -39,13 +39,8 @@ public class RuntimeCamelCatalogTest { @BeforeClass public static void createCamelCatalog() { - catalog = new DefaultRuntimeCamelCatalog(new DefaultCamelContext()); - } - - @Test - public void testFromCamelContext() throws Exception { - String schema = new DefaultCamelContext().getExtension(RuntimeCamelCatalog.class).modelJSonSchema("choice"); - assertNotNull(schema); + catalog = new DefaultRuntimeCamelCatalog(); + catalog.setCamelContext(new DefaultCamelContext()); } @Test @@ -238,7 +233,7 @@ public class RuntimeCamelCatalogTest { public void validatePropertiesSummaryUnknown() throws Exception { // unknown component yammer EndpointValidationResult result = catalog - .validateEndpointProperties("yammer:MESSAGES?blah=yada&accessToken=aaa&consumerKey=&useJson=no&initialDelay=five&pollStrategy=myStrategy"); + .validateEndpointProperties("yammer:MESSAGES?blah=yada&accessToken=aaa&consumerKey=&useJson=no&initialDelay=five&pollStrategy=myStrategy"); assertTrue(result.isSuccess()); assertTrue(result.hasWarnings()); String reason = result.summaryErrorMessage(true, true, true); @@ -420,4 +415,4 @@ public class RuntimeCamelCatalogTest { assertTrue(result.getUnknown().contains("camel.language.tokenize.foo")); } -} +} \ No newline at end of file diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java index 76abf3c..baab809 100644 --- a/core/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java @@ -50,7 +50,7 @@ public class MultipleLifecycleStrategyTest extends TestSupport { context.stop(); List<String> expectedEvents = Arrays.asList("onContextStart", - "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", + "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onComponentAdd", "onEndpointAdd", "onComponentRemove", "onContextStop"); diff --git a/core/camel-core/src/test/java/org/apache/camel/runtimecatalog/impl/AbstractCamelCatalogTest.java b/core/camel-core/src/test/java/org/apache/camel/runtimecatalog/impl/AbstractCamelCatalogTest.java deleted file mode 100644 index 8e355d5..0000000 --- a/core/camel-core/src/test/java/org/apache/camel/runtimecatalog/impl/AbstractCamelCatalogTest.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.runtimecatalog.impl; - -import java.net.URISyntaxException; -import java.util.HashMap; -import java.util.Map; - -import org.apache.camel.runtimecatalog.JSonSchemaResolver; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class AbstractCamelCatalogTest { - - AbstractCamelCatalog catalog = new AbstractCamelCatalog() { - }; - - JSonSchemaResolver resolver; - - @Before - public void setupMockCatalog() { - resolver = mock(JSonSchemaResolver.class); - - catalog.setJSonSchemaResolver(resolver); - } - - @Test - public void shouldConstructEndpointUris() throws URISyntaxException { - when(resolver.getComponentJSonSchema("comp")).thenReturn("{\n"// - + " \"component\": {\n"// - + " \"syntax\": \"comp:param1:param2\"\n"// - + " }\n"// - + "}"); - - final Map<String, String> properties = new HashMap<>(); - properties.put("param1", "value1"); - properties.put("param2", "value2"); - properties.put("param3", "value3"); - - final String endpointUri = catalog.doAsEndpointUri("comp", properties, "&", false); - - assertEquals("comp:value1:value2?param3=value3", endpointUri); - } - - @Test - public void shouldConstructEndpointUrisWithPropertyPlaceholders() throws URISyntaxException { - when(resolver.getComponentJSonSchema("comp")).thenReturn("{\n"// - + " \"component\": {\n"// - + " \"syntax\": \"comp:param1:param2\"\n"// - + " }\n"// - + "}"); - - final Map<String, String> properties = new HashMap<>(); - properties.put("param1", "{{prop1}}"); - properties.put("param2", "{{prop2}}"); - properties.put("param3", "{{prop3}}"); - - final String endpointUri = catalog.doAsEndpointUri("comp", properties, "&", false); - - assertEquals("comp:{{prop1}}:{{prop2}}?param3={{prop3}}", endpointUri); - } - - @Test - public void shouldConstructEndpointUrisWhenValuesContainTokens() throws URISyntaxException { - when(resolver.getComponentJSonSchema("comp")).thenReturn("{\n"// - + " \"component\": {\n"// - + " \"syntax\": \"comp:param1:param2\"\n"// - + " }\n"// - + "}"); - - final Map<String, String> properties = new HashMap<>(); - properties.put("param1", "{value1}"); - properties.put("param2", "/value2/"); - properties.put("param3", "/value3/{param}"); - - final String endpointUri = catalog.doAsEndpointUri("comp", properties, "&", false); - - assertEquals("comp:{value1}:/value2/?param3=/value3/{param}", endpointUri); - } - - @Test - public void shouldContextPathAndQuery() throws URISyntaxException { - when(resolver.getComponentJSonSchema("comp")).thenReturn("{\n"// - + " \"component\": {\n"// - + " \"syntax\": \"comp:value1\"\n"// - + " }\n"// - + "}"); - - final Map<String, String> properties = new HashMap<>(); - properties.put("value1", "camel"); - properties.put("foo", "123"); - - final String endpointUri = catalog.doAsEndpointUri("comp", properties, "&", false); - - assertEquals("comp:camel?foo=123", endpointUri); - } - - @Test - public void shouldEmptyContextPath() throws URISyntaxException { - when(resolver.getComponentJSonSchema("comp")).thenReturn("{\n"// - + " \"component\": {\n"// - + " \"syntax\": \"comp\"\n"// - + " }\n"// - + "}"); - - final Map<String, String> properties = new HashMap<>(); - - final String endpointUri = catalog.doAsEndpointUri("comp", properties, "&", false); - - assertEquals("comp", endpointUri); - } - - @Test - public void shouldEmptyContextPathWithQuery() throws URISyntaxException { - when(resolver.getComponentJSonSchema("comp")).thenReturn("{\n"// - + " \"component\": {\n"// - + " \"syntax\": \"comp\"\n"// - + " }\n"// - + "}"); - - final Map<String, String> properties = new HashMap<>(); - properties.put("foo", "123"); - - final String endpointUri = catalog.doAsEndpointUri("comp", properties, "&", false); - - assertEquals("comp?foo=123", endpointUri); - } -} diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedRuntimeCamelCatalogMBean.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedRuntimeCamelCatalogMBean.java deleted file mode 100644 index dcd67e3..0000000 --- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedRuntimeCamelCatalogMBean.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.api.management.mbean; - -import org.apache.camel.api.management.ManagedOperation; - -public interface ManagedRuntimeCamelCatalogMBean { - - @ManagedOperation(description = "Returns the component information as JSon format") - String componentJSonSchema(String name); - - @ManagedOperation(description = "Returns the data format information as JSon format.") - String dataFormatJSonSchema(String name); - - @ManagedOperation(description = "Returns the language information as JSon format") - String languageJSonSchema(String name); - - @ManagedOperation(description = "Returns the model information as JSon format") - String modelJSonSchema(String name); - -} diff --git a/core/camel-management/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java b/core/camel-management/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java index 558dd54..cea1e3c 100644 --- a/core/camel-management/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java +++ b/core/camel-management/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java @@ -62,7 +62,6 @@ import org.apache.camel.management.mbean.ManagedInflightRepository; import org.apache.camel.management.mbean.ManagedProducerCache; import org.apache.camel.management.mbean.ManagedRestRegistry; import org.apache.camel.management.mbean.ManagedRoute; -import org.apache.camel.management.mbean.ManagedRuntimeCamelCatalog; import org.apache.camel.management.mbean.ManagedRuntimeEndpointRegistry; import org.apache.camel.management.mbean.ManagedService; import org.apache.camel.management.mbean.ManagedStreamCachingStrategy; @@ -82,7 +81,6 @@ import org.apache.camel.model.RouteDefinition; import org.apache.camel.processor.CamelInternalProcessor; import org.apache.camel.processor.interceptor.BacklogDebugger; import org.apache.camel.processor.interceptor.BacklogTracer; -import org.apache.camel.runtimecatalog.RuntimeCamelCatalog; import org.apache.camel.spi.AsyncProcessorAwaitManager; import org.apache.camel.spi.BeanIntrospection; import org.apache.camel.spi.ConsumerCache; @@ -562,8 +560,6 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li answer = new ManagedTransformerRegistry(context, (TransformerRegistry)service); } else if (service instanceof ValidatorRegistry) { answer = new ManagedValidatorRegistry(context, (ValidatorRegistry)service); - } else if (service instanceof RuntimeCamelCatalog) { - answer = new ManagedRuntimeCamelCatalog(context, (RuntimeCamelCatalog) service); } else if (service instanceof CamelClusterService) { answer = getManagementObjectStrategy().getManagedObjectForClusterService(context, (CamelClusterService)service); } else if (service != null) { diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedRuntimeCamelCatalog.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedRuntimeCamelCatalog.java deleted file mode 100644 index 1a7c379..0000000 --- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedRuntimeCamelCatalog.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.management.mbean; - -import org.apache.camel.CamelContext; -import org.apache.camel.api.management.ManagedResource; -import org.apache.camel.api.management.mbean.ManagedRuntimeCamelCatalogMBean; -import org.apache.camel.runtimecatalog.RuntimeCamelCatalog; -import org.apache.camel.spi.ManagementStrategy; - -@ManagedResource(description = "Managed RuntimeCamelCatalog") -public class ManagedRuntimeCamelCatalog extends ManagedService implements ManagedRuntimeCamelCatalogMBean { - private final CamelContext camelContext; - private final RuntimeCamelCatalog camelCatalog; - - public ManagedRuntimeCamelCatalog(CamelContext camelContext, RuntimeCamelCatalog camelCatalog) { - super(camelContext, camelCatalog); - this.camelContext = camelContext; - this.camelCatalog = camelCatalog; - } - - @Override - public void init(ManagementStrategy strategy) { - // do nothing - } - - @Override - public String componentJSonSchema(String name) { - return camelCatalog.componentJSonSchema(name); - } - - @Override - public String dataFormatJSonSchema(String name) { - return camelCatalog.dataFormatJSonSchema(name); - } - - @Override - public String languageJSonSchema(String name) { - return camelCatalog.languageJSonSchema(name); - } - - @Override - public String modelJSonSchema(String name) { - return camelCatalog.modelJSonSchema(name); - } -} diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedNonManagedServiceTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedNonManagedServiceTest.java index 3642872..e9d545e 100644 --- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedNonManagedServiceTest.java +++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedNonManagedServiceTest.java @@ -29,7 +29,7 @@ import org.junit.Test; public class ManagedNonManagedServiceTest extends ManagementTestSupport { - private static final int SERVICES = 11; + private static final int SERVICES = 10; @Test public void testService() throws Exception { diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedProducerRouteAddRemoveRegisterAlwaysTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedProducerRouteAddRemoveRegisterAlwaysTest.java index 0563cf8..f4b5ddd 100644 --- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedProducerRouteAddRemoveRegisterAlwaysTest.java +++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedProducerRouteAddRemoveRegisterAlwaysTest.java @@ -28,7 +28,7 @@ import org.junit.Test; public class ManagedProducerRouteAddRemoveRegisterAlwaysTest extends ManagementTestSupport { - private static final int SERVICES = 11; + private static final int SERVICES = 10; @Override protected CamelContext createCamelContext() throws Exception { diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java index fff6e2d..702ff39 100644 --- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java +++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java @@ -33,7 +33,7 @@ import org.junit.Test; */ public class ManagedRouteAddRemoveTest extends ManagementTestSupport { - private static final int SERVICES = 11; + private static final int SERVICES = 10; @Override protected RouteBuilder createRouteBuilder() throws Exception { diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRuntimeCamelCatalogTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRuntimeCamelCatalogTest.java deleted file mode 100644 index ec208d1..0000000 --- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRuntimeCamelCatalogTest.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.management; - -import javax.management.MBeanServer; -import javax.management.ObjectName; - -import org.apache.camel.builder.RouteBuilder; -import org.junit.Test; - -public class ManagedRuntimeCamelCatalogTest extends ManagementTestSupport { - - @Test - public void testManagedRuntimeCatalog() throws Exception { - // JMX tests dont work well on AIX CI servers (hangs them) - if (isPlatform("aix")) { - return; - } - - MBeanServer mbeanServer = getMBeanServer(); - - ObjectName on = ObjectName.getInstance("org.apache.camel:context=camel-1,type=services,name=DefaultRuntimeCamelCatalog"); - - assertTrue(mbeanServer.isRegistered(on)); - - String json = (String) mbeanServer.invoke(on, "componentJSonSchema", new Object[]{"log"}, new String[]{"java.lang.String"}); - assertNotNull(json); - - log.info(json); - assertTrue(json.contains("log:loggerName")); - } - - @Override - protected RouteBuilder createRouteBuilder() throws Exception { - return new RouteBuilder() { - @Override - public void configure() throws Exception { - from("direct:start").to("mock:result"); - } - }; - } - -} diff --git a/core/camel-support/src/main/java/org/apache/camel/component/extension/verifier/DefaultComponentVerifierExtension.java b/core/camel-support/src/main/java/org/apache/camel/component/extension/verifier/DefaultComponentVerifierExtension.java index ba9b790..5fc7491 100644 --- a/core/camel-support/src/main/java/org/apache/camel/component/extension/verifier/DefaultComponentVerifierExtension.java +++ b/core/camel-support/src/main/java/org/apache/camel/component/extension/verifier/DefaultComponentVerifierExtension.java @@ -25,6 +25,7 @@ import org.apache.camel.CamelContext; import org.apache.camel.CamelContextAware; import org.apache.camel.Component; import org.apache.camel.ComponentAware; +import org.apache.camel.ExtendedCamelContext; import org.apache.camel.component.extension.ComponentVerifierExtension; import org.apache.camel.runtimecatalog.EndpointValidationResult; import org.apache.camel.runtimecatalog.RuntimeCamelCatalog; @@ -124,7 +125,7 @@ public class DefaultComponentVerifierExtension implements ComponentVerifierExten } // Grab the runtime catalog to check parameters - RuntimeCamelCatalog catalog = camelContext.getExtension(RuntimeCamelCatalog.class); + RuntimeCamelCatalog catalog = camelContext.adapt(ExtendedCamelContext.class).getRuntimeCamelCatalog(); // Convert from Map<String, Object> to Map<String, String> as required // by the Camel Catalog diff --git a/core/pom.xml b/core/pom.xml index 81fc186..2203672 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -36,6 +36,7 @@ <modules> <module>camel-util</module> <module>camel-api</module> + <module>camel-core-catalog</module> <module>camel-support</module> <module>camel-caffeine-lrucache</module> <module>camel-headersmap</module> diff --git a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc index 74f73f2..ad367c8 100644 --- a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc +++ b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc @@ -134,6 +134,16 @@ And in XML DSL: </camelContext> ---- +=== Component Extension Verifier + +When using component verifier (`org.apache.camel.component.extension.ComponentVerifierExtension`) then you +would know need to add `camel-core-catalog` to the classpath to make this useable. If the JAR is missing, +there will be an exception stating that `RuntimeCamelCatalog` is not found and that this JAR should be added. + +=== ManagedRuntimeCatalog + +The `ManagedRuntimeCatalog` JMX MBean is removed and no longer available. + === API changes ==== log changed to private static LOG diff --git a/parent/pom.xml b/parent/pom.xml index b9ff8cd..fc0e8cb 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -769,6 +769,11 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-core-catalog</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-support</artifactId> <version>${project.version}</version> </dependency> diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml index 5c3a9b5..39d04cd 100644 --- a/platforms/karaf/features/src/main/resources/features.xml +++ b/platforms/karaf/features/src/main/resources/features.xml @@ -58,6 +58,7 @@ <bundle>mvn:org.apache.camel/camel-core-engine/${project.version}</bundle> <bundle>mvn:org.apache.camel/camel-core/${project.version}</bundle> <bundle>mvn:org.apache.camel/camel-core-osgi/${project.version}</bundle> + <bundle>mvn:org.apache.camel/camel-core-catalog/${project.version}</bundle> <bundle>mvn:org.apache.camel/camel-cloud/${project.version}</bundle> <bundle>mvn:org.apache.camel/camel-xml-jaxp/${project.version}</bundle> <bundle>mvn:org.apache.camel/camel-xml-jaxb/${project.version}</bundle> @@ -98,10 +99,6 @@ * = * </config> </feature> - <feature name='camel-catalog' version='${project.version}' start-level='50'> - <feature version='${project.version}'>camel-core</feature> - <bundle>mvn:org.apache.camel/camel-catalog/${project.version}</bundle> - </feature> <feature name='camel-blueprint' version='${project.version}' start-level='50'> <feature version='${project.version}'>camel-core</feature> <bundle>mvn:org.apache.camel/camel-core-xml/${project.version}</bundle>