Skip to content

ZenWave360/zenwave-sdk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,026 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ZenWave SDK

ZW> Code Generator ZW> Code Generator

👉 ZenWave360 Helps You Create Software Easy to Understand

Maven Central General Availability build coverage branches coverage GitHub

Note: Starting with version 2.0.0, the Maven groupId has changed to io.zenwave360. The code remains fully compatible. You can find Previous Releases Documentation here.

ZenWave SDK is a configurable and extensible toolkit for Domain Driven Design (DDD) and API-First that can generate code from a mix of different models including:

  • ZDL Domain Language
  • AsyncAPI
  • OpenAPI

Table of Contents:

JBang Instalation

The easiest way to install ZenWave SDK is as a JBang alias:

jbang alias add --fresh --force --name=zw release@zenwave360/zenwave-sdk

or if you prefer to use the latest snapshot versions:

jbang alias add --fresh --force --name=zw snapshots@zenwave360/zenwave-sdk

or if you prefer to use the next experimental/unstable snapshot versions:

jbang alias add --fresh --force --name=zw next@zenwave360/zenwave-sdk

If you plan to use custom plugins you can create your own jbang-catalog.json in the current folder where you want to use jbang zwor perform a custom instalation with a command in the following format:

jbang alias add --name=zw  --force \
    -m=io.zenwave360.sdk.Main \
    --repos=mavencentral,snapshots=https://s01.oss.sonatype.org/content/repositories/snapshots \
    --deps=\
org.slf4j:slf4j-simple:1.7.36,\
io.zenwave360.sdk.plugins:asyncapi-spring-cloud-streams3:2.4.0,\
io.zenwave360.sdk.plugins:asyncapi-jsonschema2pojo:2.4.0,\
io.zenwave360.sdk.plugins:avro-schema-compiler:2.4.0,\
org.apache.avro:avro-compiler:1.12.0,\
io.zenwave360.sdk.plugins:asyncapi-generator:2.4.0,\
io.zenwave360.sdk.plugins:openapi-spring-webtestclient:2.4.0,\
io.zenwave360.sdk.plugins:openapi-karate:2.4.0,\
io.zenwave360.sdk.plugins:backend-application-default:2.4.0,\
io.zenwave360.sdk.plugins.customizations:kotlin-backend-application:2.4.0,\
io.zenwave360.sdk.plugins:zdl-to-openapi:2.4.0,\
io.zenwave360.sdk.plugins:zdl-to-asyncapi:2.4.0,\
io.zenwave360.sdk.plugins:jdl-to-asyncapi:2.4.0,\
io.zenwave360.sdk.plugins:zdl-to-markdown:2.4.0,\
io.zenwave360.sdk.plugins:openapi-controllers:2.4.0
    io.zenwave360.sdk:zenwave-sdk-cli:2.4.0

Available Plugins

Refer to individual plugin's documentation for more information:

Plugin Description Model Types
Backend Application Default Backend Application Default ZDL
AsyncAPI Generator Generates full Java SDKs from AsyncAPI/Avro/JsonSchema AsyncAPI, Avro, JsonSchema
Avro Schema Generator AsyncAPI JSON Schema to POJO Avro
AsyncAPI JSON Schema to POJO AsyncAPI JSON Schema to POJO AsyncAPI, JsonSchema
AsyncAPI to Spring Cloud Streams 3 AsyncAPI to Spring Cloud Streams 3 (old, see AsyncAPI Generator) AsyncAPI, AVRO, JsonSchema
AsyncAPI to Terraform AsyncAPI to Terraform for Kafka and Schema Registry (LAB) AsyncAPI, AVRO
EventCatalog Generator EventCatalog Generator from OpenAPI, AsyncAPI, Markdown, ZDL OpenAPI, AsyncAPI, Markdown, ZDL
OpenAPI Controllers ZDL OpenAPI Controllers OpenAPI, ZDL
OpenAPI to Spring WebTestClient OpenAPI to Spring WebTestClient OpenAPI
ZDL to OpenAPI ZDL to OpenAPI and OpenAPI to ZDL ZDL, OpenAPI
ZDL to AsyncAPI ZDL to AsyncAPI ZDL, AsyncAPI
ZDL to Markdown ZDL to Markdown ZDL
Java 2 JDL Reverse Engineering Java 2 JDL Reverse Engineering Java, JDL
Java 2 AsyncAPI Reverse Engineering Java 2 AsyncAPI Reverse Engineering Java
MCP Server ZenWave MCP Server ZDL

ZenWave SDK Documentation

Please refer to the documentation website for more information.

Features / Roadmap

