001/* 002 * SPDX-FileCopyrightText: none 003 * SPDX-License-Identifier: CC0-1.0 004 */ 005 006package dev.metaschema.databind.io.json; 007 008import java.io.IOException; 009import java.util.HashSet; 010import java.util.Set; 011 012import dev.metaschema.core.model.IBoundObject; 013import dev.metaschema.core.model.util.JsonUtil; 014import dev.metaschema.databind.io.AbstractProblemHandler; 015import dev.metaschema.databind.model.IBoundDefinitionModelComplex; 016 017/** 018 * This problem handler implementation handles common issues when parsing 019 * JSON-based Metaschema module instances. 020 */ 021public class DefaultJsonProblemHandler 022 extends AbstractProblemHandler 023 implements IJsonProblemHandler { 024 private static final String JSON_SCHEMA_FIELD_NAME = "$schema"; 025 private static final Set<String> IGNORED_FIELD_NAMES; 026 027 static { 028 IGNORED_FIELD_NAMES = new HashSet<>(); 029 IGNORED_FIELD_NAMES.add(JSON_SCHEMA_FIELD_NAME); 030 } 031 032 /** 033 * Construct a new problem handler with required field validation enabled. 034 */ 035 public DefaultJsonProblemHandler() { 036 super(); 037 } 038 039 /** 040 * Construct a new problem handler with the specified validation setting. 041 * 042 * @param validateRequiredFields 043 * {@code true} to validate that required fields are present, 044 * {@code false} to skip validation 045 */ 046 public DefaultJsonProblemHandler(boolean validateRequiredFields) { 047 super(validateRequiredFields); 048 } 049 050 @Override 051 public boolean handleUnknownProperty( 052 IBoundDefinitionModelComplex classBinding, 053 IBoundObject targetObject, 054 String fieldName, 055 IJsonParsingContext parsingContext) throws IOException { 056 boolean retval = false; 057 if (IGNORED_FIELD_NAMES.contains(fieldName)) { 058 JsonUtil.skipNextValue(parsingContext.getReader(), parsingContext.getSource()); 059 retval = true; 060 } 061 return retval; 062 } 063}