👉 ZenWave360 Helps You Create Software Easy to Understand
Note: Starting with version 2.0.0, the Maven
groupId
has 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-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 will need to use the 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:1.7.1,\
io.zenwave360.sdk.plugins:asyncapi-jsonschema2pojo:1.7.1,\
io.zenwave360.sdk.plugins:openapi-spring-webtestclient:1.7.1,\
io.zenwave360.sdk.plugins:backend-application-default:1.7.1,\
io.zenwave360.sdk.plugins:zdl-to-openapi:1.7.1,\
io.zenwave360.sdk.plugins:zdl-to-asyncapi:1.7.1,\
io.zenwave360.sdk.plugins:jdl-to-asyncapi:1.7.1,\
io.zenwave360.sdk.plugins:zdl-to-markdown:1.7.1,\
io.zenwave360.sdk.plugins:openapi-controllers:1.7.1
io.zenwave360.sdk:zenwave-sdk-cli:1.7.1
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.
- 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
- JDL Backend Application (flexible hexagonal architecture)
- 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)
- JDL 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.
- JDL to Specs
- JDL to OpenAPI
- JDL 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
- JDL Backend Application (flexible hexagonal architecture)
git clone https://github.com/ZenWave360/zenwave-sdk.git
cd zenwave-sdk
mvn clean install
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>]]
[<String=Object>...]
[<String=Object>...]
-f, --force Force overwrite
-h, --help[=<helpFormat>] Help with output format
-p, --plugin[=<pluginClass>]
Plugin Class or short-code
INFO Reflections - Reflections took 566 ms to scan 59 urls, producing 2513 keys and 13329 values
ZW> SDK (2.0.0)
Available plugins:
BackendApplicationDefaultPlugin: Generates a full backend application using the provided 'layout' property (2.0.0)
ZDLToOpenAPIPlugin: Generates a draft OpenAPI definitions from your ZDL entities and services. (2.0.0)
ZDLToAsyncAPIPlugin: Generates a draft AsyncAPI file with events from your ZDL services. (2.0.0)
OpenAPIControllersPlugin: Generates implementations based on ZDL models and OpenAPI definitions SpringMVC generated OpenAPI interfaces. (2.0.0)
AsyncApiJsonSchema2PojoPlugin: Generate Plain Old Java Objects from OpenAPI/AsyncAPI schemas or full JSON-Schema files. (2.0.0)
SpringCloudStreams3Plugin: Generates strongly typed SpringCloudStreams3 producer/consumer classes for AsyncAPI (2.0.0)
SpringCloudStreams3AdaptersPlugin: Generates Spring Cloud Streams Consumers from AsyncAPI definitions. (2.0.0)
SpringWebTestClientPlugin: Generates test for SpringMVC or Spring WebFlux using WebTestClient based on OpenAPI specification. (2.0.0)
OpenAPIKaratePlugin: Generates test for KarateDSL based on OpenAPI specification. (2.0.0)
JDLToAsyncAPIPlugin: Generates a full AsyncAPI definitions for CRUD operations from JDL models (2.0.0)
ZdlToJsonPlugin: Prints to StdOut ZDL Model as JSON (2.0.0)
OpenAPIToJDLPlugin: Generates JDL model from OpenAPI schemas (2.0.0)
ZdlToMarkdownPlugin: Generates Markdown glossary from Zdl Models (2.0.0)
Use: "jbang zw -p <plugin | short-code> -h" to get help on a specific plugin
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>
Refer to individual plugin's documentation for more information:
Plugin | Description | Model Types |
---|---|---|
Backend Application Default | Backend Application Default | ZDL |
AsyncAPI JSON Schema to POJO | AsyncAPI JSON Schema to POJO | AsyncAPI, JsonSchema |
AsyncAPI to Spring Cloud Streams 3 | AsyncAPI to Spring Cloud Streams 3 | AsyncAPI, AVRO, JsonSchema |
OpenAPI Controllers | JDL 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.