diff --git a/README.md b/README.md
index fa1ebaa48a..7cc04172aa 100644
--- a/README.md
+++ b/README.md
@@ -76,7 +76,7 @@ of your Maven project.
com.amazonaws
aws-iot-device-sdk-java
- 1.0.0
+ 1.0.1
```
@@ -88,7 +88,7 @@ The sample applications included with the SDK can also be installed using the fo
com.amazonaws
aws-iot-device-sdk-java-samples
- 1.0.0
+ 1.0.1
```
@@ -101,9 +101,7 @@ include them to your library build path.
You will also need to add two libraries the SDK depends on:
* Jackson 2.x, including Jackson-core and Jackson-databind. [download instructions][jackson-download]
- * Paho MQTT client for Java 1.0.x. [download instructions][paho-mqtt-java-download]
- (Note: If you plan to use MQTT over WebSocket connections, use its development branch or snapshot builds here
- https://repo.eclipse.org/content/repositories/paho-snapshots/.)
+ * Paho MQTT client for Java 1.1.x. [download instructions][paho-mqtt-java-download]
### Build the SDK from the GitHub Source
You can build both the SDK and its sample applications from the source
diff --git a/aws-iot-device-sdk-java-samples/pom.xml b/aws-iot-device-sdk-java-samples/pom.xml
index 97e4b60630..4cc9507b43 100644
--- a/aws-iot-device-sdk-java-samples/pom.xml
+++ b/aws-iot-device-sdk-java-samples/pom.xml
@@ -3,14 +3,14 @@
com.amazonaws
aws-iot-device-sdk-java-pom
- 1.0.0
+ 1.0.1
aws-iot-device-sdk-java-samples
com.amazonaws
aws-iot-device-sdk-java
- 1.0.0
+ 1.0.1
diff --git a/aws-iot-device-sdk-java-samples/samples-pom.xml b/aws-iot-device-sdk-java-samples/samples-pom.xml
index 263c1b4631..b2aa9800a7 100644
--- a/aws-iot-device-sdk-java-samples/samples-pom.xml
+++ b/aws-iot-device-sdk-java-samples/samples-pom.xml
@@ -2,7 +2,7 @@
4.0.0
com.amazonaws
aws-iot-device-sdk-java-samples
- 1.0.0
+ 1.0.1
org.apache.maven.plugins
@@ -12,7 +12,7 @@
com.amazonaws
aws-iot-device-sdk-java
- 1.0.0
+ 1.0.1
com.fasterxml.jackson.core
@@ -24,11 +24,6 @@
jackson-databind
2.7.4
-
- org.eclipse.paho
- org.eclipse.paho.client.mqttv3
- [1.0.2,)
-
diff --git a/aws-iot-device-sdk-java/pom.xml b/aws-iot-device-sdk-java/pom.xml
index a6ac904c8a..c5249583a9 100644
--- a/aws-iot-device-sdk-java/pom.xml
+++ b/aws-iot-device-sdk-java/pom.xml
@@ -3,7 +3,7 @@
com.amazonaws
aws-iot-device-sdk-java-pom
- 1.0.0
+ 1.0.1
aws-iot-device-sdk-java
@@ -38,7 +38,7 @@
org.eclipse.paho
org.eclipse.paho.client.mqttv3
- [1.0.2,)
+ [1.1.0,)
diff --git a/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/core/AbstractAwsIotClient.java b/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/core/AbstractAwsIotClient.java
index 45ab35b4ae..bff9b9015c 100644
--- a/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/core/AbstractAwsIotClient.java
+++ b/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/core/AbstractAwsIotClient.java
@@ -279,12 +279,49 @@ public void unsubscribe(AWSIotTopic topic, long timeout) throws AWSIotException
}
}
- public void dispatch(AWSIotMessage message) {
- AWSIotTopic topic = subscriptions.get(message.getTopic());
- if (topic != null) {
- topic.onMessage(message);
- } else {
- LOGGER.warning("Unexpected message received from topic " + message.getTopic());
+ public boolean topicFilterMatch(String topicFilter, String topic) {
+ if (topicFilter == null || topic == null) {
+ return false;
+ }
+
+ String[] filterTokens = topicFilter.split("/");
+ String[] topicTokens = topic.split("/");
+ if (filterTokens.length > topicTokens.length) {
+ return false;
+ }
+
+ for (int i = 0; i < filterTokens.length; i++) {
+ if (filterTokens[i].equals("#")) {
+ // '#' must be the last character
+ return ((i + 1) == filterTokens.length);
+ }
+
+ if (!(filterTokens[i].equals(topicTokens[i]) || filterTokens[i].equals("+"))) {
+ return false;
+ }
+ }
+
+ return (filterTokens.length == topicTokens.length);
+ }
+
+ public void dispatch(final AWSIotMessage message) {
+ boolean matches = false;
+
+ for (String topicFilter : subscriptions.keySet()) {
+ if (topicFilterMatch(topicFilter, message.getTopic())) {
+ final AWSIotTopic topic = subscriptions.get(topicFilter);
+ scheduleTask(new Runnable() {
+ @Override
+ public void run() {
+ topic.onMessage(message);
+ }
+ });
+ matches = true;
+ }
+ }
+
+ if (!matches) {
+ LOGGER.warning("Unexpected message received from topic " + message.getTopic());
}
}
diff --git a/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/mqtt/AwsIotMqttClientListener.java b/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/mqtt/AwsIotMqttClientListener.java
index adf1865301..c0c30c349f 100644
--- a/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/mqtt/AwsIotMqttClientListener.java
+++ b/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/mqtt/AwsIotMqttClientListener.java
@@ -52,14 +52,8 @@ public void deliveryComplete(IMqttDeliveryToken arg0) {
@Override
public void messageArrived(String topic, MqttMessage arg1) throws Exception {
- final AWSIotMessage message = new AWSIotMessage(topic, AWSIotQos.valueOf(arg1.getQos()), arg1.getPayload());
-
- client.scheduleTask(new Runnable() {
- @Override
- public void run() {
- client.dispatch(message);
- }
- });
+ AWSIotMessage message = new AWSIotMessage(topic, AWSIotQos.valueOf(arg1.getQos()), arg1.getPayload());
+ client.dispatch(message);
}
}
diff --git a/pom.xml b/pom.xml
index b037e9bb04..76f12f467d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
4.0.0
com.amazonaws
aws-iot-device-sdk-java-pom
- 1.0.0
+ 1.0.1
pom
AWS IoT Device SDK for Java
The AWS IoT Device SDK for Java provides Java APIs for devices to connect to AWS IoT service using the MQTT protocol. The SDK also provides support for AWS IoT specific features, such as Thing Shadow and Thing Shadow abstraction.