👉 ZenWave360 Helps You Create Software Easy to Understand
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.github.zenwave360.zenwave-sdk.plugins:asyncapi-spring-cloud-streams3:1.7.1,\
io.github.zenwave360.zenwave-sdk.plugins:asyncapi-jsonschema2pojo:1.7.1,\
io.github.zenwave360.zenwave-sdk.plugins:openapi-spring-webtestclient:1.7.1,\
io.github.zenwave360.zenwave-sdk.plugins:backend-application-default:1.7.1,\
io.github.zenwave360.zenwave-sdk.plugins:zdl-to-openapi:1.7.1,\
io.github.zenwave360.zenwave-sdk.plugins:zdl-to-asyncapi:1.7.1,\
io.github.zenwave360.zenwave-sdk.plugins:jdl-to-asyncapi:1.7.1,\
io.github.zenwave360.zenwave-sdk.plugins:zdl-to-markdown:1.7.1,\
io.github.zenwave360.zenwave-sdk.plugins:openapi-controllers:1.7.1
io.github.zenwave360.zenwave-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 780 ms to scan 54 urls, producing 2370 keys and 11537 values
ZW> SDK (1.7.0)
Available plugins:
backend-application-default io.zenwave360.sdk.plugins.BackendApplicationDefaultPlugin: Generates a full backend application using a flexible hexagonal architecture (1.7.0)
spring-cloud-streams3-adapters io.zenwave360.sdk.plugins.SpringCloudStreams3AdaptersPlugin: Generates tests for Spring Cloud Streams Consumers. (1.7.0)
jdl-to-asyncapi io.zenwave360.sdk.plugins.JDLToAsyncAPIPlugin: Generates a full AsyncAPI definitions for CRUD operations from JDL models (1.7.0)
zdl-to-json io.zenwave360.sdk.plugins.ZdlToJsonPlugin: Prints to StdOut ZDL Model as JSON (1.7.0)
spring-webtestclient io.zenwave360.sdk.plugins.SpringWebTestClientPlugin: Generates test for SpringMVC or Spring WebFlux using WebTestClient based on OpenAPI specification. (1.7.0)
jsonschema2pojo io.zenwave360.sdk.plugins.AsyncApiJsonSchema2PojoPlugin: Generate Plain Old Java Objects from OpenAPI/AsyncAPI schemas or full JSON-Schema files (1.7.0)
openapi-controllers io.zenwave360.sdk.plugins.OpenAPIControllersPlugin: Generates implementations based on ZDL models and OpenAPI definitions SpringMVC generated OpenAPI interfaces. (1.7.0)
openapi-to-jdl io.zenwave360.sdk.plugins.OpenAPIToJDLPlugin: Generates JDL model from OpenAPI schemas (1.7.0)
openapi-karate io.zenwave360.sdk.plugins.OpenAPIKaratePlugin: Generates test for SpringMVC or Spring WebFlux using WebTestClient based on OpenAPI specification. (1.7.0)
spring-cloud-streams3 io.zenwave360.sdk.plugins.SpringCloudStreams3Plugin: Generates strongly typed SpringCloudStreams3 producer/consumer classes for AsyncAPI (1.7.0)
zdl-to-openapi io.zenwave360.sdk.plugins.ZDLToOpenAPIPlugin: Generates a draft OpenAPI definitions from your ZDL entities and services. (1.7.0)
zdl-to-markdown io.zenwave360.sdk.plugins.ZdlToMarkdownPlugin: Generates Markdown glossary from Zdl Models (1.7.0)
zdl-to-asyncapi io.zenwave360.sdk.plugins.ZDLToAsyncAPIPlugin: Generates a draft AsyncAPI file with events from your ZDL services. (1.7.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 |
Please refer to the documentation website for more information.