Changes in 4.5.1
Model changes (AMF model version 2.2.0 -> 2.3.0)
PropertySource and PropertyTarget properties in the AMF model where modified from Uri to String.
In JSON Schema definitions which use the dependencies
facet, the source and target of such dependencies were stored in the graph as Uri references to the parsed properties. Now the graph stores the raw names of such properties (as defined in the JSON Schema) rather than the ID of the parsed properties.
New Features
JSON parsing recovery
- More entries saved in case or error
- Some optimizations in SYAML JSON parser enables AMF to recover from JSON syntax errors and parse parts of a JSON file.
This translates into more entries in the model in case of syntax error and more precise error messages. - Multiline JSON strings now are validated
- According to the JSON definition, a line break in a JSON string MUST be escaped ('\n').
This was not working correctly in some cases but now a syntax error will be shown in case of a line break in a string.
JSON Schema 2019
AMF can now parse and emit JSON Schema 2019 referenced in other specs.
Caveats
- We are still waiting for validator support for JSON Schema 2019. Therefore, AMF Shapes containing fields of said draft that are incompatible with draft-7 will not be used in validation. A warning will be emitted for each incompatible field. The incompatible fields are:
- unevaluatedProperties
- unevaluatedItems
- minContains
- maxContains
Interface Changes
AML Links
Added
- amf.client.model.domain.Scope.isExternalLink(..)
- amf.client.model.domain.Scope.withIsExternalLink(..)
- amf.client.model.domain.CreativeWork.isExternalLink(..)
- amf.client.model.domain.CreativeWork.withIsExternalLink(..)
- amf.client.model.domain.MqttOperationBinding.isExternalLink(..)
- amf.client.model.domain.MqttOperationBinding.withIsExternalLink(..)
- amf.client.model.domain.CustomDomainProperty.isExternalLink(..)
- amf.client.model.domain.CustomDomainProperty.withIsExternalLink(..)
- amf.client.model.domain.ParametrizedSecurityScheme.isExternalLink(..)
- amf.client.model.domain.ParametrizedSecurityScheme.withIsExternalLink(..)
- amf.client.model.domain.Example.isExternalLink(..)
- amf.client.model.domain.Example.withIsExternalLink(..)
- amf.client.model.domain.MqttMessageBinding.isExternalLink(..)
- amf.client.model.domain.MqttMessageBinding.withIsExternalLink(..)
- amf.client.model.domain.MessageBindings.isExternalLink(..)
- amf.client.model.domain.MessageBindings.withIsExternalLink(..)
- amf.client.model.domain.Callback.isExternalLink(..)
- amf.client.model.domain.Callback.withIsExternalLink(..)
- amf.client.model.domain.ParametrizedTrait.isExternalLink(..)
- amf.client.model.domain.ParametrizedTrait.withIsExternalLink(..)
- amf.client.model.domain.Amqp091OperationBinding.isExternalLink(..)
- amf.client.model.domain.Amqp091OperationBinding.withIsExternalLink(..)
- amf.client.model.domain.KafkaOperationBinding.isExternalLink(..)
- amf.client.model.domain.KafkaOperationBinding.withIsExternalLink(..)
- amf.client.model.domain.ResourceType.isExternalLink(..)
- amf.client.model.domain.ResourceType.withIsExternalLink(..)
- amf.client.model.domain.NodeShape.isExternalLink(..)
- amf.client.model.domain.NodeShape.withIsExternalLink(..)
- amf.client.model.domain.WebApi.isExternalLink(..)
- amf.client.model.domain.WebApi.withIsExternalLink(..)
- amf.client.model.domain.TemplatedLink.isExternalLink(..)
- amf.client.model.domain.TemplatedLink.withIsExternalLink(..)
- amf.client.model.domain.SchemaShape.isExternalLink(..)
- amf.client.model.domain.SchemaShape.withIsExternalLink(..)
- amf.client.model.domain.ServerBindings.isExternalLink(..)
- amf.client.model.domain.ServerBindings.withIsExternalLink(..)
- amf.client.model.domain.KafkaMessageBinding.isExternalLink(..)
- amf.client.model.domain.KafkaMessageBinding.withIsExternalLink(..)
- amf.client.model.domain.HttpMessageBinding.isExternalLink(..)
- amf.client.model.domain.HttpMessageBinding.withIsExternalLink(..)
- amf.client.model.domain.ParametrizedDeclaration.isExternalLink(..)
- amf.client.model.domain.ParametrizedDeclaration.withIsExternalLink(..)
- amf.client.model.domain.Operation.isExternalLink(..)
- amf.client.model.domain.Operation.withIsExternalLink(..)
- amf.client.model.domain.Amqp091MessageBinding.isExternalLink(..)
- amf.client.model.domain.Amqp091MessageBinding.withIsExternalLink(..)
- amf.client.model.domain.SecurityRequirement.isExternalLink(..)
- amf.client.model.domain.SecurityRequirement.withIsExternalLink(..)
- amf.client.model.domain.Settings.isExternalLink(..)
- amf.client.model.domain.Settings.withIsExternalLink(..)
- amf.client.model.domain.VariableValue.isExternalLink(..)
- amf.client.model.domain.VariableValue.withIsExternalLink(..)
- amf.client.model.domain.DialectDomainElement.isExternalLink(..)
- amf.client.model.domain.DialectDomainElement.withIsExternalLink(..)
- amf.client.model.domain.MqttServerBinding.isExternalLink(..)
- amf.client.model.domain.MqttServerBinding.withIsExternalLink(..)
- amf.client.model.domain.OAuth2Flow.isExternalLink(..)
- amf.client.model.domain.OAuth2Flow.withIsExternalLink(..)
- amf.client.model.domain.MqttServerLastWill.isExternalLink(..)
- amf.client.model.domain.MqttServerLastWill.withIsExternalLink(..)
- amf.client.model.domain.HttpOperationBinding.isExternalLink(..)
- amf.client.model.domain.HttpOperationBinding.withIsExternalLink(..)
- amf.client.model.domain.Amqp091ChannelBinding.isExternalLink(..)
- amf.client.model.domain.Amqp091ChannelBinding.withIsExternalLink(..)
- amf.client.model.domain.Response.isExternalLink(..)
- amf.client.model.domain.Response.withIsExternalLink(..)
- amf.client.model.domain.MatrixShape.isExternalLink(..)
- amf.client.model.domain.MatrixShape.withIsExternalLink(..)
- amf.client.model.domain.TupleShape.isExternalLink(..)
- amf.client.model.domain.TupleShape.withIsExternalLink(..)
- amf.client.model.domain.XMLSerializer.isExternalLink(..)
- amf.client.model.domain.XMLSerializer.withIsExternalLink(..)
- amf.client.model.domain.Parameter.isExternalLink(..)
- amf.client.model.domain.Parameter.withIsExternalLink(..)
- amf.client.model.domain.ArrayShape.isExternalLink(..)
- amf.client.model.domain.ArrayShape.withIsExternalLink(..)
- amf.client.model.domain.NodeMapping.isExternalLink(..)
- amf.client.model.domain.NodeMapping.withIsExternalLink(..)
- amf.client.model.domain.PropertyDependencies.isExternalLink(..)
- amf.client.model.domain.PropertyDependencies.withIsExternalLink(..)
- amf.client.model.domain.License.isExternalLink(..)
- amf.client.model.domain.License.withIsExternalLink(..)
- amf.client.model.domain.DataNode.isExternalLink(..)
- amf.client.model.domain.DataNode.withIsExternalLink(..)
- amf.client.model.domain.FileShape.isExternalLink(..)
- amf.client.model.domain.FileShape.withIsExternalLink(..)
- amf.client.model.domain.DomainExtension.isExternalLink(..)
- amf.client.model.domain.DomainExtension.withIsExternalLink(..)
- amf.client.model.domain.EndPoint.isExternalLink(..)
- amf.client.model.domain.EndPoint.withIsExternalLink(..)
- amf.client.model.domain.PropertyShape.isExternalLink(..)
- amf.client.model.domain.PropertyShape.withIsExternalLink(..)
- amf.client.model.domain.ClassTerm.isExternalLink(..)
- amf.client.model.domain.ClassTerm.withIsExternalLink(..)
- amf.client.model.domain.AbstractDeclaration.isExternalLink(..)
- amf.client.model.domain.AbstractDeclaration.withIsExternalLink(..)
- amf.client.model.domain.Message.isExternalLink(..)
- amf.client.model.domain.Message.withIsExternalLink(..)
- amf.client.model.domain.ObjectNode.isExternalLink(..)
- amf.client.model.domain.ObjectNode.withIsExternalLink(..)
- amf.client.model.domain.DataArrangeShape.isExternalLink(..)
- amf.client.model.domain.DataArrangeShape.withIsExternalLink(..)
- amf.client.model.domain.WebSocketsChannelBinding.isExternalLink(..)
- amf.client.model.domain.WebSocketsChannelBinding.withIsExternalLink(..)
- amf.client.model.domain.UnionShape.isExternalLink(..)
- amf.client.model.domain.UnionShape.withIsExternalLink(..)
- amf.client.model.domain.ShapeExtension.isExternalLink(..)
- amf.client.model.domain.ShapeExtension.withIsExternalLink(..)
- amf.client.model.domain.ExternalDomainElement.isExternalLink(..)
- amf.client.model.domain.ExternalDomainElement.withIsExternalLink(..)
- amf.client.model.domain.Organization.isExternalLink(..)
- amf.client.model.domain.Organization.withIsExternalLink(..)
- amf.client.model.domain.Request.isExternalLink(..)
- amf.client.model.domain.Request.withIsExternalLink(..)
- amf.client.model.domain.AnyShape.isExternalLink(..)
- amf.client.model.domain.AnyShape.withIsExternalLink(..)
- amf.client.model.domain.Encoding.isExternalLink(..)
- amf.client.model.domain.Encoding.withIsExternalLink(..)
- amf.client.model.domain.PropertyMapping.externallyLinkable(..)
- amf.client.model.domain.PropertyMapping.isExternalLink(..)
- amf.client.model.domain.PropertyMapping.withExternallyLinkable(..)
- amf.client.model.domain.PropertyMapping.withIsExternalLink(..)
- amf.client.model.domain.RecursiveShape.isExternalLink(..)
- amf.client.model.domain.RecursiveShape.withIsExternalLink(..)
- amf.client.model.domain.Server.isExternalLink(..)
- amf.client.model.domain.Server.withIsExternalLink(..)
- amf.client.model.domain.SecurityScheme.isExternalLink(..)
- amf.client.model.domain.SecurityScheme.withIsExternalLink(..)
- amf.client.model.domain.OperationBindings.isExternalLink(..)
- amf.client.model.domain.OperationBindings.withIsExternalLink(..)
- amf.client.model.domain.VocabularyReference.isExternalLink(..)
- amf.client.model.domain.VocabularyReference.withIsExternalLink(..)
- amf.client.model.domain.Tag.isExternalLink(..)
- amf.client.model.domain.Tag.withIsExternalLink(..)
- amf.client.model.domain.ScalarShape.isExternalLink(..)
- amf.client.model.domain.ScalarShape.withIsExternalLink(..)
- amf.client.model.domain.PublicNodeMapping.isExternalLink(..)
- amf.client.model.domain.PublicNodeMapping.withIsExternalLink(..)
- amf.client.model.domain.ParametrizedResourceType.isExternalLink(..)
- amf.client.model.domain.ParametrizedResourceType.withIsExternalLink(..)
- amf.client.model.domain.CorrelationId.isExternalLink(..)
- amf.client.model.domain.CorrelationId.withIsExternalLink(..)
- amf.client.model.domain.PropertyTerm.isExternalLink(..)
- amf.client.model.domain.PropertyTerm.withIsExternalLink(..)
- amf.client.model.domain.NilShape.isExternalLink(..)
- amf.client.model.domain.NilShape.withIsExternalLink(..)
- amf.client.model.domain.DomainElement.isExternalLink(..)
- amf.client.model.domain.DomainElement.withIsExternalLink(..)
- amf.client.model.domain.Payload.isExternalLink(..)
- amf.client.model.domain.Payload.withIsExternalLink(..)
- amf.client.model.domain.ChannelBindings.isExternalLink(..)
- amf.client.model.domain.ChannelBindings.withIsExternalLink(..)
- amf.client.model.domain.External.isExternalLink(..)
- amf.client.model.domain.External.withIsExternalLink(..)
- amf.client.model.domain.AsyncApi.isExternalLink(..)
- amf.client.model.domain.AsyncApi.withIsExternalLink(..)
- amf.client.model.domain.ArrayNode.isExternalLink(..)
- amf.client.model.domain.ArrayNode.withIsExternalLink(..)
- amf.client.model.domain.Trait.isExternalLink(..)
- amf.client.model.domain.Trait.withIsExternalLink(..)
- amf.client.model.domain.Shape.isExternalLink(..)
- amf.client.model.domain.Shape.withIsExternalLink(..)
- amf.client.model.domain.IriTemplateMapping.isExternalLink(..)
- amf.client.model.domain.IriTemplateMapping.withIsExternalLink(..)
Validation Changes
The JSON parsing recovery feature allows a better validation of JSON files with syntax errors. This effect is twofold:
- JSON syntax errors are now more isolated
- More JSON content is now parsed and can be subject of validation
This can have an impact on OAS API specifications using JSON syntax.
AMF Fixed issues
APIMF-2714 - Investigate the SBT plugin publication process
APIMF-2706 - Fix cycle tests
APIMF-2705 - Analysis graphql schema
APIMF-2685 - Recursive fixpoint without jsonld base when using compactUris
APIMF-2682 - Analyze - Canonical Transformation validation low valid percentage in tckutor sets
APIMF-2667 - wrong validation with query parameters of type ""any"""
APIMF-2664 - Design a new examples project
APIMF-2663 - DocBook refactor analysis
APIMF-2662 - Analyze creation and use of ExtensionProvenance annotations
APIMF-2654 - Invalid json schemas generated
APIMF-2651 - Issue validating enum at example using json schema
APIMF-2625 - Analyze performance when validating large amount of enums
APIMF-2623 - Release first version of new documentation - add features
APIMF-2615 - Compatibility matrix for types support
APIMF-2186 - RAML 1.0 nested union types not resolved correctly Github Issue #356