Appendix D. Fabric8 Camel Maven plugin
You can use fabric8-camel-maven plugin to validate all your Camel endpoints from the source code. This allows you to ensure that the endpoints are valid before you run your Camel applications or unit tests.
D.1. Fabric8 Camel Maven plugin goals
For validating Camel endpoints in the source code use:
-
fabric8-camel:validate
: This goal validates the Maven project source code to identify invalid camel endpoint uris.
D.2. Adding the fabric8-camel-maven plugin to your project
You can add the fabric8-camel-maven plugin to your project by adding it to your project’s pom.xml
file.
Procedure
To enable the Plugin, add the following to the
pom.xml
file.<plugin> <groupId>io.fabric8.forge</groupId> <artifactId>fabric8-camel-maven-plugin</artifactId> <version>{fabric8CamelMavenPluginVersion}</version> </plugin>
Note:
Check the current version number of the fabric8-forge release. You can find the latest release at the following location:https://github.com/fabric8io/fabric8-forge/releases
.Then you can run the validate goal from the command line or from your Java editor such as IDEA or Eclipse.
mvn fabric8-camel:validate
Running the plugin automatically
You can also enable the Plugin to run automatically as a part of the build to catch the errors. In the following example, the phase determines when the Plugin runs. In the example, the phase is process-classes
which runs after the compilation of the main source code.
Example
<plugin> <groupId>io.fabric8.forge</groupId> <artifactId>fabric8-camel-maven-plugin</artifactId> <version>2.3.80</version> <executions> <execution> <phase>process-classes</phase> <goals> <goal>validate</goal> </goals> </execution> </executions> </plugin>
Validating the test souce code
You can also configure the maven plugin to validate the test source code. Change the phase as per the process-test-classes
as shown below.
Example
<plugin> <groupId>io.fabric8.forge</groupId> <artifactId>fabric8-camel-maven-plugin</artifactId> <version>2.3.80</version> <executions> <execution> <configuration> <includeTest>true</includeTest> </configuration> <phase>process-test-classes</phase> <goals> <goal>validate</goal> </goals> </execution> </executions> </plugin>
D.3. Running the goal on any Maven project
You can also run the validate goal on any Maven project, without adding the Plugin to the pom.xml
file. You need to specify the Plugin, using its fully qualified name.
Procedure
To run the goal on the
camel-example-cdi
plugin from Apache Camel, run the following commands:$cd camel-example-cdi $mvn io.fabric8.forge:fabric8-camel-maven-plugin:2.3.80:validate
This displays the following output:
[INFO] ------------------------------------------------------------------------ [INFO] Building Camel :: Example :: CDI 2.16.2 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- fabric8-camel-maven-plugin:2.3.80:validate (default-cli) @ camel-example-cdi --- [INFO] Endpoint validation success: (4 = passed, 0 = invalid, 0 = incapable, 0 = unknown components) [INFO] Simple validation success: (0 = passed, 0 = invalid) [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------
After passing the validation successfully, you can validate the four endpoints. Following example shows how to validate and if required, correct the camel endpoints.
Example
Let us assume that you made a typo in one of the Camel endpoint URIs in the source code, such as:
The correct Camel enpoint URI is as follows.
@Uri("timer:foo?period=5000")
You can make changes to include a typo error in the
period
option, such as:@Uri("timer:foo?perid=5000")
Run the validate goal again.
[INFO] ------------------------------------------------------------------------ [INFO] Building Camel :: Example :: CDI 2.16.2 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- fabric8-camel-maven-plugin:2.3.80:validate (default-cli) @ camel-example-cdi --- [WARNING] Endpoint validation error at: org.apache.camel.example.cdi.MyRoutes(MyRoutes.java:32) timer:foo?perid=5000 perid Unknown option. Did you mean: [period] [WARNING] Endpoint validation error: (3 = passed, 1 = invalid, 0 = incapable, 0 = unknown components) [INFO] Simple validation success: (0 = passed, 0 = invalid) [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------
As shown above the error in the camel endpoint URI is displayed.
D.4. Options
The maven plugin supports the following options which you can configure from the command line (use -D
syntax), or defined in the pom.xml
file in the <configuration>
tag.
Parameter | Default Value | Description |
---|---|---|
downloadVersion | true | Whether to allow downloading Camel catalog version from the internet. This is needed, if the project uses a different Camel version than this plugin is using by default. |
failOnError | false |
Whether to fail if invalid Camel endpoints was found. By default the plugin logs the errors at |
logUnparseable | false | Whether to log endpoint URIs which was un-parsable and therefore not possible to validate |
includeJava | true | Whether to include Java files to be validated for invalid Camel endpoints |
includeXML | true | Whether to include XML files to be validated for invalid Camel endpoints |
includeTest | false | Whether to include test source code |
includes | - | To filter the names of java and xml files to only include files matching any of the given list of patterns (wildcard and regular expression). Multiple values can be separated by comma. |
excludes | - | To filter the names of java and xml files to exclude files matching any of the given list of patterns (wildcard and regular expression). Multiple values can be separated by comma. |
ignoreUnknownComponent | true | Whether to ignore unknown components |
ignoreIncapable | true | Whether to ignore incapable of parsing the endpoint uri |
ignoreLenientProperties | true | Whether to ignore components that uses lenient properties. When this is true, then the uri validation is stricter but would fail on properties that are not part of the component but in the uri because of using lenient properties. For example using the HTTP components to provide query parameters in the endpoint uri. |
showAll | false | Whether to show all endpoints and simple expressions (both invalid and valid). |
D.5. Validating include test
If you have a Maven project, then you can run the plugin to validate the endpoints in the unit test source code as well.
Procedure
-
You can pass in the options using
-D
style as shown:
$cd myproject $mvn io.fabric8.forge:fabric8-camel-maven-plugin:2.3.80:validate -DincludeTest=true