diff --git a/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/AspectModelAasVisitor.java b/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/AspectModelAasVisitor.java index 5c59d5645..24dc24065 100644 --- a/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/AspectModelAasVisitor.java +++ b/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/AspectModelAasVisitor.java @@ -195,13 +195,13 @@ private List updateGlobalReferenceWithSeeReferences( final SubmodelEl @Override public Environment visitAspect( final Aspect aspect, final Context context ) { - Context usedContext = context; - if ( usedContext == null ) { + final Context usedContext = Optional.ofNullable( context ).orElseGet( () -> { final Submodel submodel = new DefaultSubmodel.Builder().build(); final Environment environment = new DefaultEnvironment.Builder().submodels( Collections.singletonList( submodel ) ).build(); - usedContext = new Context( environment, submodel ); - usedContext.setEnvironment( environment ); - } + final Context result = new Context( environment, submodel ); + result.setEnvironment( environment ); + return result; + } ); final String submodelId = aspect.getAspectModelUrn().get().getUrn().toString() + "/submodel"; @@ -238,11 +238,11 @@ public Environment visitAspect( final Aspect aspect, final Context context ) { private List visitOperations( final List elements, final Context context ) { - return elements.stream().map( i -> mapText( i, context ) ).collect( Collectors.toList() ); + return elements.stream().map( element -> mapText( element, context ) ).collect( Collectors.toList() ); } private List visitProperties( final List elements, final Context context ) { - return elements.stream().map( i -> mapText( i, context ) ) + return elements.stream().map( element -> mapText( element, context ) ) .filter( Optional::isPresent ) .map( Optional::get ) .collect( Collectors.toList() ); @@ -251,7 +251,7 @@ private List visitProperties( final List elements, fi private Optional mapText( final Property property, final Context context ) { final Optional defaultResultForProperty = context.getSubmodel() .getSubmodelElements().stream() - .filter( i -> i.getIdShort().equals( property.getName() ) ) + .filter( submodelElement -> submodelElement.getIdShort().equals( property.getName() ) ) .findFirst(); if ( recursiveProperty.contains( property ) ) { // The guard checks for recursion in properties. If a recursion happens, the respective @@ -299,20 +299,18 @@ private SubmodelElement decideOnMapping( final Property property, final Context } private SubmodelElement decideOnMapping( final Type type, final Property property, final Context context ) { - if ( type instanceof Entity ) { - return mapToAasSubModelElementCollection( (Entity) type, context ); - } else { - return findPropertyMapper( property ).mapToAasProperty( type, property, context ); - } + return type instanceof Entity + ? mapToAasSubModelElementCollection( (Entity) type, property, context ) + : findPropertyMapper( property ).mapToAasProperty( type, property, context ); } - private SubmodelElementCollection mapToAasSubModelElementCollection( final Entity entity, final Context context ) { - final List submodelElements = - visitProperties( entity.getAllProperties(), context ); + private SubmodelElementCollection mapToAasSubModelElementCollection( final Entity entity, final Property property, + final Context context ) { + final List submodelElements = visitProperties( entity.getAllProperties(), context ); return new DefaultSubmodelElementCollection.Builder() - .idShort( entity.getName() ) - .displayName( LangStringMapper.NAME.map( entity.getPreferredNames() ) ) - .description( LangStringMapper.TEXT.map( entity.getDescriptions() ) ) + .idShort( property.getName() ) + .displayName( LangStringMapper.NAME.map( property.getPreferredNames() ) ) + .description( LangStringMapper.TEXT.map( property.getDescriptions() ) ) .value( submodelElements ) .supplementalSemanticIds( buildGlobalReferenceForSeeReferences( entity ) ) .build(); @@ -326,10 +324,10 @@ private Operation mapText( final org.eclipse.esmf.metamodel.Operation operation, .semanticId( buildReferenceToOperation( operation ) ) .idShort( operation.getName() ) .inputVariables( operation.getInput().stream() - .map( i -> mapOperationVariable( i, context ) ) + .map( input -> mapOperationVariable( input, context ) ) .collect( Collectors.toList() ) ) .outputVariables( operation.getOutput().stream() - .map( i -> mapOperationVariable( i, context ) ) + .map( output -> mapOperationVariable( output, context ) ) .collect( Collectors.toList() ) ) .supplementalSemanticIds( buildGlobalReferenceForSeeReferences( operation ) ) .build(); @@ -527,7 +525,7 @@ private void createSubmodelElement( final SubmodelElementBuilder op, final Conte @Override public Environment visitCharacteristic( final Characteristic characteristic, final Context context ) { - createSubmodelElement( ( property ) -> decideOnMapping( property, context ), context ); + createSubmodelElement( property -> decideOnMapping( property, context ), context ); return context.getEnvironment(); } @@ -554,7 +552,7 @@ public Environment visitSortedSet( final SortedSet sortedSet, final Context cont private Environment visitCollectionProperty( final T collection, final Context context ) { final SubmodelElementBuilder builder = property -> { - DefaultSubmodelElementList.Builder submodelBuilder = new DefaultSubmodelElementList.Builder() + final DefaultSubmodelElementList.Builder submodelBuilder = new DefaultSubmodelElementList.Builder() .idShort( property.getName() ) .typeValueListElement( AasSubmodelElements.DATA_ELEMENT ) .displayName( LangStringMapper.NAME.map( property.getPreferredNames() ) ) @@ -605,7 +603,7 @@ private List getValues( final T collecti .getBytes( StandardCharsets.UTF_8 ) ).build() ); } else { final List values = StreamSupport.stream( arrayNode.spliterator(), false ) - .map( n -> { + .map( node -> { context.iterate( property ); return decideOnMapping( property, context ); } ) @@ -682,7 +680,7 @@ private Property createProperty( final KnownVersion modelVersion, final String p @Override public Environment visitQuantifiable( final Quantifiable quantifiable, final Context context ) { - createSubmodelElement( ( property ) -> decideOnMapping( property, context ), context ); + createSubmodelElement( property -> decideOnMapping( property, context ), context ); if ( quantifiable.getUnit().isPresent() ) { final ConceptDescription conceptDescription = @@ -712,7 +710,7 @@ public Environment visitDuration( final Duration duration, final Context context @Override public Environment visitEnumeration( final Enumeration enumeration, final Context context ) { - createSubmodelElement( ( property ) -> decideOnMapping( property, context ), context ); + createSubmodelElement( property -> decideOnMapping( property, context ), context ); final ConceptDescription conceptDescription = context.getConceptDescription( DEFAULT_MAPPER.determineIdentifierFor( context.getProperty() ) ); diff --git a/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/Context.java b/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/Context.java index b24842109..0b0e7bb8e 100644 --- a/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/Context.java +++ b/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/Context.java @@ -176,8 +176,7 @@ public String getPropertyShortId() { * @return the property value at the current property path */ public String getPropertyValue( final String defaultValue ) { - return getRawPropertyValue().map( valueNode -> valueNode.asText( defaultValue ) ) - .orElse( defaultValue ); + return getRawPropertyValue().flatMap( valueNode -> Optional.ofNullable( valueNode.asText() ) ).orElse( defaultValue ); } /** diff --git a/core/esmf-aspect-model-aas-generator/src/test/java/org/eclipse/esmf/aspectmodel/aas/AspectModelAasGeneratorTest.java b/core/esmf-aspect-model-aas-generator/src/test/java/org/eclipse/esmf/aspectmodel/aas/AspectModelAasGeneratorTest.java index b9b8f580f..9307ff3de 100644 --- a/core/esmf-aspect-model-aas-generator/src/test/java/org/eclipse/esmf/aspectmodel/aas/AspectModelAasGeneratorTest.java +++ b/core/esmf-aspect-model-aas-generator/src/test/java/org/eclipse/esmf/aspectmodel/aas/AspectModelAasGeneratorTest.java @@ -35,6 +35,7 @@ import org.eclipse.esmf.test.TestResources; import com.fasterxml.jackson.databind.JsonNode; +import org.assertj.core.api.InstanceOfAssertFactories; import org.eclipse.digitaltwin.aas4j.v3.dataformat.core.DeserializationException; import org.eclipse.digitaltwin.aas4j.v3.dataformat.xml.XmlDeserializer; import org.eclipse.digitaltwin.aas4j.v3.model.AasSubmodelElements; @@ -77,7 +78,7 @@ void generateAasxWithAspectDataForMultilanguageText() throws DeserializationExce .satisfies( property -> assertThat( property ).asInstanceOf( type( MultiLanguageProperty.class ) ) .extracting( MultiLanguageProperty::getValue ) - .asList() + .asInstanceOf( InstanceOfAssertFactories.LIST ) .hasSize( 2 ) .allSatisfy( langString -> assertThat( List.of( "en", "de" ) ).contains( ((AbstractLangString) langString).getLanguage() ) ) ) ); @@ -92,11 +93,11 @@ void generateAasxWithAspectDataForEitherWithEntity() throws DeserializationExcep .anySatisfy( sme -> assertThat( sme ).asInstanceOf( type( SubmodelElementList.class ) ) .extracting( SubmodelElementList::getValue ) - .asList() + .asInstanceOf( InstanceOfAssertFactories.LIST ) .anySatisfy( entity -> assertThat( entity ).asInstanceOf( type( SubmodelElementCollection.class ) ) .extracting( SubmodelElementCollection::getValue ) - .asList() + .asInstanceOf( InstanceOfAssertFactories.LIST ) .singleElement( type( Property.class ) ) .extracting( Property::getValue ) .isEqualTo( "The result" ) ) ) ); @@ -111,11 +112,11 @@ void generateAasxWithAspectDataForNestedEntityLists() throws DeserializationExce .anySatisfy( sme -> assertThat( sme ).asInstanceOf( type( SubmodelElementList.class ) ) .extracting( SubmodelElementList::getValue ) - .asList() + .asInstanceOf( InstanceOfAssertFactories.LIST ) .anySatisfy( entity -> assertThat( entity ).asInstanceOf( type( SubmodelElementCollection.class ) ) .extracting( SubmodelElementCollection::getValue ) - .asList() + .asInstanceOf( InstanceOfAssertFactories.LIST ) .anySatisfy( property -> assertThat( property ).asInstanceOf( type( Property.class ) ) .extracting( Property::getValue ) @@ -143,6 +144,8 @@ void testGenerateAasxFromAspectModelWithEntity() throws DeserializationException assertThat( env.getSubmodels().get( 0 ).getSubmodelElements() ).hasSize( 1 ); final Submodel submodel = env.getSubmodels().get( 0 ); assertThat( submodel.getSubmodelElements().get( 0 ) ).isInstanceOfSatisfying( SubmodelElementCollection.class, collection -> { + assertThat( collection.getIdShort() ).isEqualTo( "testProperty" ); + final SubmodelElement property = collection.getValue().stream().findFirst().get(); assertThat( property.getIdShort() ).isEqualTo( "entityProperty" ); assertThat( submodel.getSupplementalSemanticIds() ).anySatisfy( ref -> { @@ -223,8 +226,8 @@ void testGenerateAasxFromAspectModelWithEitherWithComplexTypes() throws Deserial final Environment env = getAssetAdministrationShellFromAspect( TestAspect.ASPECT_WITH_EITHER_WITH_COMPLEX_TYPES ); assertThat( env.getSubmodels() ).hasSize( 1 ); assertThat( env.getSubmodels().get( 0 ).getSubmodelElements() ).hasSize( 1 ); - final SubmodelElementList elementCollection = ( (SubmodelElementList) env.getSubmodels().get( 0 ).getSubmodelElements().get( 0 ) ); - final Set testValues = Set.of( "RightEntity", "LeftEntity" ); + final SubmodelElementList elementCollection = ((SubmodelElementList) env.getSubmodels().get( 0 ).getSubmodelElements().get( 0 )); + final Set testValues = Set.of( "testProperty", "result" ); assertThat( elementCollection.getValue() ).as( "Neither left nor right entity contained." ) .anyMatch( x -> testValues.contains( x.getIdShort() ) ); @@ -246,7 +249,7 @@ void testGenerateAasxFromAspectModelWithQuantifiable() throws DeserializationExc final DataSpecificationContent dataSpecificationContent = getDataSpecificationIec61360( "urn:samm:org.eclipse.esmf.test:1.0.0#testProperty", env ); - assertThat( ( (DataSpecificationIec61360) dataSpecificationContent ).getUnit() ).isEqualTo( "percent" ); + assertThat( ((DataSpecificationIec61360) dataSpecificationContent).getUnit() ).isEqualTo( "percent" ); } @Test @@ -381,14 +384,13 @@ void testGeneratedAasxFromAspectModelSemanticIdsAreGlobalReferences() throws Des } private void checkDataSpecificationIec61360( final Set semanticIds, final Environment env ) { - semanticIds.forEach( x -> getDataSpecificationIec61360( x, env ) ); + semanticIds.forEach( semanticId -> getDataSpecificationIec61360( semanticId, env ) ); } private DataSpecificationContent getDataSpecificationIec61360( final String semanticId, final Environment env ) { - final List conceptDescriptions = env.getConceptDescriptions(); final List filteredConceptDescriptions = - conceptDescriptions.stream() - .filter( x -> x.getId().equals( semanticId ) ) + env.getConceptDescriptions().stream() + .filter( conceptDescription -> conceptDescription.getId().equals( semanticId ) ) .toList(); assertThat( filteredConceptDescriptions ).hasSize( 1 ); diff --git a/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/asyncapi/AspectModelAsyncApiGenerator.java b/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/asyncapi/AspectModelAsyncApiGenerator.java index f545d3de8..e68a50fed 100644 --- a/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/asyncapi/AspectModelAsyncApiGenerator.java +++ b/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/asyncapi/AspectModelAsyncApiGenerator.java @@ -101,7 +101,7 @@ private void generateComponentsMessageAndSchemaEvent( final ObjectNode messagesN messageNode.put( "name", event.getName() ); messageNode.put( TITLE_FIELD, event.getPreferredName( locale ) ); messageNode.put( "summary", event.getDescription( locale ) ); - messageNode.put( "content-type", APPLICATION_JSON ); + messageNode.put( "contentType", APPLICATION_JSON ); final ObjectNode payloadNode = FACTORY.objectNode(); payloadNode.put( "$ref", generateRef( COMPONENTS_SCHEMAS_PATH, event.getName() ) ); @@ -136,7 +136,7 @@ private void generateComponentsMessageAndSchemaOperation( final ObjectNode messa messageNode.put( "name", property.getName() ); messageNode.put( TITLE_FIELD, property.getPreferredName( locale ) ); messageNode.put( "summary", property.getDescription( locale ) ); - messageNode.put( "content-type", APPLICATION_JSON ); + messageNode.put( "contentType", APPLICATION_JSON ); final ObjectNode payloadNode = FACTORY.objectNode(); payloadNode.put( "$ref", generateRef( COMPONENTS_SCHEMAS_PATH, property.getName() ) ); diff --git a/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/asyncapi/AsyncApiSchemaArtifact.java b/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/asyncapi/AsyncApiSchemaArtifact.java index ff9b38f18..b2d1863df 100644 --- a/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/asyncapi/AsyncApiSchemaArtifact.java +++ b/core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/asyncapi/AsyncApiSchemaArtifact.java @@ -53,6 +53,15 @@ public JsonNode getContent() { return content; } + /** + * Returns the AsyncAPI schema a single YAML string + * + * @return the AsyncAPI schema + */ + public String getContentAsYaml() { + return jsonToYaml( getContent() ); + } + @Override public Map getContentWithSeparateSchemasAsJson() { return getContentWithSeparateSchemasAsJson( Optional.of( "aai" ) ); diff --git a/core/esmf-aspect-model-document-generators/src/main/resources/asyncapi/AsyncApiRootJson.json b/core/esmf-aspect-model-document-generators/src/main/resources/asyncapi/AsyncApiRootJson.json index 625354db6..5482ddafe 100644 --- a/core/esmf-aspect-model-document-generators/src/main/resources/asyncapi/AsyncApiRootJson.json +++ b/core/esmf-aspect-model-document-generators/src/main/resources/asyncapi/AsyncApiRootJson.json @@ -1,6 +1,5 @@ { "asyncapi": "${AsyncApiVer}", - "id": "", "info": { "title": "MQTT API", "version" : "", diff --git a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/asyncapi/AspectModelAsyncApiGeneratorTest.java b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/asyncapi/AspectModelAsyncApiGeneratorTest.java index 9669803a4..a0d192a96 100644 --- a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/asyncapi/AspectModelAsyncApiGeneratorTest.java +++ b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/asyncapi/AspectModelAsyncApiGeneratorTest.java @@ -13,8 +13,10 @@ import org.eclipse.esmf.test.TestAspect; import org.eclipse.esmf.test.TestResources; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -75,6 +77,22 @@ void testAsyncApiGeneratorEmptyAspect( final KnownVersion metaModelVersion ) thr assertThat( json ).isEqualTo( expectedJson ); } + @Test + void testAsyncApiGeneratorWithoutApplicationIdDoesNotAddEmptyId() throws JsonProcessingException { + final Aspect aspect = loadAspect( TestAspect.ASPECT_WITH_EVENT, KnownVersion.getLatest() ); + final AsyncApiSchemaGenerationConfig config = AsyncApiSchemaGenerationConfigBuilder.builder() + .useSemanticVersion( false ) + .channelAddress( CHANNEL_ADDRESS ) + .locale( Locale.ENGLISH ) + .build(); + + final AsyncApiSchemaArtifact asyncSpec = asyncApiGenerator.apply( aspect, config ); + final JsonNode json = asyncSpec.getContent(); + final String result = OBJECT_MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString( json ); + assertThat( result ).doesNotContain( "\"id\" : \"\"" ); + assertThat( asyncSpec.getContentAsYaml() ).doesNotContain( "id: \"\"" ); + } + @ParameterizedTest @MethodSource( value = "versionsStartingWith2_0_0" ) void testAsyncApiGeneratorAspectWithEvent( final KnownVersion metaModelVersion ) throws IOException { @@ -114,7 +132,7 @@ void testAsyncApiGeneratorAspectWithEvent( final KnownVersion metaModelVersion ) "name": "SomeEvent", "title": "Some Event", "summary": "This is some event", - "content-type": "application/json", + "contentType": "application/json", "payload": { "$ref": "#/components/schemas/SomeEvent" } @@ -184,7 +202,7 @@ void testAsyncApiGeneratorAspectWithOperation( final KnownVersion metaModelVersi "name": "input", "title": "input", "summary": null, - "content-type": "application/json", + "contentType": "application/json", "payload": { "$ref": "#/components/schemas/input" } @@ -197,7 +215,7 @@ void testAsyncApiGeneratorAspectWithOperation( final KnownVersion metaModelVersi "name": "output", "title": "output", "summary": null, - "content-type": "application/json", + "contentType": "application/json", "payload": { "$ref": "#/components/schemas/output" } diff --git a/core/esmf-aspect-model-validator/src/main/java/org/eclipse/esmf/aspectmodel/validation/services/ModelCycleDetector.java b/core/esmf-aspect-model-validator/src/main/java/org/eclipse/esmf/aspectmodel/validation/services/ModelCycleDetector.java index bebe5cfe9..7aaa1b678 100644 --- a/core/esmf-aspect-model-validator/src/main/java/org/eclipse/esmf/aspectmodel/validation/services/ModelCycleDetector.java +++ b/core/esmf-aspect-model-validator/src/main/java/org/eclipse/esmf/aspectmodel/validation/services/ModelCycleDetector.java @@ -31,7 +31,7 @@ import org.apache.jena.query.Query; import org.apache.jena.query.QueryExecution; -import org.apache.jena.query.QueryExecutionFactory; +import org.apache.jena.query.QueryExecutionDatasetBuilder; import org.apache.jena.query.QueryFactory; import org.apache.jena.query.QuerySolution; import org.apache.jena.query.ResultSet; @@ -40,8 +40,6 @@ import org.apache.jena.rdf.model.Resource; import org.apache.jena.rdf.model.Statement; import org.apache.jena.rdf.model.StmtIterator; -import org.apache.jena.sparql.core.Var; -import org.apache.jena.sparql.engine.binding.Binding; import org.apache.jena.vocabulary.RDF; /** @@ -191,7 +189,7 @@ private Resource resolvePropertyReference( final Resource propertyNode ) { private boolean isOptionalProperty( final Resource propertyNode ) { final Statement optional = propertyNode.getProperty( samm.optional() ); - return ( optional != null ) && optional.getBoolean(); + return (optional != null) && optional.getBoolean(); } private String getUniqueName( final Resource property ) { @@ -260,8 +258,11 @@ private static String formatCurrentCycle( final String backEdgePropertyName, fin private List getDirectlyReachableProperties( final Model model, final Resource currentProperty ) { final List nextHopProperties = new ArrayList<>(); - try ( final QueryExecution qexec = QueryExecutionFactory.create( query, model ) ) { - qexec.setInitialBinding( Binding.builder().add( Var.alloc( "currentProperty" ), currentProperty.asNode() ).build() ); + try ( final QueryExecution qexec = new QueryExecutionDatasetBuilder() + .substitution( "currentProperty", currentProperty ) + .query( query ) + .model( model ) + .build() ) { final ResultSet results = qexec.execSelect(); while ( results.hasNext() ) { final QuerySolution solution = results.nextSolution(); diff --git a/documentation/developer-guide/modules/tooling-guide/pages/samm-cli.adoc b/documentation/developer-guide/modules/tooling-guide/pages/samm-cli.adoc index 10180d230..7292043c0 100644 --- a/documentation/developer-guide/modules/tooling-guide/pages/samm-cli.adoc +++ b/documentation/developer-guide/modules/tooling-guide/pages/samm-cli.adoc @@ -696,7 +696,7 @@ The name of the Aspect is used to generate parts of the AsyncAPI specification, ==== Mapping of Aspect's operations The AsyncAPI specification is generated based on SAMM Operations and Events. -his section describes how specification parts are generated for Operations. +This section describes how specification parts are generated for Operations. If the Aspect also has a non-empty list of Operations defined, such as the one in the following example: [source,turtle] diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/aspect/to/AspectToAsyncapiCommand.java b/tools/samm-cli/src/main/java/org/eclipse/esmf/aspect/to/AspectToAsyncapiCommand.java index 73f45e6a0..8db28d755 100644 --- a/tools/samm-cli/src/main/java/org/eclipse/esmf/aspect/to/AspectToAsyncapiCommand.java +++ b/tools/samm-cli/src/main/java/org/eclipse/esmf/aspect/to/AspectToAsyncapiCommand.java @@ -121,7 +121,7 @@ private void writeSchemaWithInOneFile( final AsyncApiSchemaArtifact asyncApiSpec if ( generateJsonAsyncApiSpec ) { OBJECT_MAPPER.writerWithDefaultPrettyPrinter().writeValue( out, asyncApiSpec.getContent() ); } else { - out.write( jsonToYaml( asyncApiSpec.getContent() ).getBytes( StandardCharsets.UTF_8 ) ); + out.write( asyncApiSpec.getContentAsYaml().getBytes( StandardCharsets.UTF_8 ) ); } } } @@ -144,13 +144,4 @@ private void writeSchemaWithSeparateFiles( final AsyncApiSchemaArtifact asyncApi } } } - - private String jsonToYaml( final JsonNode json ) { - try { - return YAML_MAPPER.writeValueAsString( json ); - } catch ( final JsonProcessingException exception ) { - LOG.error( "JSON could not be converted to YAML", exception ); - return json.toString(); - } - } } diff --git a/tools/samm-cli/src/test/java/org/eclipse/esmf/SammCliTest.java b/tools/samm-cli/src/test/java/org/eclipse/esmf/SammCliTest.java index 8169d89d6..67994fe97 100644 --- a/tools/samm-cli/src/test/java/org/eclipse/esmf/SammCliTest.java +++ b/tools/samm-cli/src/test/java/org/eclipse/esmf/SammCliTest.java @@ -896,7 +896,6 @@ void testAspectToAsyncapiWithoutApplicationId() { assertThat( result.exitStatus() ).isZero(); assertThat( result.stdout() ).isNotEmpty(); assertThat( result.stdout() ).contains( "asyncapi: 3.0.0" ); - assertThat( result.stdout() ).contains( "id:" ); assertThat( result.stderr() ).isEmpty(); }