use of com.networknt.schema.JsonSchema in project vscode-nextgenas by BowlerHatLLC.
the class ASConfigProjectConfigStrategy method getOptions.
public ProjectOptions getOptions() {
changed = false;
if (asconfigPath == null) {
return null;
}
File asconfigFile = asconfigPath.toFile();
if (!asconfigFile.exists()) {
return null;
}
Path projectRoot = asconfigPath.getParent();
ProjectType type = ProjectType.APP;
String config = "flex";
String[] files = null;
String additionalOptions = null;
CompilerOptions compilerOptions = new CompilerOptions();
try (InputStream schemaInputStream = getClass().getResourceAsStream("/schemas/asconfig.schema.json")) {
JsonSchemaFactory factory = new JsonSchemaFactory();
JsonSchema schema = factory.getSchema(schemaInputStream);
String contents = FileUtils.readFileToString(asconfigFile);
ObjectMapper mapper = new ObjectMapper();
//VSCode allows comments, so we should too
mapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
JsonNode json = mapper.readTree(contents);
Set<ValidationMessage> errors = schema.validate(json);
if (!errors.isEmpty()) {
System.err.println("Failed to validate asconfig.json.");
for (ValidationMessage error : errors) {
System.err.println(error.toString());
}
return null;
} else {
if (//optional, defaults to "app"
json.has(ProjectOptions.TYPE)) {
String typeString = json.get(ProjectOptions.TYPE).asText();
type = ProjectType.fromToken(typeString);
}
if (//optional, defaults to "flex"
json.has(ProjectOptions.CONFIG)) {
config = json.get(ProjectOptions.CONFIG).asText();
}
if (//optional
json.has(ProjectOptions.FILES)) {
JsonNode jsonFiles = json.get(ProjectOptions.FILES);
int fileCount = jsonFiles.size();
files = new String[fileCount];
for (int i = 0; i < fileCount; i++) {
String pathString = jsonFiles.get(i).asText();
Path filePath = projectRoot.resolve(pathString);
files[i] = filePath.toString();
}
}
if (//optional
json.has(ProjectOptions.COMPILER_OPTIONS)) {
JsonNode jsonCompilerOptions = json.get(ProjectOptions.COMPILER_OPTIONS);
if (jsonCompilerOptions.has(CompilerOptions.DEBUG)) {
compilerOptions.debug = jsonCompilerOptions.get(CompilerOptions.DEBUG).asBoolean();
}
if (jsonCompilerOptions.has(CompilerOptions.DEFINE)) {
HashMap<String, String> defines = new HashMap<>();
JsonNode jsonDefine = jsonCompilerOptions.get(CompilerOptions.DEFINE);
for (int i = 0, count = jsonDefine.size(); i < count; i++) {
JsonNode jsonNamespace = jsonDefine.get(i);
String name = jsonNamespace.get(CompilerOptions.DEFINE_NAME).asText();
JsonNode jsonValue = jsonNamespace.get(CompilerOptions.DEFINE_VALUE);
String value = jsonValue.asText();
if (jsonValue.isTextual()) {
value = "\"" + value + "\"";
}
defines.put(name, value.toString());
}
compilerOptions.defines = defines;
}
if (jsonCompilerOptions.has(CompilerOptions.EXTERNAL_LIBRARY_PATH)) {
JsonNode jsonExternalLibraryPath = jsonCompilerOptions.get(CompilerOptions.EXTERNAL_LIBRARY_PATH);
compilerOptions.externalLibraryPath = jsonPathsToList(jsonExternalLibraryPath, projectRoot);
}
if (jsonCompilerOptions.has(CompilerOptions.JS_EXTERNAL_LIBRARY_PATH)) {
JsonNode jsonExternalLibraryPath = jsonCompilerOptions.get(CompilerOptions.JS_EXTERNAL_LIBRARY_PATH);
compilerOptions.jsExternalLibraryPath = jsonPathsToList(jsonExternalLibraryPath, projectRoot);
}
if (jsonCompilerOptions.has(CompilerOptions.SWF_EXTERNAL_LIBRARY_PATH)) {
JsonNode jsonExternalLibraryPath = jsonCompilerOptions.get(CompilerOptions.SWF_EXTERNAL_LIBRARY_PATH);
compilerOptions.swfExternalLibraryPath = jsonPathsToList(jsonExternalLibraryPath, projectRoot);
}
if (jsonCompilerOptions.has(CompilerOptions.INCLUDE_CLASSES)) {
JsonNode jsonIncludeClasses = jsonCompilerOptions.get(CompilerOptions.INCLUDE_CLASSES);
ArrayList<String> includeClasses = new ArrayList<>();
for (int i = 0, count = jsonIncludeClasses.size(); i < count; i++) {
String qualifiedName = jsonIncludeClasses.get(i).asText();
includeClasses.add(qualifiedName);
}
compilerOptions.includeClasses = includeClasses;
}
if (jsonCompilerOptions.has(CompilerOptions.INCLUDE_NAMESPACES)) {
JsonNode jsonIncludeNamespaces = jsonCompilerOptions.get(CompilerOptions.INCLUDE_NAMESPACES);
ArrayList<String> includeNamespaces = new ArrayList<>();
for (int i = 0, count = jsonIncludeNamespaces.size(); i < count; i++) {
String namespaceURI = jsonIncludeNamespaces.get(i).asText();
includeNamespaces.add(namespaceURI);
}
compilerOptions.includeNamespaces = includeNamespaces;
}
if (jsonCompilerOptions.has(CompilerOptions.INCLUDE_SOURCES)) {
JsonNode jsonIncludeSources = jsonCompilerOptions.get(CompilerOptions.INCLUDE_SOURCES);
compilerOptions.includeSources = jsonPathsToList(jsonIncludeSources, projectRoot);
}
if (jsonCompilerOptions.has(CompilerOptions.JS_OUTPUT_TYPE)) {
String jsonJSOutputType = jsonCompilerOptions.get(CompilerOptions.JS_OUTPUT_TYPE).asText();
compilerOptions.jsOutputType = jsonJSOutputType;
}
if (jsonCompilerOptions.has(CompilerOptions.NAMESPACE)) {
JsonNode jsonLibraryPath = jsonCompilerOptions.get(CompilerOptions.NAMESPACE);
ArrayList<MXMLNamespaceMapping> namespaceMappings = new ArrayList<>();
for (int i = 0, count = jsonLibraryPath.size(); i < count; i++) {
JsonNode jsonNamespace = jsonLibraryPath.get(i);
String uri = jsonNamespace.get(CompilerOptions.NAMESPACE_URI).asText();
String manifest = jsonNamespace.get(CompilerOptions.NAMESPACE_MANIFEST).asText();
MXMLNamespaceMapping mapping = new MXMLNamespaceMapping(uri, manifest);
namespaceMappings.add(mapping);
}
compilerOptions.namespaceMappings = namespaceMappings;
}
if (jsonCompilerOptions.has(CompilerOptions.LIBRARY_PATH)) {
JsonNode jsonLibraryPath = jsonCompilerOptions.get(CompilerOptions.LIBRARY_PATH);
compilerOptions.libraryPath = jsonPathsToList(jsonLibraryPath, projectRoot);
}
if (jsonCompilerOptions.has(CompilerOptions.JS_LIBRARY_PATH)) {
JsonNode jsonLibraryPath = jsonCompilerOptions.get(CompilerOptions.JS_LIBRARY_PATH);
compilerOptions.jsLibraryPath = jsonPathsToList(jsonLibraryPath, projectRoot);
}
if (jsonCompilerOptions.has(CompilerOptions.SWF_LIBRARY_PATH)) {
JsonNode jsonLibraryPath = jsonCompilerOptions.get(CompilerOptions.SWF_LIBRARY_PATH);
compilerOptions.swfLibraryPath = jsonPathsToList(jsonLibraryPath, projectRoot);
}
if (jsonCompilerOptions.has(CompilerOptions.SOURCE_PATH)) {
JsonNode jsonSourcePath = jsonCompilerOptions.get(CompilerOptions.SOURCE_PATH);
compilerOptions.sourcePath = jsonPathsToList(jsonSourcePath, projectRoot);
}
if (jsonCompilerOptions.has(CompilerOptions.TARGETS)) {
JsonNode jsonTargets = jsonCompilerOptions.get(CompilerOptions.TARGETS);
ArrayList<String> targets = new ArrayList<>();
for (int i = 0, count = jsonTargets.size(); i < count; i++) {
String target = jsonTargets.get(i).asText();
targets.add(target);
}
compilerOptions.targets = targets;
}
if (jsonCompilerOptions.has(CompilerOptions.WARNINGS)) {
compilerOptions.warnings = jsonCompilerOptions.get(CompilerOptions.WARNINGS).asBoolean();
}
}
//these options are formatted as if sent in through the command line
if (//optional
json.has(ProjectOptions.ADDITIONAL_OPTIONS)) {
additionalOptions = json.get(ProjectOptions.ADDITIONAL_OPTIONS).asText();
}
}
} catch (Exception e) {
System.err.println("Failed to parse asconfig.json: " + e);
e.printStackTrace();
return null;
}
//include-sources compiler option
if (type == ProjectType.LIB && files != null) {
if (compilerOptions.includeSources == null) {
compilerOptions.includeSources = new ArrayList<>();
}
for (int i = 0, count = files.length; i < count; i++) {
String filePath = files[i];
compilerOptions.includeSources.add(new File(filePath));
}
files = null;
}
ProjectOptions options = new ProjectOptions();
options.type = type;
options.config = config;
options.files = files;
options.compilerOptions = compilerOptions;
options.additionalOptions = additionalOptions;
return options;
}
use of com.networknt.schema.JsonSchema in project fabric8-maven-plugin by fabric8io.
the class ResourceValidator method validate.
/**
* Validates the resource descriptors as per JSON schema. If any resource is invalid it throws @{@link ConstraintViolationException} with
* all violated constraints
*
* @return number of resources processed
* @throws ConstraintViolationException
* @throws IOException
*/
public int validate() throws ConstraintViolationException, IOException {
for (File resource : resources) {
if (resource.isFile() && resource.exists()) {
try {
log.info("validating %s resource", resource.toString());
JsonNode inputSpecNode = geFileContent(resource);
String kind = inputSpecNode.get("kind").toString();
JsonSchema schema = getJsonSchema(prepareSchemaUrl(SCHEMA_JSON), kind);
Set<ValidationMessage> errors = schema.validate(inputSpecNode);
processErrors(errors, resource);
} catch (JSONException e) {
throw new ConstraintViolationException(e.getMessage(), new HashSet<ConstraintViolationImpl>());
} catch (URISyntaxException e) {
throw new IOException(e);
}
}
}
return resources.length;
}
use of com.networknt.schema.JsonSchema in project light-rest-4j by networknt.
the class SchemaValidator method doValidate.
private Status doValidate(final String value, final Object schema) {
requireNonNull(schema, "A schema is required");
Status status = null;
Set<ValidationMessage> processingReport = null;
try {
final JsonNode schemaObject = Json.mapper().readTree(Json.pretty(schema));
if (api != null) {
if (this.definitions == null) {
this.definitions = Json.mapper().readTree(Json.pretty(api.getDefinitions()));
}
((ObjectNode) schemaObject).set(DEFINITIONS_FIELD, this.definitions);
}
JsonSchema jsonSchema = JsonSchemaFactory.getInstance().getSchema(schemaObject);
String normalisedValue = value;
if (schema instanceof StringProperty) {
normalisedValue = Util.quote(value);
}
final JsonNode content = Json.mapper().readTree(normalisedValue);
processingReport = jsonSchema.validate(content);
} catch (JsonParseException e) {
return new Status(VALIDATOR_SCHEMA_INVALID_JSON, e.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
if (processingReport != null && processingReport.size() > 0) {
ValidationMessage vm = processingReport.iterator().next();
status = new Status(VALIDATOR_SCHEMA, vm.getMessage());
}
return status;
}
use of com.networknt.schema.JsonSchema in project SONG by overture-stack.
the class schemaValidationTests method getJsonSchemaFromClasspath.
protected JsonSchema getJsonSchemaFromClasspath(String name) throws Exception {
JsonSchemaFactory factory = new JsonSchemaFactory();
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(name);
JsonSchema schema = factory.getSchema(is);
return schema;
}
use of com.networknt.schema.JsonSchema in project SONG by overture-stack.
the class schemaValidationTests method validate.
protected Set<ValidationMessage> validate(String schemaFile, String documentFile) throws Exception {
JsonSchema schema = getJsonSchemaFromClasspath(schemaFile);
JsonNode node = getJsonNodeFromClasspath(documentFile);
val errors = schema.validate(node);
if (errors.size() > 0) {
for (val msg : errors) {
log.error(String.format("Error code %s: %s ", msg.getCode(), msg.getMessage()));
}
}
return errors;
}
Aggregations