Commit 3fc72e3d6f49b91091fae958da0f6fba6743540a

Authored by Swoq
1 parent 827da31d

Fix logging exceptions of controllers

@@ -138,7 +138,11 @@ public class TelemetryController extends BaseController { @@ -138,7 +138,11 @@ public class TelemetryController extends BaseController {
138 @ResponseBody 138 @ResponseBody
139 public DeferredResult<ResponseEntity> getAttributeKeys( 139 public DeferredResult<ResponseEntity> getAttributeKeys(
140 @PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr) throws ThingsboardException { 140 @PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr) throws ThingsboardException {
141 - return accessValidator.validateEntityAndCallback(getCurrentUser(), Operation.READ_ATTRIBUTES, entityType, entityIdStr, this::getAttributeKeysCallback); 141 + try {
  142 + return accessValidator.validateEntityAndCallback(getCurrentUser(), Operation.READ_ATTRIBUTES, entityType, entityIdStr, this::getAttributeKeysCallback);
  143 + } catch (Exception e) {
  144 + throw handleException(e);
  145 + }
142 } 146 }
143 147
144 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')") 148 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@@ -147,8 +151,12 @@ public class TelemetryController extends BaseController { @@ -147,8 +151,12 @@ public class TelemetryController extends BaseController {
147 public DeferredResult<ResponseEntity> getAttributeKeysByScope( 151 public DeferredResult<ResponseEntity> getAttributeKeysByScope(
148 @PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr 152 @PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr
149 , @PathVariable("scope") String scope) throws ThingsboardException { 153 , @PathVariable("scope") String scope) throws ThingsboardException {
150 - return accessValidator.validateEntityAndCallback(getCurrentUser(), Operation.READ_ATTRIBUTES, entityType, entityIdStr,  
151 - (result, tenantId, entityId) -> getAttributeKeysCallback(result, tenantId, entityId, scope)); 154 + try {
  155 + return accessValidator.validateEntityAndCallback(getCurrentUser(), Operation.READ_ATTRIBUTES, entityType, entityIdStr,
  156 + (result, tenantId, entityId) -> getAttributeKeysCallback(result, tenantId, entityId, scope));
  157 + } catch (Exception e) {
  158 + throw handleException(e);
  159 + }
152 } 160 }
153 161
154 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')") 162 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@@ -157,9 +165,13 @@ public class TelemetryController extends BaseController { @@ -157,9 +165,13 @@ public class TelemetryController extends BaseController {
157 public DeferredResult<ResponseEntity> getAttributes( 165 public DeferredResult<ResponseEntity> getAttributes(
158 @PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr, 166 @PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr,
159 @RequestParam(name = "keys", required = false) String keysStr) throws ThingsboardException { 167 @RequestParam(name = "keys", required = false) String keysStr) throws ThingsboardException {
160 - SecurityUser user = getCurrentUser();  
161 - return accessValidator.validateEntityAndCallback(getCurrentUser(), Operation.READ_ATTRIBUTES, entityType, entityIdStr,  
162 - (result, tenantId, entityId) -> getAttributeValuesCallback(result, user, entityId, null, keysStr)); 168 + try {
  169 + SecurityUser user = getCurrentUser();
  170 + return accessValidator.validateEntityAndCallback(getCurrentUser(), Operation.READ_ATTRIBUTES, entityType, entityIdStr,
  171 + (result, tenantId, entityId) -> getAttributeValuesCallback(result, user, entityId, null, keysStr));
  172 + } catch (Exception e) {
  173 + throw handleException(e);
  174 + }
163 } 175 }
164 176
165 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')") 177 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@@ -169,9 +181,13 @@ public class TelemetryController extends BaseController { @@ -169,9 +181,13 @@ public class TelemetryController extends BaseController {
169 @PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr, 181 @PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr,
170 @PathVariable("scope") String scope, 182 @PathVariable("scope") String scope,
171 @RequestParam(name = "keys", required = false) String keysStr) throws ThingsboardException { 183 @RequestParam(name = "keys", required = false) String keysStr) throws ThingsboardException {
172 - SecurityUser user = getCurrentUser();  
173 - return accessValidator.validateEntityAndCallback(getCurrentUser(), Operation.READ_ATTRIBUTES, entityType, entityIdStr,  
174 - (result, tenantId, entityId) -> getAttributeValuesCallback(result, user, entityId, scope, keysStr)); 184 + try {
  185 + SecurityUser user = getCurrentUser();
  186 + return accessValidator.validateEntityAndCallback(getCurrentUser(), Operation.READ_ATTRIBUTES, entityType, entityIdStr,
  187 + (result, tenantId, entityId) -> getAttributeValuesCallback(result, user, entityId, scope, keysStr));
  188 + } catch (Exception e) {
  189 + throw handleException(e);
  190 + }
175 } 191 }
176 192
177 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')") 193 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@@ -179,8 +195,12 @@ public class TelemetryController extends BaseController { @@ -179,8 +195,12 @@ public class TelemetryController extends BaseController {
179 @ResponseBody 195 @ResponseBody
180 public DeferredResult<ResponseEntity> getTimeseriesKeys( 196 public DeferredResult<ResponseEntity> getTimeseriesKeys(
181 @PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr) throws ThingsboardException { 197 @PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr) throws ThingsboardException {
182 - return accessValidator.validateEntityAndCallback(getCurrentUser(), Operation.READ_TELEMETRY, entityType, entityIdStr,  
183 - (result, tenantId, entityId) -> Futures.addCallback(tsService.findAllLatest(tenantId, entityId), getTsKeysToResponseCallback(result), MoreExecutors.directExecutor())); 198 + try {
  199 + return accessValidator.validateEntityAndCallback(getCurrentUser(), Operation.READ_TELEMETRY, entityType, entityIdStr,
  200 + (result, tenantId, entityId) -> Futures.addCallback(tsService.findAllLatest(tenantId, entityId), getTsKeysToResponseCallback(result), MoreExecutors.directExecutor()));
  201 + } catch (Exception e) {
  202 + throw handleException(e);
  203 + }
184 } 204 }
185 205
186 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')") 206 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@@ -190,10 +210,14 @@ public class TelemetryController extends BaseController { @@ -190,10 +210,14 @@ public class TelemetryController extends BaseController {
190 @PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr, 210 @PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr,
191 @RequestParam(name = "keys", required = false) String keysStr, 211 @RequestParam(name = "keys", required = false) String keysStr,
192 @RequestParam(name = "useStrictDataTypes", required = false, defaultValue = "false") Boolean useStrictDataTypes) throws ThingsboardException { 212 @RequestParam(name = "useStrictDataTypes", required = false, defaultValue = "false") Boolean useStrictDataTypes) throws ThingsboardException {
193 - SecurityUser user = getCurrentUser(); 213 + try {
  214 + SecurityUser user = getCurrentUser();
194 215
195 - return accessValidator.validateEntityAndCallback(getCurrentUser(), Operation.READ_TELEMETRY, entityType, entityIdStr,  
196 - (result, tenantId, entityId) -> getLatestTimeseriesValuesCallback(result, user, entityId, keysStr, useStrictDataTypes)); 216 + return accessValidator.validateEntityAndCallback(getCurrentUser(), Operation.READ_TELEMETRY, entityType, entityIdStr,
  217 + (result, tenantId, entityId) -> getLatestTimeseriesValuesCallback(result, user, entityId, keysStr, useStrictDataTypes));
  218 + } catch (Exception e) {
  219 + throw handleException(e);
  220 + }
197 } 221 }
198 222
199 223
@@ -211,15 +235,19 @@ public class TelemetryController extends BaseController { @@ -211,15 +235,19 @@ public class TelemetryController extends BaseController {
211 @RequestParam(name = "agg", defaultValue = "NONE") String aggStr, 235 @RequestParam(name = "agg", defaultValue = "NONE") String aggStr,
212 @RequestParam(name = "orderBy", defaultValue = "DESC") String orderBy, 236 @RequestParam(name = "orderBy", defaultValue = "DESC") String orderBy,
213 @RequestParam(name = "useStrictDataTypes", required = false, defaultValue = "false") Boolean useStrictDataTypes) throws ThingsboardException { 237 @RequestParam(name = "useStrictDataTypes", required = false, defaultValue = "false") Boolean useStrictDataTypes) throws ThingsboardException {
214 - return accessValidator.validateEntityAndCallback(getCurrentUser(), Operation.READ_TELEMETRY, entityType, entityIdStr,  
215 - (result, tenantId, entityId) -> {  
216 - // If interval is 0, convert this to a NONE aggregation, which is probably what the user really wanted  
217 - Aggregation agg = interval == 0L ? Aggregation.valueOf(Aggregation.NONE.name()) : Aggregation.valueOf(aggStr);  
218 - List<ReadTsKvQuery> queries = toKeysList(keys).stream().map(key -> new BaseReadTsKvQuery(key, startTs, endTs, interval, limit, agg, orderBy))  
219 - .collect(Collectors.toList());  
220 -  
221 - Futures.addCallback(tsService.findAll(tenantId, entityId, queries), getTsKvListCallback(result, useStrictDataTypes), MoreExecutors.directExecutor());  
222 - }); 238 + try {
  239 + return accessValidator.validateEntityAndCallback(getCurrentUser(), Operation.READ_TELEMETRY, entityType, entityIdStr,
  240 + (result, tenantId, entityId) -> {
  241 + // If interval is 0, convert this to a NONE aggregation, which is probably what the user really wanted
  242 + Aggregation agg = interval == 0L ? Aggregation.valueOf(Aggregation.NONE.name()) : Aggregation.valueOf(aggStr);
  243 + List<ReadTsKvQuery> queries = toKeysList(keys).stream().map(key -> new BaseReadTsKvQuery(key, startTs, endTs, interval, limit, agg, orderBy))
  244 + .collect(Collectors.toList());
  245 +
  246 + Futures.addCallback(tsService.findAll(tenantId, entityId, queries), getTsKvListCallback(result, useStrictDataTypes), MoreExecutors.directExecutor());
  247 + });
  248 + } catch (Exception e) {
  249 + throw handleException(e);
  250 + }
223 } 251 }
224 252
225 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')") 253 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@@ -227,8 +255,12 @@ public class TelemetryController extends BaseController { @@ -227,8 +255,12 @@ public class TelemetryController extends BaseController {
227 @ResponseBody 255 @ResponseBody
228 public DeferredResult<ResponseEntity> saveDeviceAttributes(@PathVariable("deviceId") String deviceIdStr, @PathVariable("scope") String scope, 256 public DeferredResult<ResponseEntity> saveDeviceAttributes(@PathVariable("deviceId") String deviceIdStr, @PathVariable("scope") String scope,
229 @RequestBody JsonNode request) throws ThingsboardException { 257 @RequestBody JsonNode request) throws ThingsboardException {
230 - EntityId entityId = EntityIdFactory.getByTypeAndUuid(EntityType.DEVICE, deviceIdStr);  
231 - return saveAttributes(getTenantId(), entityId, scope, request); 258 + try {
  259 + EntityId entityId = EntityIdFactory.getByTypeAndUuid(EntityType.DEVICE, deviceIdStr);
  260 + return saveAttributes(getTenantId(), entityId, scope, request);
  261 + } catch (Exception e) {
  262 + throw handleException(e);
  263 + }
232 } 264 }
233 265
234 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')") 266 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@@ -237,8 +269,12 @@ public class TelemetryController extends BaseController { @@ -237,8 +269,12 @@ public class TelemetryController extends BaseController {
237 public DeferredResult<ResponseEntity> saveEntityAttributesV1(@PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr, 269 public DeferredResult<ResponseEntity> saveEntityAttributesV1(@PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr,
238 @PathVariable("scope") String scope, 270 @PathVariable("scope") String scope,
239 @RequestBody JsonNode request) throws ThingsboardException { 271 @RequestBody JsonNode request) throws ThingsboardException {
240 - EntityId entityId = EntityIdFactory.getByTypeAndId(entityType, entityIdStr);  
241 - return saveAttributes(getTenantId(), entityId, scope, request); 272 + try {
  273 + EntityId entityId = EntityIdFactory.getByTypeAndId(entityType, entityIdStr);
  274 + return saveAttributes(getTenantId(), entityId, scope, request);
  275 + } catch (Exception e) {
  276 + throw handleException(e);
  277 + }
242 } 278 }
243 279
244 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')") 280 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@@ -247,8 +283,12 @@ public class TelemetryController extends BaseController { @@ -247,8 +283,12 @@ public class TelemetryController extends BaseController {
247 public DeferredResult<ResponseEntity> saveEntityAttributesV2(@PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr, 283 public DeferredResult<ResponseEntity> saveEntityAttributesV2(@PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr,
248 @PathVariable("scope") String scope, 284 @PathVariable("scope") String scope,
249 @RequestBody JsonNode request) throws ThingsboardException { 285 @RequestBody JsonNode request) throws ThingsboardException {
250 - EntityId entityId = EntityIdFactory.getByTypeAndId(entityType, entityIdStr);  
251 - return saveAttributes(getTenantId(), entityId, scope, request); 286 + try {
  287 + EntityId entityId = EntityIdFactory.getByTypeAndId(entityType, entityIdStr);
  288 + return saveAttributes(getTenantId(), entityId, scope, request);
  289 + } catch (Exception e) {
  290 + throw handleException(e);
  291 + }
252 } 292 }
253 293
254 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')") 294 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@@ -257,8 +297,12 @@ public class TelemetryController extends BaseController { @@ -257,8 +297,12 @@ public class TelemetryController extends BaseController {
257 public DeferredResult<ResponseEntity> saveEntityTelemetry(@PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr, 297 public DeferredResult<ResponseEntity> saveEntityTelemetry(@PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr,
258 @PathVariable("scope") String scope, 298 @PathVariable("scope") String scope,
259 @RequestBody String requestBody) throws ThingsboardException { 299 @RequestBody String requestBody) throws ThingsboardException {
260 - EntityId entityId = EntityIdFactory.getByTypeAndId(entityType, entityIdStr);  
261 - return saveTelemetry(getTenantId(), entityId, requestBody, 0L); 300 + try {
  301 + EntityId entityId = EntityIdFactory.getByTypeAndId(entityType, entityIdStr);
  302 + return saveTelemetry(getTenantId(), entityId, requestBody, 0L);
  303 + } catch (Exception e) {
  304 + throw handleException(e);
  305 + }
262 } 306 }
263 307
264 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')") 308 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@@ -267,8 +311,12 @@ public class TelemetryController extends BaseController { @@ -267,8 +311,12 @@ public class TelemetryController extends BaseController {
267 public DeferredResult<ResponseEntity> saveEntityTelemetryWithTTL(@PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr, 311 public DeferredResult<ResponseEntity> saveEntityTelemetryWithTTL(@PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr,
268 @PathVariable("scope") String scope, @PathVariable("ttl") Long ttl, 312 @PathVariable("scope") String scope, @PathVariable("ttl") Long ttl,
269 @RequestBody String requestBody) throws ThingsboardException { 313 @RequestBody String requestBody) throws ThingsboardException {
270 - EntityId entityId = EntityIdFactory.getByTypeAndId(entityType, entityIdStr);  
271 - return saveTelemetry(getTenantId(), entityId, requestBody, ttl); 314 + try {
  315 + EntityId entityId = EntityIdFactory.getByTypeAndId(entityType, entityIdStr);
  316 + return saveTelemetry(getTenantId(), entityId, requestBody, ttl);
  317 + } catch (Exception e) {
  318 + throw handleException(e);
  319 + }
272 } 320 }
273 321
274 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')") 322 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@@ -280,8 +328,12 @@ public class TelemetryController extends BaseController { @@ -280,8 +328,12 @@ public class TelemetryController extends BaseController {
280 @RequestParam(name = "startTs", required = false) Long startTs, 328 @RequestParam(name = "startTs", required = false) Long startTs,
281 @RequestParam(name = "endTs", required = false) Long endTs, 329 @RequestParam(name = "endTs", required = false) Long endTs,
282 @RequestParam(name = "rewriteLatestIfDeleted", defaultValue = "false") boolean rewriteLatestIfDeleted) throws ThingsboardException { 330 @RequestParam(name = "rewriteLatestIfDeleted", defaultValue = "false") boolean rewriteLatestIfDeleted) throws ThingsboardException {
283 - EntityId entityId = EntityIdFactory.getByTypeAndId(entityType, entityIdStr);  
284 - return deleteTimeseries(entityId, keysStr, deleteAllDataForKeys, startTs, endTs, rewriteLatestIfDeleted); 331 + try {
  332 + EntityId entityId = EntityIdFactory.getByTypeAndId(entityType, entityIdStr);
  333 + return deleteTimeseries(entityId, keysStr, deleteAllDataForKeys, startTs, endTs, rewriteLatestIfDeleted);
  334 + } catch (Exception e) {
  335 + throw handleException(e);
  336 + }
285 } 337 }
286 338
287 private DeferredResult<ResponseEntity> deleteTimeseries(EntityId entityIdStr, String keysStr, boolean deleteAllDataForKeys, 339 private DeferredResult<ResponseEntity> deleteTimeseries(EntityId entityIdStr, String keysStr, boolean deleteAllDataForKeys,
@@ -335,8 +387,12 @@ public class TelemetryController extends BaseController { @@ -335,8 +387,12 @@ public class TelemetryController extends BaseController {
335 public DeferredResult<ResponseEntity> deleteEntityAttributes(@PathVariable("deviceId") String deviceIdStr, 387 public DeferredResult<ResponseEntity> deleteEntityAttributes(@PathVariable("deviceId") String deviceIdStr,
336 @PathVariable("scope") String scope, 388 @PathVariable("scope") String scope,
337 @RequestParam(name = "keys") String keysStr) throws ThingsboardException { 389 @RequestParam(name = "keys") String keysStr) throws ThingsboardException {
338 - EntityId entityId = EntityIdFactory.getByTypeAndUuid(EntityType.DEVICE, deviceIdStr);  
339 - return deleteAttributes(entityId, scope, keysStr); 390 + try {
  391 + EntityId entityId = EntityIdFactory.getByTypeAndUuid(EntityType.DEVICE, deviceIdStr);
  392 + return deleteAttributes(entityId, scope, keysStr);
  393 + } catch (Exception e) {
  394 + throw handleException(e);
  395 + }
340 } 396 }
341 397
342 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')") 398 @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@@ -345,8 +401,12 @@ public class TelemetryController extends BaseController { @@ -345,8 +401,12 @@ public class TelemetryController extends BaseController {
345 public DeferredResult<ResponseEntity> deleteEntityAttributes(@PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr, 401 public DeferredResult<ResponseEntity> deleteEntityAttributes(@PathVariable("entityType") String entityType, @PathVariable("entityId") String entityIdStr,
346 @PathVariable("scope") String scope, 402 @PathVariable("scope") String scope,
347 @RequestParam(name = "keys") String keysStr) throws ThingsboardException { 403 @RequestParam(name = "keys") String keysStr) throws ThingsboardException {
348 - EntityId entityId = EntityIdFactory.getByTypeAndId(entityType, entityIdStr);  
349 - return deleteAttributes(entityId, scope, keysStr); 404 + try {
  405 + EntityId entityId = EntityIdFactory.getByTypeAndId(entityType, entityIdStr);
  406 + return deleteAttributes(entityId, scope, keysStr);
  407 + } catch (Exception e) {
  408 + throw handleException(e);
  409 + }
350 } 410 }
351 411
352 private DeferredResult<ResponseEntity> deleteAttributes(EntityId entityIdSrc, String scope, String keysStr) throws ThingsboardException { 412 private DeferredResult<ResponseEntity> deleteAttributes(EntityId entityIdSrc, String scope, String keysStr) throws ThingsboardException {
@@ -34,13 +34,10 @@ import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExcep @@ -34,13 +34,10 @@ import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExcep
34 import org.thingsboard.server.common.data.exception.ThingsboardErrorCode; 34 import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
35 import org.thingsboard.server.common.data.exception.ThingsboardException; 35 import org.thingsboard.server.common.data.exception.ThingsboardException;
36 import org.thingsboard.server.common.msg.tools.TbRateLimitsException; 36 import org.thingsboard.server.common.msg.tools.TbRateLimitsException;
37 -import org.thingsboard.server.dao.exception.DataValidationException;  
38 -import org.thingsboard.server.dao.exception.IncorrectParameterException;  
39 import org.thingsboard.server.service.security.exception.AuthMethodNotSupportedException; 37 import org.thingsboard.server.service.security.exception.AuthMethodNotSupportedException;
40 import org.thingsboard.server.service.security.exception.JwtExpiredTokenException; 38 import org.thingsboard.server.service.security.exception.JwtExpiredTokenException;
41 import org.thingsboard.server.service.security.exception.UserPasswordExpiredException; 39 import org.thingsboard.server.service.security.exception.UserPasswordExpiredException;
42 40
43 -import javax.mail.MessagingException;  
44 import javax.servlet.ServletException; 41 import javax.servlet.ServletException;
45 import javax.servlet.http.HttpServletRequest; 42 import javax.servlet.http.HttpServletRequest;
46 import javax.servlet.http.HttpServletResponse; 43 import javax.servlet.http.HttpServletResponse;
@@ -74,17 +71,6 @@ public class ThingsboardErrorResponseHandler extends ResponseEntityExceptionHand @@ -74,17 +71,6 @@ public class ThingsboardErrorResponseHandler extends ResponseEntityExceptionHand
74 try { 71 try {
75 response.setContentType(MediaType.APPLICATION_JSON_VALUE); 72 response.setContentType(MediaType.APPLICATION_JSON_VALUE);
76 73
77 - String cause = "";  
78 - if (exception.getCause() != null) {  
79 - cause = exception.getCause().getClass().getCanonicalName();  
80 - }  
81 - if (exception instanceof IllegalArgumentException || exception instanceof IncorrectParameterException  
82 - || exception instanceof DataValidationException || cause.contains("IncorrectParameterException")) {  
83 - exception = new ThingsboardException(exception.getMessage(), ThingsboardErrorCode.BAD_REQUEST_PARAMS);  
84 - } else if (exception instanceof MessagingException) {  
85 - exception = new ThingsboardException("Unable to send mail: " + exception.getMessage(), ThingsboardErrorCode.GENERAL);  
86 - }  
87 -  
88 if (exception instanceof ThingsboardException) { 74 if (exception instanceof ThingsboardException) {
89 ThingsboardException thingsboardException = (ThingsboardException) exception; 75 ThingsboardException thingsboardException = (ThingsboardException) exception;
90 if (thingsboardException.getErrorCode() == ThingsboardErrorCode.SUBSCRIPTION_VIOLATION) { 76 if (thingsboardException.getErrorCode() == ThingsboardErrorCode.SUBSCRIPTION_VIOLATION) {
@@ -35,6 +35,7 @@ public class WidgetsBundle extends SearchTextBased<WidgetsBundleId> implements H @@ -35,6 +35,7 @@ public class WidgetsBundle extends SearchTextBased<WidgetsBundleId> implements H
35 private String title; 35 private String title;
36 private String image; 36 private String image;
37 @NoXss 37 @NoXss
  38 + @Length(fieldName = "description")
38 private String description; 39 private String description;
39 40
40 public WidgetsBundle() { 41 public WidgetsBundle() {