Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
java: [ 8, 11, 17, 21 ]
java: [ 17, 21, 25 ]
name: Java ${{ matrix.java }}
steps:
- uses: actions/checkout@v4
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -421,17 +421,17 @@ JsonLocation minLengthInstanceNodeTokenLocation = JsonNodes.tokenStreamLocationO
JsonLocation minLengthSchemaNodeTokenLocation = JsonNodes.tokenStreamLocationOf(minLength.getSchemaNode());

assertEquals("format", format.getKeyword());
assertEquals("date", format.getSchemaNode().asText());
assertEquals("date", format.getSchemaNode().asString());
assertEquals(5, formatSchemaNodeTokenLocation.getLineNr());
assertEquals(17, formatSchemaNodeTokenLocation.getColumnNr());
assertEquals("1", format.getInstanceNode().asText());
assertEquals("1", format.getInstanceNode().asString());
assertEquals(2, formatInstanceNodeTokenLocation.getLineNr());
assertEquals(16, formatInstanceNodeTokenLocation.getColumnNr());
assertEquals("minLength", minLength.getKeyword());
assertEquals("6", minLength.getSchemaNode().asText());
assertEquals("6", minLength.getSchemaNode().asString());
assertEquals(6, minLengthSchemaNodeTokenLocation.getLineNr());
assertEquals(20, minLengthSchemaNodeTokenLocation.getColumnNr());
assertEquals("1", minLength.getInstanceNode().asText());
assertEquals("1", minLength.getInstanceNode().asString());
assertEquals(2, minLengthInstanceNodeTokenLocation.getLineNr());
assertEquals(16, minLengthInstanceNodeTokenLocation.getColumnNr());
assertEquals(16, minLengthInstanceNodeTokenLocation.getColumnNr());
Expand Down
2 changes: 1 addition & 1 deletion doc/custom-dialect.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public class EqualsValidator extends BaseKeywordValidator {
@Override
public void validate(ExecutionContext executionContext, JsonNode node, JsonNode rootNode,
NodePath instanceLocation) {
if (!node.asText().equals(value)) {
if (!node.asString().equals(value)) {
executionContext.addError(error().message("must be equal to ''{0}''")
.arguments(value)
.instanceLocation(instanceLocation).instanceNode(node).evaluationPath(executionContext.getEvaluationPath()).build());
Expand Down
11 changes: 11 additions & 0 deletions doc/upgrading.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,17 @@ This library can contain breaking changes in `minor` version releases.

This contains information on the notable or breaking changes in each version.

### 3.0.0

| Compatibility | Version |
| ------------- | --------- |
| Java | Java 17 |
| Jackson | Jackson 3 |

#### Major Changes

- Change to use Jackson 3 for which Java 17 is now required.

### 2.0.0

| Compatibility | Version |
Expand Down
4 changes: 2 additions & 2 deletions doc/walkers.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,14 +95,14 @@ assertEquals("", propertyKeywords.get(0).getInstanceLocation().toString());
assertEquals("/properties",
propertyKeywords.get(0).getEvaluationPath().append(propertyKeywords.get(0).getKeyword()).toString());
assertEquals("/tags/0", propertyKeywords.get(1).getInstanceLocation().toString());
assertEquals("image", propertyKeywords.get(1).getInstanceNode().get("name").asText());
assertEquals("image", propertyKeywords.get(1).getInstanceNode().get("name").asString());
assertEquals("/properties/tags/items/$ref", propertyKeywords.get(1).getEvaluationPath().toString());
assertEquals("/properties/tags/items/$ref/properties",
propertyKeywords.get(1).getEvaluationPath().append(propertyKeywords.get(1).getKeyword()).toString());
assertEquals("/tags/1", propertyKeywords.get(2).getInstanceLocation().toString());
assertEquals("/properties/tags/items/$ref/properties",
propertyKeywords.get(2).getEvaluationPath().append(propertyKeywords.get(2).getKeyword()).toString());
assertEquals("link", propertyKeywords.get(2).getInstanceNode().get("name").asText());
assertEquals("link", propertyKeywords.get(2).getInstanceNode().get("name").asString());
```

### Applying Defaults
Expand Down
45 changes: 27 additions & 18 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

<groupId>com.networknt</groupId>
<artifactId>json-schema-validator</artifactId>
<version>2.0.1</version>
<version>3.0.0-SNAPSHOT</version>
<packaging>bundle</packaging>
<name>JsonSchemaValidator</name>
<description>A json schema validator that supports draft v4, v6, v7, v2019-09 and v2020-12</description>
Expand Down Expand Up @@ -68,25 +68,25 @@
</distributionManagement>

<properties>
<java.testversion>1.8</java.testversion>
<java.version>1.8</java.version>
<java.testversion>17</java.testversion>
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<version.itu>1.14.0</version.itu>
<version.jackson>2.18.3</version.jackson>
<version.jackson>3.0.3</version.jackson>
<version.joni>2.2.6</version.joni>
<version.logback>1.3.14</version.logback> <!-- 1.4.x and above is not Java 8 compatible -->
<version.logback>1.5.22</version.logback>
<version.slf4j>2.0.17</version.slf4j>
<version.graaljs>21.3.10</version.graaljs> <!-- 22.x and above is not Java 8 compatible -->
<version.graaljs>25.0.1</version.graaljs>
<version.hamcrest>3.0</version.hamcrest>
<version.junit>5.11.3</version.junit>
<version.jacoco-maven-plugin>0.8.12</version.jacoco-maven-plugin>
<version.maven-compiler-plugin>3.13.0</version.maven-compiler-plugin>
<version.maven-bundle-plugin>5.1.9</version.maven-bundle-plugin>
<version.maven-javadoc-plugin>3.6.3</version.maven-javadoc-plugin>
<version.maven-source-plugin>3.2.1</version.maven-source-plugin> <!-- 3.3.0 and above is not Java 8 compatible -->
<version.maven-surefire-junit5-tree-reporter>1.3.0</version.maven-surefire-junit5-tree-reporter>
<version.maven-surefire-plugin>3.5.1</version.maven-surefire-plugin>
<version.junit>6.0.1</version.junit>
<version.jacoco-maven-plugin>0.8.14</version.jacoco-maven-plugin>
<version.maven-compiler-plugin>3.14.1</version.maven-compiler-plugin>
<version.maven-bundle-plugin>6.0.0</version.maven-bundle-plugin>
<version.maven-javadoc-plugin>3.12.0</version.maven-javadoc-plugin>
<version.maven-source-plugin>3.4.0</version.maven-source-plugin> <!-- 3.3.0 and above is not Java 8 compatible -->
<version.maven-surefire-junit5-tree-reporter>1.5.1</version.maven-surefire-junit5-tree-reporter>
<version.maven-surefire-plugin>3.5.4</version.maven-surefire-plugin>
<version.moditect-maven-plugin>1.2.2.Final</version.moditect-maven-plugin>
<version.nexus-staging-maven>1.7.0</version.nexus-staging-maven>
<version.maven-gpg>3.2.7</version.maven-gpg>
Expand All @@ -112,13 +112,13 @@
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${version.jackson}</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<groupId>tools.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>${version.jackson}</version>
</dependency>
Expand All @@ -143,7 +143,16 @@
<!-- Used to validate ECMA 262 regular expressions -->
<!-- Approximately 50 MB in dependencies -->
<groupId>org.graalvm.js</groupId>
<artifactId>js</artifactId>
<artifactId>js-language</artifactId>
<version>${version.graaljs}</version>
<optional>true</optional>
</dependency>

<dependency>
<!-- Used to validate ECMA 262 regular expressions -->
<!-- Approximately 50 MB in dependencies -->
<groupId>org.graalvm.truffle</groupId>
<artifactId>truffle-runtime</artifactId>
<version>${version.graaljs}</version>
<optional>true</optional>
</dependency>
Expand Down Expand Up @@ -459,7 +468,7 @@
</exports>
<requires>
static com.ethlo.time;
static com.fasterxml.jackson.dataformat.yaml;
static tools.jackson.dataformat.yaml;
static org.jruby.jcodings;
static org.jruby.joni;
static org.graalvm.sdk;
Expand Down
12 changes: 4 additions & 8 deletions src/main/java/com/networknt/schema/Error.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import tools.jackson.databind.JsonNode;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;
import com.networknt.schema.i18n.MessageFormatter;
import com.networknt.schema.path.NodePath;
import com.networknt.schema.utils.CachingSupplier;
Expand All @@ -42,7 +42,7 @@
* "https://github.com/json-schema-org/json-schema-spec/blob/main/specs/output/jsonschema-validation-output-machines.md">JSON
* Schema</a>
*/
@JsonIgnoreProperties({ "messageSupplier", "schemaNode", "instanceNode", "valid" })
@JsonIgnoreProperties({ "messageSupplier", "schemaNode", "instanceNode" })
@JsonPropertyOrder({ "keyword", "instanceLocation", "message", "evaluationPath", "schemaLocation",
"messageKey", "arguments", "details" })
@JsonInclude(Include.NON_NULL)
Expand Down Expand Up @@ -176,10 +176,6 @@ public String getMessageKey() {
return messageKey;
}

public boolean isValid() {
return messageSupplier != null;
}

@Override
public String toString() {
StringBuilder builder = new StringBuilder();
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/com/networknt/schema/ErrorMessages.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import java.util.LinkedHashMap;
import java.util.Map;

import com.fasterxml.jackson.databind.JsonNode;
import tools.jackson.databind.JsonNode;

/**
* ErrorMessages.
Expand All @@ -24,12 +24,12 @@ public static Map<String, String> getErrorMessage(Schema parentSchema, String er
if (message != null) {
JsonNode messageNode = message.get(keyword);
if (messageNode != null) {
if (messageNode.isTextual()) {
return Collections.singletonMap("", messageNode.asText());
if (messageNode.isString()) {
return Collections.singletonMap("", messageNode.asString());
} else if (messageNode.isObject()) {
Map<String, String> result = new LinkedHashMap<>();
messageNode.fields()
.forEachRemaining(entry -> result.put(entry.getKey(), entry.getValue().textValue()));
messageNode.properties().iterator()
.forEachRemaining(entry -> result.put(entry.getKey(), entry.getValue().asString()));
if (!result.isEmpty()) {
return result;
}
Expand Down
8 changes: 4 additions & 4 deletions src/main/java/com/networknt/schema/Schema.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
import java.util.Objects;
import java.util.function.Consumer;

import com.fasterxml.jackson.databind.JsonNode;
import tools.jackson.databind.JsonNode;
import com.networknt.schema.keyword.KeywordValidator;
import com.networknt.schema.keyword.TypeValidator;
import com.networknt.schema.path.NodePath;
Expand Down Expand Up @@ -107,11 +107,11 @@ private static Schema obtainSubSchemaNode(final JsonNode schemaNode, final Schem
return null;
}

final String text = node.textValue();
final String text = node.asString();
if (text == null) {
return null;
}
final SchemaLocation schemaLocation = SchemaLocation.of(node.textValue());
final SchemaLocation schemaLocation = SchemaLocation.of(node.asString());
return schemaContext.getSchemaRegistry().getSchema(schemaLocation);
}
public static class JsonNodePathLegacy {
Expand Down Expand Up @@ -519,7 +519,7 @@ private List<KeywordValidator> read(JsonNode schemaNode) {
} else {
KeywordValidator refValidator = null;

Iterator<Entry<String, JsonNode>> iterator = schemaNode.fields();
Iterator<Entry<String, JsonNode>> iterator = schemaNode.properties().iterator();
validators = new ArrayList<>(schemaNode.size());
while (iterator.hasNext()) {
Entry<String, JsonNode> entry = iterator.next();
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/networknt/schema/SchemaContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

import com.fasterxml.jackson.databind.JsonNode;
import tools.jackson.databind.JsonNode;
import com.networknt.schema.dialect.Dialect;
import com.networknt.schema.keyword.KeywordValidator;

Expand Down
10 changes: 5 additions & 5 deletions src/main/java/com/networknt/schema/SchemaRegistry.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

package com.networknt.schema;

import com.fasterxml.jackson.databind.JsonNode;
import tools.jackson.databind.JsonNode;
import com.networknt.schema.dialect.BasicDialectRegistry;
import com.networknt.schema.dialect.DefaultDialectRegistry;
import com.networknt.schema.dialect.Dialect;
Expand Down Expand Up @@ -534,18 +534,18 @@ protected SchemaContext createSchemaContext(final JsonNode schemaNode) {

private Dialect getDialect(final JsonNode schemaNode, SchemaRegistryConfig config) {
final JsonNode iriNode = schemaNode.get("$schema");
if (iriNode != null && iriNode.isTextual()) {
return getDialect(iriNode.textValue());
if (iriNode != null && iriNode.isString()) {
return getDialect(iriNode.asString());
}
return null;
}

private Dialect getDialectOrDefault(final JsonNode schemaNode) {
final JsonNode iriNode = schemaNode.get("$schema");
if (iriNode != null && !iriNode.isNull() && !iriNode.isTextual()) {
if (iriNode != null && !iriNode.isNull() && !iriNode.isString()) {
throw new SchemaException("Unknown dialect: " + iriNode);
}
final String iri = iriNode == null || iriNode.isNull() ? defaultDialectId : iriNode.textValue();
final String iri = iriNode == null || iriNode.isNull() ? defaultDialectId : iriNode.asString();
if (iri == null) {
throw new MissingSchemaKeywordException(
"The $schema keyword that indicates the schema dialect must be specified.");
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/networknt/schema/Validator.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

package com.networknt.schema;

import com.fasterxml.jackson.databind.JsonNode;
import tools.jackson.databind.JsonNode;
import com.networknt.schema.path.NodePath;
import com.networknt.schema.walk.Walker;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.core.JsonProcessingException;
import tools.jackson.core.JacksonException;
import com.networknt.schema.path.NodePath;
import com.networknt.schema.serialization.JsonMapperFactory;

Expand Down Expand Up @@ -92,7 +92,7 @@ public static String format(Map<NodePath, List<Annotation>> annotations) {

try {
return JsonMapperFactory.getInstance().writerWithDefaultPrettyPrinter().writeValueAsString(results);
} catch (JsonProcessingException e) {
} catch (JacksonException e) {
return "";
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import java.util.Map;
import java.util.Map.Entry;

import com.fasterxml.jackson.databind.JsonNode;
import tools.jackson.databind.JsonNode;
import com.networknt.schema.Error;
import com.networknt.schema.InvalidSchemaException;
import com.networknt.schema.Schema;
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/networknt/schema/dialect/Dialect.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

package com.networknt.schema.dialect;

import com.fasterxml.jackson.databind.JsonNode;
import tools.jackson.databind.JsonNode;
import com.networknt.schema.Error;
import com.networknt.schema.InvalidSchemaException;
import com.networknt.schema.Schema;
Expand Down Expand Up @@ -416,7 +416,7 @@ public String readDynamicAnchor(JsonNode schemaNode) {

private static String readText(JsonNode node, String field) {
JsonNode fieldNode = node.get(field);
return fieldNode == null ? null : fieldNode.textValue();
return fieldNode == null ? null : fieldNode.asString();
}

public String getId() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import java.util.Map;

import com.fasterxml.jackson.databind.JsonNode;
import tools.jackson.databind.JsonNode;
import com.networknt.schema.ExecutionContext;
import com.networknt.schema.Schema;
import com.networknt.schema.SchemaLocation;
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/com/networknt/schema/format/Format.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

import java.util.function.Supplier;

import com.fasterxml.jackson.databind.JsonNode;
import tools.jackson.databind.JsonNode;
import com.networknt.schema.ExecutionContext;
import com.networknt.schema.MessageSourceError;
import com.networknt.schema.SchemaContext;
Expand Down Expand Up @@ -95,7 +95,7 @@ default boolean matches(ExecutionContext executionContext, SchemaContext schemaC
if (nodeType != JsonType.STRING) {
return true;
}
return matches(executionContext, schemaContext, value.textValue());
return matches(executionContext, schemaContext, value.asString());
}

/**
Expand Down Expand Up @@ -139,7 +139,7 @@ default void validate(ExecutionContext executionContext, SchemaContext schemaCon
if (!matches(executionContext, schemaContext, node, rootNode, instanceLocation, assertionsEnabled,
formatValidator)) {
executionContext.addError(message.get()
.arguments(this.getName(), node.asText()).build());
.arguments(this.getName(), node.asString()).build());
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import java.util.Iterator;
import java.util.function.Consumer;

import com.fasterxml.jackson.databind.JsonNode;
import tools.jackson.databind.JsonNode;
import com.networknt.schema.ExecutionContext;
import com.networknt.schema.Schema;
import com.networknt.schema.SchemaLocation;
Expand Down
Loading