1- # <img alt =" Smithy " src =" https://github.com/smithy-lang/smithy/blob/main/docs/_static/smithy-anvil.svg?raw=true " width =" 32 " > Smithy Java
1+ # <img alt =" Smithy " src =" https://github.com/smithy-lang/smithy/blob/main/docs/_static/smithy-anvil.svg?raw=true " width =" 32 " > Smithy Java
2+
23[ ![ ci] ( https://github.com/smithy-lang/smithy-java/actions/workflows/ci.yml/badge.svg )] ( https://github.com/smithy-lang/smithy-java/actions/workflows/ci.yml )
34[ ![ License] ( https://img.shields.io/badge/License-Apache_2.0-blue.svg )] ( LICENSE )
45
89> This project is still in development and is not intended for use in production.
910
1011---
12+
1113This repository contains two major components:
12141 . Smithy code generators for Java
13152 . Core modules and interfaces for building services and clients in Java
@@ -19,11 +21,12 @@ The [codegen](./codegen) directory contains the source code for generating clien
1921> This repository does not contain any generated clients, such as for S3 or other AWS services.
2022> Rather, these are the tools that facilitate the generation of those clients and non-AWS Smithy clients.
2123
22- ## Getting Started
24+ ## Getting Started
25+
2326If this is your first time using Smithy, follow the [ Smithy Quickstart guide] ( https://smithy.io/2.0/quickstart.html )
2427to learn the basics and create a simple Smithy model.
2528
26- For a guided tour of this project, see the [ Smithy Java Quickstart guide] ( https://smithy.io/2.0/java/quickstart.html ) .
29+ For a guided introduction to this project, see the [ Smithy Java Quickstart guide] ( https://smithy.io/2.0/java/quickstart.html ) .
2730
2831The [ examples] ( ./examples ) are standalone projects that showcase the usage of Smithy Java for generating clients
2932and building services. These examples can be used as a template for a new project using the
@@ -35,6 +38,7 @@ and building services. These examples can be used as a template for a new projec
3538> Smithy-Java only supports ** Java 17** or later. Older Java versions are not supported.
3639
3740### Codegen (Gradle)
41+
3842To use the Smithy Java code generators with Gradle, first create a Smithy Gradle project.
3943
4044> [ !NOTE]
@@ -97,75 +101,94 @@ tasks.named("compileJava") {
97101```
98102
99103### Stability
104+
100105Classes and API's annotated with ` @SmithyInternal ` are for internal use by Smithy-Java libraries and should ** not** be
101106used by Smithy users. API's annotated with ` @SmithyUnstableApi ` are subject to change in future releases.
102107
103108## Core modules and Interfaces
109+
104110### Common
111+
105112- ` core ` - Provides basic functionality for (de)serializing generated types and defining ` Schema ` 's, minimal representations
106113 of the Smithy data model for use at runtime.
107114- ` io ` - Common I/O functionality for clients/servers.
108115- ` auth-api ` - shared Authorization/Authentication API for clients and servers.
109116- ` framework-errors ` - Common errors that could be thrown by the Smithy Java framework.
110117
111118### Client
119+
112120- ` client-core ` - Provides protocol and transport agnostic functionality for clients.
113121 All generated clients require this package as a runtime dependency.
114122- ` client-http ` - Client-side implementation of HTTP transport.
115123- ` dynamic-client ` - Smithy client that exposes a dynamic API that doesn't require codegen.
116124
117125### Server
126+
118127- ` server-core ` - Provides protocol and transport agnostic functionality for servers.
119128 All generated server-stubs require this package as a runtime dependency.
120129- ` server-netty ` - Provides an HTTP server implementation using the [ Netty] ( https://netty.io/ ) runtime.
121130
122- ### Codegen
131+ ### Codegen
132+
123133- ` codegen:core ` - Provides the basic framework necessary for codegen plugins and integrations to generate Java
124134 code from a Smithy model. Only codegen plugins and integrations should depend on this directly.
125135- ` codegen:plugins ` - Aggregate package that provides all code generation plugins.
126136
127137Codegen integrations that modify the code generated by codegen plugins can be found in [ codegen/integrations] ( codegen/integrations ) .
128138
129139### Protocols
130- Smithy Java, like the Smithy IDL, is protocol-agnostic. Servers to support any number of protocols and clients can
140+
141+ Smithy Java, like the Smithy IDL, is protocol-agnostic. Servers support any number of protocols and clients can
131142set the protocol to use at runtime.
132143
144+ > [ !NOTE]
145+ > The ` rpcv2-cbor ` protocol is a generic binary protocol provided by Smithy Java that can be a good
146+ > choice for services that want a fast, compact data format.
147+
133148The [ ` protocol-test-harness ` ] ( protocol-test-harness ) package provides a framework for testing protocols.
134149
135- #### Client
150+ #### Client
151+
136152- ` client-rpcv2-cbor ` - Implementation [ rpcv2-cbor] ( https://smithy.io/2.0/additional-specs/protocols/smithy-rpc-v2.html#smithy-rpc-v2-cbor-protocol ) protocol.
137153- ` aws-client-awsjson ` - Implementation of [ AWS JSON 1.0] ( https://smithy.io/2.0/aws/protocols/aws-json-1_0-protocol.html#aws-json-1-0-protocol ) and [ AWS JSON 1.1] ( https://smithy.io/2.0/aws/protocols/aws-json-1_1-protocol.html#aws-json-1-1-protocol ) protocols.
138154- ` aws-client-restjson ` - Implementation of [ AWS restJson1] ( https://smithy.io/2.0/aws/protocols/aws-json-1_1-protocol.html#aws-json-1-1-protocol ) protocol.
139- - ` aws-client-restXml ` - Implementation of [ AWS restXml] ( https://smithy.io/2.0/aws/protocols/aws-restxml-protocol.html#aws-restxml-protocol ) protocol.
155+ - ` aws-client-restXml ` - Implementation of [ AWS restXml] ( https://smithy.io/2.0/aws/protocols/aws-restxml-protocol.html#aws-restxml-protocol ) protocol.
140156
141157#### Server
158+
142159- ` server-rpcv2-cbor ` - Implementation [ rpcv2-cbor] ( https://smithy.io/2.0/additional-specs/protocols/smithy-rpc-v2.html#smithy-rpc-v2-cbor-protocol ) protocol.
143160- ` aws-server-restjson ` - Implementation of [ AWS restJson1] ( https://smithy.io/2.0/aws/protocols/aws-json-1_1-protocol.html#aws-json-1-1-protocol ) protocol.
144161
145162#### Codecs
163+
146164Codecs provide basic (de)serialization functionality for protocols.
147165- ` json-codec ` - (de)serialization functionality for [ JSON] ( https://www.json.org/json-en.html ) format
148166- ` cbor-codec ` - Binary (de)serialization functionality for [ CBOR] ( https://cbor.io/ ) format
149167- ` xml-codec ` - (de)serialization functionality for [ XML] ( https://www.w3.org/TR/REC-xml/ ) format
150168
151169### Utilities
170+
152171- ` jmespath ` - [ JMESPath] ( https://jmespath.org/ ) implementation that allows querying a ` Document ` using a JMESPath expression.
153172
154173
155174## Development
175+
156176See [ CONTRIBUTING] ( CONTRIBUTING.md ) for more information on contributing to the Smithy-Java project.
157177
158178### Pre-push hooks
179+
159180Pre-push hooks are automatically added for unix users via the ` addGitHooks ` gradle task.
160181
161- ** Note** : In order to successfully execute the pre-defined hooks you must have the ` smithy ` CLI installed.
182+ ** Note** : In order to successfully execute the pre-defined git hooks you must have the ` smithy ` CLI installed.
162183See [ installation instructions] ( https://smithy.io/2.0/guides/smithy-cli/cli_installation.html ) if you do not already have the CLI installed.
163184
164185## Security
186+
165187If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our
166188[ vulnerability reporting page] ( http://aws.amazon.com/security/vulnerability-reporting/ ) .
167189Please do ** not** create a public GitHub issue.
168190
169191## License
192+
170193This project is licensed under the Apache-2.0 License.
171194
0 commit comments