Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Since 1.3.0: Warnings for unknown keywords in $defs #940

Closed
aznan2 opened this issue Jan 29, 2024 · 6 comments · Fixed by #942
Closed

Since 1.3.0: Warnings for unknown keywords in $defs #940

aznan2 opened this issue Jan 29, 2024 · 6 comments · Fixed by #942

Comments

@aznan2
Copy link
Contributor

aznan2 commented Jan 29, 2024

After the upgrade I see log messages complaining of unknown keywords in $defs, so for example

String schema = """
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$ref": "#/$defs/greeting",
  "$defs": {
    "greeting": {}
  }
}""";
JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V202012);
factory.getSchema(schema);

will cause this log line 2024-01-29 16:19:59.545 WARN 24200 --- [ main] com.networknt.schema.JsonMetaSchema : Unknown keyword greeting - you should define your own Meta Schema. If the keyword is irrelevant for validation, just use a NonValidationKeyword.

It looks lite the NonValidationKeyword class sets up a special case for $defs and definitions, but it seems it doesn't apply anymore.

@Taschee
Copy link

Taschee commented Jan 29, 2024

We observed the same warnings

@justin-tay
Copy link
Contributor

This should be fixed in the next version.

@shivam-sharma7
Copy link

@justin-tay look at this, I got during migration with 1.3.0

[WARNING] COMPILATION WARNING :
[INFO] -------------------------------------------------------------
[WARNING] [options] system modules path not set in conjunction with -source 15
[INFO] 1 warning
[INFO] -------------------------------------------------------------
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] C:\Users\shivam sharma\Desktop\My Project\open-source\Horreum\horreum-backend\src\main\java\io\hyperfoil\tools\horreum\svc\SchemaServiceImpl.java:[82,31] error: package com.networknt.schema.uri does not exist
[ERROR] C:\Users\shivam sharma\Desktop\My Project\open-source\Horreum\horreum-backend\src\main\java\io\hyperfoil\tools\horreum\svc\SchemaServiceImpl.java:[83,31] error: package com.networknt.schema.uri does not exist
[ERROR] C:\Users\shivam sharma\Desktop\My Project\open-source\Horreum\horreum-backend\src\main\java\io\hyperfoil\tools\horreum\svc\SchemaServiceImpl.java:[84,31] error: package com.networknt.schema.uri does not exist
[ERROR] C:\Users\shivam sharma\Desktop\My Project\open-source\Horreum\horreum-backend\src\main\java\io\hyperfoil\tools\horreum\svc\SchemaServiceImpl.java:[117,24] error: cannot find symbol
  symbol:   class URIFactory
  location: class SchemaServiceImpl
[INFO] 4 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for Horreum 0.12-SNAPSHOT:
[INFO]
[INFO] Horreum ............................................ SUCCESS [  1.105 s]
[INFO] horreum-api ........................................ SUCCESS [ 17.519 s]
[INFO] Horreum Client ..................................... SUCCESS [  1.384 s]
[INFO] Horreum infra - common ............................. SUCCESS [  0.575 s]
[INFO] Horreum Dev Services - Parent ...................... SUCCESS [  0.039 s]
[INFO] Horreum Dev Services - Runtime ..................... SUCCESS [  3.374 s]
[INFO] Horreum Dev Services - Deployment .................. SUCCESS [  4.853 s]
[INFO] Horreum Backend .................................... FAILURE [  8.196 s]
[INFO] Horreum Integration Tests .......................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  39.943 s
[INFO] Finished at: 2024-01-30T07:36:10+05:30
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.12.1:compile (default-compile) on project horreum-backend: Compilation failure: Compilation failure:
[ERROR] C:\Users\shivam sharma\Desktop\My Project\open-source\Horreum\horreum-backend\src\main\java\io\hyperfoil\tools\horreum\svc\SchemaServiceImpl.java:[82,31] error: package com.networknt.schema.uri does not exist
[ERROR] C:\Users\shivam sharma\Desktop\My Project\open-source\Horreum\horreum-backend\src\main\java\io\hyperfoil\tools\horreum\svc\SchemaServiceImpl.java:[83,31] error: package com.networknt.schema.uri does not exist
[ERROR] C:\Users\shivam sharma\Desktop\My Project\open-source\Horreum\horreum-backend\src\main\java\io\hyperfoil\tools\horreum\svc\SchemaServiceImpl.java:[84,31] error: package com.networknt.schema.uri does not exist
[ERROR] C:\Users\shivam sharma\Desktop\My Project\open-source\Horreum\horreum-backend\src\main\java\io\hyperfoil\tools\horreum\svc\SchemaServiceImpl.java:[117,24] error: cannot find symbol
[ERROR]   symbol:   class URIFactory
[ERROR]   location: class SchemaServiceImpl
[ERROR] -> [Help 1]

@justin-tay
Copy link
Contributor

@shivam-sharma7 that is not related to this issue. 1.3.0 contains breaking changes. You can look at the Upgrading to new versions document for details.

@shivam-sharma7
Copy link

@justin-tay Thanks, can you look at the imports these are causing above errors. I don't know why?

import com.networknt.schema.JsonSchemaFactory;
import com.networknt.schema.uri.URIFactory;
import com.networknt.schema.uri.URIFetcher;
import com.networknt.schema.uri.URLFactory;

@justin-tay
Copy link
Contributor

These classes no longer exist.

import com.networknt.schema.uri.URIFactory;
import com.networknt.schema.uri.URIFetcher;
import com.networknt.schema.uri.URLFactory;

The replacement is SchemaLoader.

public interface SchemaLoader {
/**
* Loads a schema given the retrieval IRI.
*
* @param absoluteIri the retrieval IRI
* @return the input stream source
*/
InputStreamSource getSchema(AbsoluteIri absoluteIri);
}

You will need to configure it on the JsonSchemaFactory.

public Builder schemaLoaders(Consumer<SchemaLoaders.Builder> schemaLoadersBuilderCustomizer) {
if (this.schemaLoadersBuilder == null) {
this.schemaLoadersBuilder = SchemaLoaders.builder();
}
schemaLoadersBuilderCustomizer.accept(this.schemaLoadersBuilder);
return this;
}

This is how a typical implementation looks like

public class MapSchemaLoader implements SchemaLoader {
private final Function<String, String> mappings;
public MapSchemaLoader(Map<String, String> mappings) {
this(mappings::get);
}
public MapSchemaLoader(Function<String, String> mappings) {
this.mappings = mappings;
}
@Override
public InputStreamSource getSchema(AbsoluteIri absoluteIri) {
try {
String result = mappings.apply(absoluteIri.toString());
if (result != null) {
return () -> new ByteArrayInputStream(result.getBytes(StandardCharsets.UTF_8));
}
} catch (Exception e) {
// Do nothing
}
return null;
}
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
4 participants