diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbHttpClient.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbHttpClient.java
index e9476157aa..05f5d547a8 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbHttpClient.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbHttpClient.java
@@ -130,10 +130,6 @@ public class TbHttpClient {
SslContext sslContext = config.getCredentials().initSslContext();
httpClient = httpClient.secure(t -> t.sslContext(sslContext));
}
- } else if (config.isUseSimpleClientHttpFactory()) {
- if (CredentialsType.CERT_PEM == config.getCredentials().getType()) {
- throw new TbNodeException("Simple HTTP Factory does not support CERT PEM credentials!");
- }
} else {
SslContext sslContext = config.getCredentials().initSslContext();
httpClient = httpClient.secure(t -> t.sslContext(sslContext));
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbRestApiCallNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbRestApiCallNode.java
index 3e9b034693..bccbc9a08f 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbRestApiCallNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbRestApiCallNode.java
@@ -28,7 +28,9 @@ import org.thingsboard.server.common.data.util.TbPair;
import org.thingsboard.server.common.msg.TbMsg;
import org.thingsboard.server.dao.exception.DataValidationException;
+import java.util.Iterator;
import java.util.List;
+import java.util.Set;
import static org.thingsboard.server.dao.service.ConstraintValidator.validateFields;
@@ -36,7 +38,7 @@ import static org.thingsboard.server.dao.service.ConstraintValidator.validateFie
type = ComponentType.EXTERNAL,
name = "rest api call",
configClazz = TbRestApiCallNodeConfiguration.class,
- version = 3,
+ version = 4,
nodeDescription = "Invoke REST API calls to external REST server",
nodeDetails = "Will invoke REST API call GET | POST | PUT | DELETE to external REST server. " +
"Message payload added into Request body. Configured attributes can be added into Headers from Message Metadata." +
@@ -108,6 +110,22 @@ public class TbRestApiCallNode extends TbAbstractExternalNode {
((ObjectNode) oldConfiguration).put(MAX_IN_MEMORY_BUFFER_SIZE_IN_KB, 256);
}
break;
+ case 3:
+ Set knownProperties = Set.of(
+ "restEndpointUrlPattern", "requestMethod", "headers",
+ "readTimeoutMs", "maxParallelRequestsCount", "parseToPlainText",
+ "enableProxy", "useSystemProxyProperties", "proxyHost", "proxyPort",
+ "proxyUser", "proxyPassword", "credentials", "ignoreRequestBody",
+ "maxInMemoryBufferSizeInKb"
+ );
+ Iterator fieldNames = oldConfiguration.fieldNames();
+ while (fieldNames.hasNext()) {
+ if (!knownProperties.contains(fieldNames.next())) {
+ hasChanges = true;
+ fieldNames.remove();
+ }
+ }
+ break;
default:
break;
}
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbRestApiCallNodeConfiguration.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbRestApiCallNodeConfiguration.java
index d319d15157..fbff14f640 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbRestApiCallNodeConfiguration.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbRestApiCallNodeConfiguration.java
@@ -15,7 +15,6 @@
*/
package org.thingsboard.rule.engine.rest;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@@ -29,15 +28,15 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
-@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class TbRestApiCallNodeConfiguration implements NodeConfiguration {
private String restEndpointUrlPattern;
private String requestMethod;
+ // null for legacy configs - triggers different URL encoding logic in TbHttpClient to preserver backward compatibility
+ // all new/modified configs since introduction of this property are forced to have non-null value by UI (and use new encoding logic)
private List<@NotNull @Valid QueryParam> queryParams;
private Map headers;
- private boolean useSimpleClientHttpFactory;
private int readTimeoutMs;
private int maxParallelRequestsCount;
private boolean parseToPlainText;
@@ -47,7 +46,6 @@ public class TbRestApiCallNodeConfiguration implements NodeConfiguration