refactored obsolete com.github.java-json-tools:json-schema-validator with actively updated com.networknt:json-schema-validator
This commit is contained in:
parent
dec61b8ac2
commit
a3c7084d7f
@ -60,10 +60,6 @@
|
||||
<groupId>jakarta.annotation</groupId>
|
||||
<artifactId>jakarta.annotation-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.java-json-tools</groupId>
|
||||
<artifactId>json-schema-validator</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
|
||||
@ -56,10 +56,6 @@
|
||||
<groupId>jakarta.annotation</groupId>
|
||||
<artifactId>jakarta.annotation-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.java-json-tools</groupId>
|
||||
<artifactId>json-schema-validator</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
|
||||
@ -59,6 +59,10 @@
|
||||
<groupId>org.thingsboard.common</groupId>
|
||||
<artifactId>util</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.networknt</groupId>
|
||||
<artifactId>json-schema-validator</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
|
||||
@ -16,10 +16,10 @@
|
||||
package org.thingsboard.server.dao.component;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.github.fge.jsonschema.core.exceptions.ProcessingException;
|
||||
import com.github.fge.jsonschema.core.report.ProcessingReport;
|
||||
import com.github.fge.jsonschema.main.JsonSchemaFactory;
|
||||
import com.github.fge.jsonschema.main.JsonValidator;
|
||||
import com.networknt.schema.JsonSchema;
|
||||
import com.networknt.schema.JsonSchemaFactory;
|
||||
import com.networknt.schema.SpecVersion;
|
||||
import com.networknt.schema.ValidationMessage;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -36,6 +36,7 @@ import org.thingsboard.server.dao.service.DataValidator;
|
||||
import org.thingsboard.server.dao.service.Validator;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author Andrew Shvayka
|
||||
@ -89,15 +90,18 @@ public class BaseComponentDescriptorService implements ComponentDescriptorServic
|
||||
|
||||
@Override
|
||||
public boolean validate(TenantId tenantId, ComponentDescriptor component, JsonNode configuration) {
|
||||
JsonValidator validator = JsonSchemaFactory.byDefault().getValidator();
|
||||
try {
|
||||
if (!component.getConfigurationDescriptor().has("schema")) {
|
||||
throw new DataValidationException("Configuration descriptor doesn't contain schema property!");
|
||||
}
|
||||
JsonNode configurationSchema = component.getConfigurationDescriptor().get("schema");
|
||||
ProcessingReport report = validator.validate(configurationSchema, configuration);
|
||||
return report.isSuccess();
|
||||
} catch (ProcessingException e) {
|
||||
|
||||
JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V4);
|
||||
JsonSchema schema = factory.getSchema(configurationSchema);
|
||||
|
||||
Set<ValidationMessage> validationMessages = schema.validate(configuration);
|
||||
return validationMessages.isEmpty();
|
||||
} catch (Exception e) {
|
||||
throw new IncorrectParameterException(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,98 @@
|
||||
/**
|
||||
* Copyright © 2016-2025 The Thingsboard Authors
|
||||
*
|
||||
* Licensed 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.thingsboard.server.dao.component;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.Mockito;
|
||||
import org.thingsboard.common.util.JacksonUtil;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
import org.thingsboard.server.common.data.plugin.ComponentClusteringMode;
|
||||
import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
|
||||
import org.thingsboard.server.common.data.plugin.ComponentScope;
|
||||
import org.thingsboard.server.common.data.plugin.ComponentType;
|
||||
import org.thingsboard.server.dao.exception.IncorrectParameterException;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class BaseComponentDescriptorServiceTest {
|
||||
|
||||
private BaseComponentDescriptorService service;
|
||||
private ComponentDescriptor componentDescriptor;
|
||||
private TenantId tenantId;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
service = Mockito.spy(BaseComponentDescriptorService.class);
|
||||
tenantId = TenantId.SYS_TENANT_ID;
|
||||
|
||||
// Create a simple component descriptor
|
||||
componentDescriptor = new ComponentDescriptor();
|
||||
componentDescriptor.setType(ComponentType.ACTION);
|
||||
componentDescriptor.setScope(ComponentScope.TENANT);
|
||||
componentDescriptor.setClusteringMode(ComponentClusteringMode.ENABLED);
|
||||
componentDescriptor.setName("Test Component");
|
||||
componentDescriptor.setClazz("org.thingsboard.test.TestComponent");
|
||||
|
||||
// Create configuration descriptor with schema from JSON string
|
||||
String configDescriptorJson = """
|
||||
{
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"testField": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": ["testField"]
|
||||
}
|
||||
}""";
|
||||
|
||||
componentDescriptor.setConfigurationDescriptor(JacksonUtil.toJsonNode(configDescriptorJson));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testValidate() {
|
||||
// Create valid configuration from JSON string
|
||||
String validConfigJson = "{\"testField\": \"test value\"}";
|
||||
JsonNode validConfig = JacksonUtil.toJsonNode(validConfigJson);
|
||||
|
||||
// Create invalid configuration (missing required field) from JSON string
|
||||
String invalidConfigJson = "{}";
|
||||
JsonNode invalidConfig = JacksonUtil.toJsonNode(invalidConfigJson);
|
||||
|
||||
// Test valid configuration
|
||||
boolean validResult = service.validate(tenantId, componentDescriptor, validConfig);
|
||||
assertTrue(validResult, "Valid configuration should pass validation");
|
||||
|
||||
// Test invalid configuration
|
||||
boolean invalidResult = service.validate(tenantId, componentDescriptor, invalidConfig);
|
||||
assertFalse(invalidResult, "Invalid configuration should fail validation");
|
||||
|
||||
// Test with component descriptor without schema
|
||||
ComponentDescriptor noSchemaDescriptor = new ComponentDescriptor(componentDescriptor);
|
||||
noSchemaDescriptor.setConfigurationDescriptor(JacksonUtil.toJsonNode("{}"));
|
||||
|
||||
// Should throw exception when schema is missing
|
||||
assertThrows(IncorrectParameterException.class, () -> {
|
||||
service.validate(tenantId, noSchemaDescriptor, validConfig);
|
||||
}, "Should throw exception when schema is missing");
|
||||
}
|
||||
|
||||
}
|
||||
10
pom.xml
10
pom.xml
@ -75,7 +75,7 @@
|
||||
<jackson-databind.version>2.17.2</jackson-databind.version>
|
||||
<fasterxml-classmate.version>1.7.0</fasterxml-classmate.version>
|
||||
<auth0-jwt.version>4.4.0</auth0-jwt.version>
|
||||
<json-schema-validator.version>2.2.14</json-schema-validator.version>
|
||||
<json-schema-validator.version>1.5.6</json-schema-validator.version>
|
||||
<milo.version>0.6.12</milo.version>
|
||||
<californium.version>3.12.1</californium.version>
|
||||
<leshan.version>2.0.0-M15</leshan.version>
|
||||
@ -1620,15 +1620,9 @@
|
||||
<version>${auth0-jwt.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.java-json-tools</groupId>
|
||||
<groupId>com.networknt</groupId>
|
||||
<artifactId>json-schema-validator</artifactId>
|
||||
<version>${json-schema-validator.version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>com.sun.mail</groupId>
|
||||
<artifactId>mailapi</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.leshan</groupId>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user