diff --git a/application/pom.xml b/application/pom.xml
index ac75027fe7..4b9adefe9b 100644
--- a/application/pom.xml
+++ b/application/pom.xml
@@ -149,10 +149,6 @@
org.springframework.boot
spring-boot-starter-websocket
-
- org.springframework.cloud
- spring-cloud-starter-oauth2
-
org.springframework.security
spring-security-oauth2-client
diff --git a/application/src/main/java/org/thingsboard/server/controller/TelemetryController.java b/application/src/main/java/org/thingsboard/server/controller/TelemetryController.java
index af4eb0f08f..e8c4756a6f 100644
--- a/application/src/main/java/org/thingsboard/server/controller/TelemetryController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/TelemetryController.java
@@ -393,6 +393,11 @@ public class TelemetryController extends BaseController {
if (attributes.isEmpty()) {
return getImmediateDeferredResult("No attributes data found in request body!", HttpStatus.BAD_REQUEST);
}
+ for (AttributeKvEntry attributeKvEntry: attributes) {
+ if (attributeKvEntry.getKey().isEmpty() || attributeKvEntry.getKey().trim().length() == 0) {
+ return getImmediateDeferredResult("Key cannot be empty or contains only spaces", HttpStatus.BAD_REQUEST);
+ }
+ }
SecurityUser user = getCurrentUser();
return accessValidator.validateEntityAndCallback(getCurrentUser(), Operation.WRITE_ATTRIBUTES, entityIdSrc, (result, tenantId, entityId) -> {
tsSubService.saveAndNotify(tenantId, entityId, scope, attributes, new FutureCallback() {
diff --git a/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java b/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java
index 5d24f812eb..abb8f629f1 100644
--- a/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java
+++ b/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java
@@ -115,7 +115,13 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
log.trace("[{}] Processing msg: {}", sessionId, msg);
try {
if (msg instanceof MqttMessage) {
- processMqttMsg(ctx, (MqttMessage) msg);
+ MqttMessage message = (MqttMessage) msg;
+ if (message.decoderResult().isSuccess()) {
+ processMqttMsg(ctx, message);
+ } else {
+ log.error("[{}] Message processing failed: {}", sessionId, message.decoderResult().cause().getMessage());
+ ctx.close();
+ }
} else {
ctx.close();
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java
index 2bf70c730d..912c640ef0 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java
@@ -445,7 +445,7 @@ public class DeviceServiceImpl extends AbstractEntityService implements DeviceSe
if (StringUtils.isEmpty(device.getType())) {
throw new DataValidationException("Device type should be specified!");
}
- if (StringUtils.isEmpty(device.getName())) {
+ if (StringUtils.isEmpty(device.getName()) || device.getName().trim().length() == 0) {
throw new DataValidationException("Device name should be specified!");
}
if (device.getTenantId() == null) {
diff --git a/pom.xml b/pom.xml
index c511bf6997..f84dc1da22 100755
--- a/pom.xml
+++ b/pom.xml
@@ -36,12 +36,11 @@
${project.name}
/var/log/${pkg.name}
/usr/share/${pkg.name}
- 2.2.6.RELEASE
- 2.1.2.RELEASE
- 5.2.6.RELEASE
- 5.2.3.RELEASE
- 2.2.4.RELEASE
- 3.1.0
+ 2.3.5.RELEASE
+ 5.2.10.RELEASE
+ 5.4.1
+ 2.4.1
+ 3.3.0
0.7.0
2.2.0
4.12
@@ -51,15 +50,16 @@
0.10
3.6.0
3.5.0.1
+ 3.11.9
1.2.7
28.2-jre
2.6.1
3.4
2.5
1.4
- 2.10.2
- 2.10.2
- 2.10.2
+ 2.11.3
+ 2.11.3
+ 2.11.3
2.2.6
1.0.2
2.6.2
@@ -72,7 +72,7 @@
1.22.1
1.16.18
1.1.0
- 4.1.49.Final
+ 4.1.53.Final
1.5.0
4.8.0
2.19.1
@@ -96,7 +96,7 @@
4.1.1
2.57
2.7.7
- 1.25
+ 1.27
1.3.10
1.11.747
1.105.0
@@ -873,11 +873,6 @@
spring-boot-starter-security
${spring-boot.version}
-
- org.springframework.cloud
- spring-cloud-starter-oauth2
- ${spring-oauth2.version}
-
org.springframework.security
spring-security-oauth2-client
@@ -1220,6 +1215,11 @@
${cassandra-unit.version}
test
+
+ org.apache.cassandra
+ cassandra-all
+ ${cassandra-all.version}
+
junit
junit
diff --git a/rule-engine/rule-engine-components/pom.xml b/rule-engine/rule-engine-components/pom.xml
index 3594daaa55..7475998737 100644
--- a/rule-engine/rule-engine-components/pom.xml
+++ b/rule-engine/rule-engine-components/pom.xml
@@ -120,6 +120,11 @@
org.locationtech.jts
jts-core
+
+ com.sun.mail
+ javax.mail
+ provided
+
junit
junit
diff --git a/tools/pom.xml b/tools/pom.xml
index 2a941c4e4c..fbee3c80b3 100644
--- a/tools/pom.xml
+++ b/tools/pom.xml
@@ -54,7 +54,6 @@
org.apache.cassandra
cassandra-all
- 3.11.6
com.datastax.cassandra