Skip to content

Commit

Permalink
Corrects treating 1.0 as an integer
Browse files Browse the repository at this point in the history
  • Loading branch information
fdutton committed Apr 12, 2023
1 parent 636a346 commit 708a04e
Show file tree
Hide file tree
Showing 10 changed files with 71 additions and 280 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
package com.networknt.schema;

import com.fasterxml.jackson.databind.JsonNode;
import com.networknt.schema.utils.JsonNodeUtil;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -25,7 +27,7 @@
import java.util.Collections;
import java.util.Set;

public class ExclusiveMaximumValidator extends BaseJsonValidator implements JsonValidator {
public class ExclusiveMaximumValidator extends BaseJsonValidator {
private static final Logger logger = LoggerFactory.getLogger(ExclusiveMaximumValidator.class);

private final ThresholdMixin typedMaximum;
Expand Down Expand Up @@ -99,7 +101,7 @@ public String thresholdValue() {
public Set<ValidationMessage> validate(JsonNode node, JsonNode rootNode, String at) {
debug(logger, node, rootNode, at);

if (!TypeValidator.isNumber(node, validationContext.getConfig())) {
if (!JsonNodeUtil.isNumber(node, validationContext.getConfig())) {
// maximum only applies to numbers
return Collections.emptySet();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
package com.networknt.schema;

import com.fasterxml.jackson.databind.JsonNode;
import com.networknt.schema.utils.JsonNodeUtil;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -25,7 +27,7 @@
import java.util.Collections;
import java.util.Set;

public class ExclusiveMinimumValidator extends BaseJsonValidator implements JsonValidator {
public class ExclusiveMinimumValidator extends BaseJsonValidator {
private static final Logger logger = LoggerFactory.getLogger(MinimumValidator.class);

/**
Expand Down Expand Up @@ -106,7 +108,7 @@ public String thresholdValue() {
public Set<ValidationMessage> validate(JsonNode node, JsonNode rootNode, String at) {
debug(logger, node, rootNode, at);

if (!TypeValidator.isNumber(node, this.validationContext.getConfig())) {
if (!JsonNodeUtil.isNumber(node, this.validationContext.getConfig())) {
// minimum only applies to numbers
return Collections.emptySet();
}
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/com/networknt/schema/MaximumValidator.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
package com.networknt.schema;

import com.fasterxml.jackson.databind.JsonNode;
import com.networknt.schema.utils.JsonNodeUtil;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -25,7 +27,7 @@
import java.util.Collections;
import java.util.Set;

public class MaximumValidator extends BaseJsonValidator implements JsonValidator {
public class MaximumValidator extends BaseJsonValidator {
private static final Logger logger = LoggerFactory.getLogger(MaximumValidator.class);
private static final String PROPERTY_EXCLUSIVE_MAXIMUM = "exclusiveMaximum";

Expand Down Expand Up @@ -108,7 +110,7 @@ public String thresholdValue() {
public Set<ValidationMessage> validate(JsonNode node, JsonNode rootNode, String at) {
debug(logger, node, rootNode, at);

if (!TypeValidator.isNumber(node, this.validationContext.getConfig())) {
if (!JsonNodeUtil.isNumber(node, this.validationContext.getConfig())) {
// maximum only applies to numbers
return Collections.emptySet();
}
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/com/networknt/schema/MinimumValidator.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
package com.networknt.schema;

import com.fasterxml.jackson.databind.JsonNode;
import com.networknt.schema.utils.JsonNodeUtil;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -25,7 +27,7 @@
import java.util.Collections;
import java.util.Set;

public class MinimumValidator extends BaseJsonValidator implements JsonValidator {
public class MinimumValidator extends BaseJsonValidator {
private static final Logger logger = LoggerFactory.getLogger(MinimumValidator.class);
private static final String PROPERTY_EXCLUSIVE_MINIMUM = "exclusiveMinimum";

Expand Down Expand Up @@ -115,7 +117,7 @@ public String thresholdValue() {
public Set<ValidationMessage> validate(JsonNode node, JsonNode rootNode, String at) {
debug(logger, node, rootNode, at);

if (!TypeValidator.isNumber(node, this.validationContext.getConfig())) {
if (!JsonNodeUtil.isNumber(node, this.validationContext.getConfig())) {
// minimum only applies to numbers
return Collections.emptySet();
}
Expand Down
33 changes: 24 additions & 9 deletions src/main/java/com/networknt/schema/SpecVersionDetector.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.networknt.schema;

import com.fasterxml.jackson.databind.JsonNode;
import com.networknt.schema.SpecVersion.VersionFlag;

import java.util.Optional;

Expand All @@ -41,7 +42,7 @@ private SpecVersionDetector() {
* @param jsonNode JSON Node to read from
* @return Spec version if present, otherwise throws an exception
*/
public static SpecVersion.VersionFlag detect(JsonNode jsonNode) {
public static VersionFlag detect(JsonNode jsonNode) {
return detectOptionalVersion(jsonNode).orElseThrow(
() -> new JsonSchemaException("'" + SCHEMA_TAG + "' tag is not present")
);
Expand All @@ -54,7 +55,7 @@ public static SpecVersion.VersionFlag detect(JsonNode jsonNode) {
* @param jsonNode JSON Node to read from
* @return Spec version if present, otherwise empty
*/
public static Optional<SpecVersion.VersionFlag> detectOptionalVersion(JsonNode jsonNode) {
public static Optional<VersionFlag> detectOptionalVersion(JsonNode jsonNode) {
return Optional.ofNullable(jsonNode.get(SCHEMA_TAG)).map(schemaTag -> {

final boolean forceHttps = true;
Expand All @@ -64,23 +65,37 @@ public static Optional<SpecVersion.VersionFlag> detectOptionalVersion(JsonNode j
String schemaUri = JsonSchemaFactory.normalizeMetaSchemaUri(schemaTagValue, forceHttps,
removeEmptyFragmentSuffix);

VersionFlag version = detect(schemaUri);
if (null == version) {
throw new JsonSchemaException("'" + schemaTagValue + "' is unrecognizable schema");
}
return version;
});
}

public static Optional<VersionFlag> detectOptionalVersion(String schemaUri) {
return Optional.ofNullable(detect(schemaUri));
}

private static VersionFlag detect(String schemaUri) {
if (null != schemaUri) {
if (schemaUri.equals(JsonMetaSchema.getV4().getUri())) {
return SpecVersion.VersionFlag.V4;
return VersionFlag.V4;
}
if (schemaUri.equals(JsonMetaSchema.getV6().getUri())) {
return SpecVersion.VersionFlag.V6;
return VersionFlag.V6;
}
if (schemaUri.equals(JsonMetaSchema.getV7().getUri())) {
return SpecVersion.VersionFlag.V7;
return VersionFlag.V7;
}
if (schemaUri.equals(JsonMetaSchema.getV201909().getUri())) {
return SpecVersion.VersionFlag.V201909;
return VersionFlag.V201909;
}
if (schemaUri.equals(JsonMetaSchema.getV202012().getUri())) {
return SpecVersion.VersionFlag.V202012;
return VersionFlag.V202012;
}
throw new JsonSchemaException("'" + schemaTagValue + "' is unrecognizable schema");
});
}
return null;
}

}
Loading

0 comments on commit 708a04e

Please sign in to comment.