👉 ZenWave360 Helps You Create Software Easy to Understand
Note: Starting with version 2.0.0, the Maven
groupIdhas changed toio.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:
The easiest way to install ZenWave SDK is as a JBang alias:
jbang alias add --fresh --force --name=zw release@zenwave360/zenwave-sdkor if you prefer to use the latest snapshot versions:
jbang alias add --fresh --force --name=zw snapshots@zenwave360/zenwave-sdkor if you prefer to use the next experimental/unstable snapshot versions:
jbang alias add --fresh --force --name=zw next@zenwave360/zenwave-sdkIf 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.0Refer 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 |
Please refer to the documentation website for more information.
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
- MongoDB
- 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...
- Consumer and Producer. Imperative and Reactive.
- ZDL to Specs
- ZDL to OpenAPI
- ZDL to AsyncAPI
- AsyncAPI schemas
- AVRO schemas
- API Testing
- KarateDSL
- OpenAPI to Karate E2E Tests (please use KarateIDE VSCode Extension instead)
- OpenAPI to Karate/ApiMock Stateful Mocks (please use KarateIDE VSCode Extension and ZenWave ApiMock instead)
- OpenAPI to Spring WebTestClient
- OpenAPI to REST-assured
-
OpenAPI to Pact (postponed sine die)
- KarateDSL
- Reverser Engineering
- OpenAPI 2 JDL
- Java 2 JDL
- Spring Data MongoDB annotations
- JPA annotations
- ZDL Backend Application (multiple architectures: hexagonal, layered, simple domain, modular monolith...)
git clone https://github.com/ZenWave360/zenwave-sdk.git
cd zenwave-sdk
mvn clean installUse the following jbang format:
jbang zw -p <pluginConfigClass or short-code> optionName=value optionName2=valueYou 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 pluginYou 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>