This is the original roadmap, fully implemented some years/versions ago. It's kept here as a testimony of the fundational features included in ZenWave SDK.

  • ZenWave SDK CLI
    • Default parsers, processors, plugins, templating, formatters, writers, etc... for AsyncAPI, OpenAPI and JDL.
    • Help command: detailed, json, markdown, list of available plugins
    • Fork existing (custom or standard) plugin command
  • ZenWave SDK Maven Plugin
  • Standard Plugins
    • ZDL Backend Application (multiple architectures: hexagonal, layered, simple domain, modular monolith...)
      • Domain Entities
      • Inbound
        • Service Ports, DTOs, Mappers
        • Implementation for CRUD operations
        • Acceptance Tests: SpringData InMemory Repositories
      • Outbound: SpringData Repositories, ElasticSearch... (for REST or Async see other plugins)
      • Adapters:
        • Spring MVC
        • Spring WebFlux
      • Flavors
        • MongoDB
          • Imperative
          • Reactive
        • JPA
          • Imperative
          • Reactive
      • Unit/Integration Testing
        • Edge Integration Testing: partial spring-boot context for outbound adapters (with testcontainers)
        • Sociable Vertical Testing: manual dependency setup with in memory infrastructure test-doubles
        • Vertical Integration Testing: full spring-boot context for inbound adapters (with testcontainers)
    • ZDL OpenAPI Controllers
    • OpenAPI to Spring WebTestClient
    • AsyncAPI Spring Cloud Streams3
      • Consumer and Producer. Imperative and Reactive.
        • Business Exceptions Dead Letter Queues Routing
      • Producer with Transactional Outbox pattern
        • For MongoDB
        • For JDBC
      • Enterprise Envelop Pattern
      • Automatically fill headers at runtime from payload paths, tracing-id supplier...
    • ZDL to Specs
      • ZDL to OpenAPI
      • ZDL to AsyncAPI
        • AsyncAPI schemas
        • AVRO schemas
    • API Testing
    • Reverser Engineering
      • OpenAPI 2 JDL
      • Java 2 JDL
        • Spring Data MongoDB annotations
        • JPA annotations

Building from source

git clone https://github.com/ZenWave360/zenwave-sdk.git
cd zenwave-sdk
mvn clean install

Usage

Use the following jbang format:

jbang zw -p <pluginConfigClass or short-code> optionName=value optionName2=value

You can get a list of all available plugins:

 jbang zw -h list
Usage: <main class> [-f] [-h[=<helpFormat>]] [-p[=<pluginClass>]] [-d=<deps>[,
                    <deps>...]]... [-r=<repos>[,<repos>...]]...
                    [<String=Object>...]
      [<String=Object>...]
  -d, --deps=<deps>[,<deps>...]
                             Dependencies to include in classpath
  -f, --force                Force overwrite
  -h, --help[=<helpFormat>]  Help with output format
  -p, --plugin[=<pluginClass>]
                             Plugin Class or short-code
  -r, --repos=<repos>[,<repos>...]
                             Repositories to search for extra dependencies
INFO Reflections - Reflections took 3725 ms to scan 97 urls, producing 8936 keys and 63781 values
ZW> SDK (2.4.0)

Available plugins:

io.zenwave360.sdk.plugins.BackendApplicationDefaultPlugin: Generates a full backend application using the provided 'layout' property (2.4.0)
io.zenwave360.sdk.plugins.SpringCloudStreams3AdaptersPlugin: Generates Spring Cloud Streams Consumers from AsyncAPI definitions. (2.4.0)
io.zenwave360.sdk.plugins.JDLToAsyncAPIPlugin: Generates a full AsyncAPI definitions for CRUD operations from JDL models (2.4.0)
io.zenwave360.sdk.plugins.AsyncAPIGeneratorPlugin: Generates strongly typed SpringCloudStreams3 producer/consumer classes for AsyncAPI with Avro and JSON DTOs (2.4.0)
io.zenwave360.sdk.plugins.ZdlToJsonPlugin: Prints to StdOut ZDL Model as JSON (2.4.0)
io.zenwave360.sdk.plugins.SpringWebTestClientPlugin: Generates test for SpringMVC or Spring WebFlux using WebTestClient based on OpenAPI specification. (2.4.0)
io.zenwave360.sdk.plugins.AsyncApiJsonSchema2PojoPlugin: Generate Plain Old Java Objects from OpenAPI/AsyncAPI schemas or full JSON-Schema files. (2.4.0)
io.zenwave360.sdk.plugins.OpenAPIControllersPlugin: Generates implementations based on ZDL models and OpenAPI definitions SpringMVC generated OpenAPI interfaces. (2.4.0)
io.zenwave360.sdk.plugins.OpenAPIToJDLPlugin: Generates JDL model from OpenAPI schemas (2.4.0)
io.zenwave360.sdk.plugins.SpringCloudStreams3Plugin: Generates strongly typed SpringCloudStreams3 producer/consumer classes for AsyncAPI (2.4.0)
io.zenwave360.sdk.plugins.OpenAPIKaratePlugin: Generates test for KarateDSL based on OpenAPI specification. (2.4.0)
io.zenwave360.sdk.plugins.ZDLToOpenAPIPlugin: Generates a draft OpenAPI definitions from your ZDL entities and services. (2.4.0)
io.zenwave360.sdk.plugins.ZdlToMarkdownPlugin: Generates Markdown glossary from Zdl Models (2.4.0)
io.zenwave360.sdk.plugins.ZDLToAsyncAPIPlugin: Generates a draft AsyncAPI file with events from your ZDL services. (2.4.0)
io.zenwave360.sdk.plugins.AvroSchemaGeneratorPlugin: Generates Java classes from Avro schemas using Avro Compiler. (2.4.0)


Use: "jbang zw -p <plugin | short-code> -h" to get help on a specific plugin


Use: "jbang zw -p <plugin | short-code> -h" to get help on a specific plugin

You can include any custom plugin jars in the --deps option.

JBang will use you maven settings for repository resolution, but you can also specify a custom maven repository in the --repos option.

NOTE: it will list any available plugin, standard or custom, inside any of these root java packages "io", "com" or "org".

And get help for a given plugin:

jbang zw --help -p <pluginConfigClass>

You can add choose a help format from the following: help, detailed, markdown, or list:

jbang zw --help markdown -p <pluginConfigClass>

About

DDD and API-First tools for Event-Driven microservices. Create Software Easy to Understand.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors