You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by he...@apache.org on 2015/03/14 20:45:55 UTC
camel git commit: Created Paho component.
Repository: camel
Updated Branches:
refs/heads/master f01ab0513 -> f88d6dda3
Created Paho component.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f88d6dda
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f88d6dda
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f88d6dda
Branch: refs/heads/master
Commit: f88d6dda3fcb7f2d948de280dfa2353b06585f8e
Parents: f01ab05
Author: Henryk Konsek <he...@gmail.com>
Authored: Sat Mar 14 20:45:43 2015 +0100
Committer: Henryk Konsek <he...@gmail.com>
Committed: Sat Mar 14 20:45:43 2015 +0100
----------------------------------------------------------------------
components/camel-paho/pom.xml | 78 +++++++++
.../camel/component/paho/PahoComponent.java | 33 ++++
.../camel/component/paho/PahoConsumer.java | 78 +++++++++
.../camel/component/paho/PahoEndpoint.java | 169 +++++++++++++++++++
.../camel/component/paho/PahoPersistence.java | 23 +++
.../camel/component/paho/PahoProducer.java | 47 ++++++
.../services/org/apache/camel/component/paho | 1 +
.../camel/component/paho/PahoComponentTest.java | 121 +++++++++++++
components/pom.xml | 1 +
9 files changed, 551 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/f88d6dda/components/camel-paho/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-paho/pom.xml b/components/camel-paho/pom.xml
new file mode 100644
index 0000000..7245efc
--- /dev/null
+++ b/components/camel-paho/pom.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<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>components</artifactId>
+ <version>2.16-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>camel-paho</artifactId>
+ <packaging>bundle</packaging>
+ <name>Camel :: Paho</name>
+ <description>Camel Eclipse Paho support</description>
+
+ <properties>
+ <camel.osgi.export.pkg>org.apache.camel.component.paho.*</camel.osgi.export.pkg>
+ <camel.osgi.export.service>org.apache.camel.spi.ComponentResolver;component=paho</camel.osgi.export.service>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.paho</groupId>
+ <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
+ <version>1.0.2</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.activemq</groupId>
+ <artifactId>activemq-broker</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.activemq</groupId>
+ <artifactId>activemq-mqtt</artifactId>
+ <version>${activemq-version}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <repositories>
+ <repository>
+ <id>eclipse-paho</id>
+ <url>https://repo.eclipse.org/content/repositories/paho-releases</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
+
+</project>
http://git-wip-us.apache.org/repos/asf/camel/blob/f88d6dda/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoComponent.java b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoComponent.java
new file mode 100644
index 0000000..98e80b0
--- /dev/null
+++ b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoComponent.java
@@ -0,0 +1,33 @@
+/**
+ * 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.component.paho;
+
+import java.util.Map;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.impl.DefaultComponent;
+
+public class PahoComponent extends DefaultComponent {
+
+ @Override
+ protected Endpoint createEndpoint(String uri, String s1, Map<String, Object> options) throws Exception {
+ PahoEndpoint pahoEndpoint = new PahoEndpoint(uri, this);
+ setProperties(pahoEndpoint, options);
+ return pahoEndpoint;
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/f88d6dda/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoConsumer.java b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoConsumer.java
new file mode 100644
index 0000000..c4d2386
--- /dev/null
+++ b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoConsumer.java
@@ -0,0 +1,78 @@
+/**
+ * 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.component.paho;
+
+import org.apache.camel.AsyncCallback;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.ExchangeBuilder;
+import org.apache.camel.impl.DefaultConsumer;
+import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
+import org.eclipse.paho.client.mqttv3.MqttCallback;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+
+public class PahoConsumer extends DefaultConsumer {
+
+ public PahoConsumer(Endpoint endpoint, Processor processor) {
+ super(endpoint, processor);
+ }
+
+ @Override
+ protected void doStart() throws Exception {
+ super.doStart();
+ String topic = getEndpoint().getTopic();
+ getEndpoint().getClient().subscribe(topic);
+ getEndpoint().getClient().setCallback(new MqttCallback() {
+ @Override
+ public void connectionLost(Throwable cause) {
+
+ }
+
+ @Override
+ public void messageArrived(String topic, MqttMessage message) throws Exception {
+ Exchange exchange = ExchangeBuilder.anExchange(getEndpoint().getCamelContext()).withBody(message.getPayload()).build();
+ getAsyncProcessor().process(exchange, new AsyncCallback() {
+ @Override
+ public void done(boolean doneSync) {
+
+ }
+ });
+ }
+
+ @Override
+ public void deliveryComplete(IMqttDeliveryToken token) {
+
+ }
+ });
+ }
+
+ @Override
+ protected void doStop() throws Exception {
+ super.doStop();
+ if (getEndpoint().getClient().isConnected()) {
+ String topic = getEndpoint().getTopic();
+ getEndpoint().getClient().unsubscribe(topic);
+ }
+ }
+
+ @Override
+ public PahoEndpoint getEndpoint() {
+ return (PahoEndpoint) super.getEndpoint();
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/f88d6dda/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoEndpoint.java b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoEndpoint.java
new file mode 100644
index 0000000..b1380dd
--- /dev/null
+++ b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoEndpoint.java
@@ -0,0 +1,169 @@
+/**
+ * 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.component.paho;
+
+import static java.lang.System.nanoTime;
+
+import org.apache.camel.Component;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.impl.DefaultEndpoint;
+import org.eclipse.paho.client.mqttv3.MqttClient;
+import org.eclipse.paho.client.mqttv3.MqttClientPersistence;
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
+import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+import org.eclipse.paho.client.mqttv3.persist.MqttDefaultFilePersistence;
+import static org.apache.camel.component.paho.PahoPersistence.MEMORY;
+
+public class PahoEndpoint extends DefaultEndpoint {
+
+ // Configuration members
+
+ private String clientId = "camel-" + nanoTime();
+
+ private String brokerUrl = "tcp://localhost:1883";
+
+ private String topic;
+
+ private int qos = 2;
+
+ private PahoPersistence persistence = MEMORY;
+
+ // Collaboration members
+
+ private MqttConnectOptions connectOptions;
+
+ // Auto-configuration members
+
+ private MqttClient client;
+
+ public PahoEndpoint(String uri, Component component) {
+ super(uri, component);
+ if (topic == null) {
+ topic = uri.substring(7);
+ }
+ }
+
+ @Override
+ protected void doStart() throws Exception {
+ super.doStart();
+ client = new MqttClient(getBrokerUrl(), getClientId(), resolvePersistence());
+ client.connect(resolveMqttConnectOptions());
+ }
+
+ @Override
+ protected void doStop() throws Exception {
+ if (getClient().isConnected()) {
+ getClient().disconnect();
+ }
+ super.doStop();
+ }
+
+ @Override
+ public Producer createProducer() throws Exception {
+ return new PahoProducer(this);
+ }
+
+ @Override
+ public Consumer createConsumer(Processor processor) throws Exception {
+ return new PahoConsumer(this, processor);
+ }
+
+ @Override
+ public boolean isSingleton() {
+ return true;
+ }
+
+ @Override
+ public PahoComponent getComponent() {
+ return (PahoComponent) super.getComponent();
+ }
+
+ // Resolvers
+
+ protected MqttClientPersistence resolvePersistence() {
+ return persistence == MEMORY ? new MemoryPersistence() : new MqttDefaultFilePersistence();
+ }
+
+ protected MqttConnectOptions resolveMqttConnectOptions() {
+ if (connectOptions != null) {
+ return connectOptions;
+ }
+ return new MqttConnectOptions();
+ }
+
+ // Configuration getters & setters
+
+ public String getClientId() {
+ return clientId;
+ }
+
+ public void setClientId(String clientId) {
+ this.clientId = clientId;
+ }
+
+ public String getBrokerUrl() {
+ return brokerUrl;
+ }
+
+ public void setBrokerUrl(String brokerUrl) {
+ this.brokerUrl = brokerUrl;
+ }
+
+ public String getTopic() {
+ return topic;
+ }
+
+ public void setTopic(String topic) {
+ this.topic = topic;
+ }
+
+ public int getQos() {
+ return qos;
+ }
+
+ public void setQos(int qos) {
+ this.qos = qos;
+ }
+
+ // Auto-configuration getters & setters
+
+ public PahoPersistence getPersistence() {
+ return persistence;
+ }
+
+ public void setPersistence(PahoPersistence persistence) {
+ this.persistence = persistence;
+ }
+
+ public MqttClient getClient() {
+ return client;
+ }
+
+ public void setClient(MqttClient client) {
+ this.client = client;
+ }
+
+ public MqttConnectOptions getConnectOptions() {
+ return connectOptions;
+ }
+
+ public void setConnectOptions(MqttConnectOptions connOpts) {
+ this.connectOptions = connOpts;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/f88d6dda/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoPersistence.java
----------------------------------------------------------------------
diff --git a/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoPersistence.java b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoPersistence.java
new file mode 100644
index 0000000..0cd8603
--- /dev/null
+++ b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoPersistence.java
@@ -0,0 +1,23 @@
+/**
+ * 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.component.paho;
+
+public enum PahoPersistence {
+
+ FILE, MEMORY
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/f88d6dda/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoProducer.java b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoProducer.java
new file mode 100644
index 0000000..b585831
--- /dev/null
+++ b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoProducer.java
@@ -0,0 +1,47 @@
+/**
+ * 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.component.paho;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.impl.DefaultProducer;
+import org.eclipse.paho.client.mqttv3.MqttClient;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+
+public class PahoProducer extends DefaultProducer {
+
+ public PahoProducer(PahoEndpoint endpoint) {
+ super(endpoint);
+ }
+
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ MqttClient client = getEndpoint().getClient();
+ String topic = getEndpoint().getTopic();
+ int qos = getEndpoint().getQos();
+ byte[] payload = exchange.getIn().getBody(byte[].class);
+
+ MqttMessage message = new MqttMessage(payload);
+ message.setQos(qos);
+ client.publish(topic, message);
+ }
+
+ @Override
+ public PahoEndpoint getEndpoint() {
+ return (PahoEndpoint) super.getEndpoint();
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/f88d6dda/components/camel-paho/src/main/resources/META-INF/services/org/apache/camel/component/paho
----------------------------------------------------------------------
diff --git a/components/camel-paho/src/main/resources/META-INF/services/org/apache/camel/component/paho b/components/camel-paho/src/main/resources/META-INF/services/org/apache/camel/component/paho
new file mode 100644
index 0000000..2b88b5a
--- /dev/null
+++ b/components/camel-paho/src/main/resources/META-INF/services/org/apache/camel/component/paho
@@ -0,0 +1 @@
+class=org.apache.camel.component.paho.PahoComponent
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/f88d6dda/components/camel-paho/src/test/java/org/apache/camel/component/paho/PahoComponentTest.java
----------------------------------------------------------------------
diff --git a/components/camel-paho/src/test/java/org/apache/camel/component/paho/PahoComponentTest.java b/components/camel-paho/src/test/java/org/apache/camel/component/paho/PahoComponentTest.java
new file mode 100644
index 0000000..07a5d5c
--- /dev/null
+++ b/components/camel-paho/src/test/java/org/apache/camel/component/paho/PahoComponentTest.java
@@ -0,0 +1,121 @@
+/**
+ * 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.component.paho;
+
+import org.apache.activemq.broker.BrokerService;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.JndiRegistry;
+import org.apache.camel.test.AvailablePortFinder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
+import org.junit.Test;
+
+public class PahoComponentTest extends CamelTestSupport {
+
+ MqttConnectOptions connectOptions = new MqttConnectOptions();
+
+ @EndpointInject(uri = "mock:test")
+ MockEndpoint mock;
+
+ BrokerService broker;
+
+ int mqttPort = AvailablePortFinder.getNextAvailable();
+
+ @Override
+ protected boolean useJmx() {
+ return false;
+ }
+
+ @Override
+ public void doPreSetup() throws Exception {
+ super.doPreSetup();
+ broker = new BrokerService();
+ broker.setPersistent(false);
+ broker.addConnector("mqtt://localhost:" + mqttPort);
+ broker.start();
+ }
+
+ @Override
+ public void tearDown() throws Exception {
+ super.tearDown();
+ broker.stop();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:test").to("paho:queue?brokerUrl=tcp://localhost:" + mqttPort);
+
+ from("paho:queue?brokerUrl=tcp://localhost:" + mqttPort).to("mock:test");
+
+ from("paho:persistenceTest?persistence=FILE&brokerUrl=tcp://localhost:" + mqttPort).to("mock:persistenceTest");
+
+ from("direct:connectOptions").to("paho:registryConnectOptions?connectOptions=#connectOptions&brokerUrl=tcp://localhost:" + mqttPort);
+ }
+ };
+ }
+
+ @Override
+ protected JndiRegistry createRegistry() throws Exception {
+ JndiRegistry registry = super.createRegistry();
+ registry.bind("connectOptions", connectOptions);
+ return registry;
+ }
+
+ // Tests
+
+ @Test
+ public void shouldReadMessageFromMqtt() throws InterruptedException {
+ // Given
+ String msg = "msg";
+ mock.expectedBodiesReceived(msg);
+
+ // When
+ template.sendBody("mock:test", msg);
+
+ // Then
+ mock.assertIsSatisfied();
+ }
+
+ @Test
+ public void shouldNotReadMessageFromUnregisteredTopic() throws InterruptedException {
+ // Given
+ mock.expectedMessageCount(0);
+
+ // When
+ template.sendBody("paho:someRandomQueue?brokerUrl=tcp://localhost:" + mqttPort, "msg");
+
+ // Then
+ mock.assertIsSatisfied();
+ }
+
+ @Test
+ public void shouldUseConnectionOptionsFromRegistry() {
+ // Given
+ PahoEndpoint pahoWithConnectOptionsFromRegistry = getMandatoryEndpoint(
+ "paho:registryConnectOptions?connectOptions=#connectOptions&brokerUrl=tcp://localhost:" + mqttPort,
+ PahoEndpoint.class);
+
+ // Then
+ assertSame(connectOptions, pahoWithConnectOptionsFromRegistry.resolveMqttConnectOptions());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/f88d6dda/components/pom.xml
----------------------------------------------------------------------
diff --git a/components/pom.xml b/components/pom.xml
index 5c808dd..e5bc573 100644
--- a/components/pom.xml
+++ b/components/pom.xml
@@ -170,6 +170,7 @@
<module>camel-olingo2</module>
<module>camel-openshift</module>
<module>camel-optaplanner</module>
+ <module>camel-paho</module>
<module>camel-paxlogging</module>
<module>camel-pgevent</module>
<module>camel-printer</module>