diff --git a/examples/de/nclazz/registry/v0/RegistryEventsApiClientConfig.java b/examples/de/nclazz/registry/v0/RegistryEventsApiClientConfig.java
new file mode 100644
index 0000000..3f6c603
--- /dev/null
+++ b/examples/de/nclazz/registry/v0/RegistryEventsApiClientConfig.java
@@ -0,0 +1,40 @@
+/**
+ * Auto-generated from apibuilder.io service specification.
+ * apidoc-version :
+ * organisation :
+ * service-version :
+ *
+ * Documentation at:
+ * https://app.apibuilder.io///
+ *
+**/
+package de.nclazz.registry.v0.client;
+
+import lombok.*;
+import org.glassfish.jersey.client.HttpUrlConnectorProvider;
+
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.ClientRequestFilter;
+import javax.ws.rs.client.ClientRequestContext;
+import java.io.IOException;
+
+@Builder(toBuilder = true)
+@With
+@Getter
+@EqualsAndHashCode
+public class RegistryEventsApiClientConfig implements ClientRequestFilter {
+
+ @NonNull
+ private final String baseUrl;
+ @Builder.Default
+ private final Client client = ClientBuilder.newClient()
+ .register(this)
+ .property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true);
+
+
+ @Override
+ public void filter(ClientRequestContext requestContext) throws IOException {
+ }
+
+}
\ No newline at end of file
diff --git a/examples/de/nclazz/registry/v0/RegistryEventsServiceClient.java b/examples/de/nclazz/registry/v0/RegistryEventsServiceClient.java
new file mode 100644
index 0000000..c9991c6
--- /dev/null
+++ b/examples/de/nclazz/registry/v0/RegistryEventsServiceClient.java
@@ -0,0 +1,31 @@
+/**
+ * Auto-generated from apibuilder.io service spec.
+ * apidoc-version :
+ * organisation :
+ * service-version :
+ *
+ * Documentation at:
+ * https://app.apibuilder.io///
+ *
+**/
+package de.nclazz.registry.v0.client;
+
+import lombok.*;
+
+import de.nclazz.registry.v0.client.*;
+
+/**
+ * Client Lib for de.nclazz.registry.v0.registry_events API service spec.
+ *
+ * Registry Event Schema for Kafka Streams.
+**/
+public class RegistryEventsServiceClient {
+
+ private final RegistryEventsApiClientConfig config;
+
+ public RegistryEventsServiceClient(@NonNull final RegistryEventsApiClientConfig config) {
+ this.config = config;
+ }
+
+
+}
\ No newline at end of file
diff --git a/examples/de/nclazz/users/v0/UsersApiClientConfig.java b/examples/de/nclazz/users/v0/UsersApiClientConfig.java
index 3a948a9..3ca5820 100644
--- a/examples/de/nclazz/users/v0/UsersApiClientConfig.java
+++ b/examples/de/nclazz/users/v0/UsersApiClientConfig.java
@@ -8,22 +8,38 @@
* https://app.apibuilder.io///
*
**/
-package de.nclazz.users.v0;
+package de.nclazz.users.v0.client;
import lombok.*;
+import org.glassfish.jersey.client.HttpUrlConnectorProvider;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.ClientRequestFilter;
+import javax.ws.rs.client.ClientRequestContext;
+import java.io.IOException;
@Builder(toBuilder = true)
@With
@Getter
@EqualsAndHashCode
-public class UsersApiClientConfig {
+public class UsersApiClientConfig implements ClientRequestFilter {
@NonNull
private final String baseUrl;
@Builder.Default
- private final Client client = ClientBuilder.newClient();
+ private final Client client = ClientBuilder.newClient()
+ .register(this)
+ .property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true);
+
+ /** Service for user management and authentication.
+ **/
+ @NonNull
+ private String xSomething;
+
+ @Override
+ public void filter(ClientRequestContext requestContext) throws IOException {
+ requestContext.getHeaders().add("x-something", this.xSomething);
+ }
}
\ No newline at end of file
diff --git a/examples/de/nclazz/users/v0/UsersServiceClient.java b/examples/de/nclazz/users/v0/UsersServiceClient.java
new file mode 100644
index 0000000..051a0c0
--- /dev/null
+++ b/examples/de/nclazz/users/v0/UsersServiceClient.java
@@ -0,0 +1,43 @@
+/**
+ * Auto-generated from apibuilder.io service spec.
+ * apidoc-version :
+ * organisation :
+ * service-version :
+ *
+ * Documentation at:
+ * https://app.apibuilder.io///
+ *
+**/
+package de.nclazz.users.v0.client;
+
+import lombok.*;
+
+import de.nclazz.users.v0.client.*;
+
+/**
+ * Client Lib for de.nclazz.users.v0.users API service spec.
+ *
+ * Service for user management and authentication.
+**/
+public class UsersServiceClient {
+
+ private final UsersApiClientConfig config;
+
+ public UsersServiceClient(@NonNull final UsersApiClientConfig config) {
+ this.config = config;
+ }
+
+ public HealthchecksResource healthchecks() {
+ return new HealthchecksResource(this.config);
+ }
+ public RolesResource roles() {
+ return new RolesResource(this.config);
+ }
+ public UsersResource users() {
+ return new UsersResource(this.config);
+ }
+ public UserLoginsResource userLogins() {
+ return new UserLoginsResource(this.config);
+ }
+
+}
\ No newline at end of file
diff --git a/examples/de/nclazz/users/v0/client/HealthchecksResource.java b/examples/de/nclazz/users/v0/client/HealthchecksResource.java
new file mode 100644
index 0000000..5b5c12e
--- /dev/null
+++ b/examples/de/nclazz/users/v0/client/HealthchecksResource.java
@@ -0,0 +1,95 @@
+/**
+ * Auto-generated from apibuilder.io service spec.
+ * apidoc-version : 0.15.4
+ * organisation : nclazz
+ * service-version : 0.0.0-dev-30-gbd50cdf-bd9390b2-staging
+ *
+ * Documentation at:
+ * https://app.apibuilder.io/nclazz/users/0.0.0-dev-30-gbd50cdf-bd9390b2-staging
+ *
+**/
+package de.nclazz.users.v0.client;
+
+import de.nclazz.users.v0.client.UsersApiClientConfig;
+import de.nclazz.users.v0.models.*;
+
+import de.nclazz.common.v0.models.Healthcheck;
+
+import lombok.*;
+
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.*;
+import java.net.URI;
+
+
+/**
+ * Client for API resource de.nclazz.users.v0.HealthchecksResource
+ * version 0.0.0-dev-30-gbd50cdf-bd9390b2-staging
+ *
+ * Simple healthcheck resource for monitoring purposes.
+**/
+@RequiredArgsConstructor
+public class HealthchecksResource {
+
+ private final UsersApiClientConfig config;
+
+ /** Simple healthcheck endpoint to test the status of the service. **/
+ public Get get () {
+ return new Get(this.config);
+ }
+
+ /**
+ * Simple healthcheck endpoint to test the status of the service.
+ **/
+ public static class Get {
+
+ private final UsersApiClientConfig config;
+
+ public Get(@NonNull final UsersApiClientConfig config) {
+ this.config = config;
+ }
+
+ public GetResponse request() {
+ // /_internal_/healthcheck/healthcheck
+ final URI uri = UriBuilder.fromUri(this.config.getBaseUrl())
+ .path("_internal_")
+ .path("healthcheck")
+ .path("healthcheck")
+ .build();
+
+ WebTarget target = config.getClient().target(uri);
+ Response response = target.request(MediaType.APPLICATION_JSON)
+ .method("GET");
+ int status = response.getStatus();
+ switch(status) {
+ case 200:
+
+ Healthcheck healthcheck200Resp = response.readEntity(Healthcheck.class);
+ return GetResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .healthcheck200(healthcheck200Resp)
+ .build();
+ default:
+ return GetResponse.builder()
+ .status(status)
+ .unexpected(response.readEntity(String.class))
+ .build();
+ }
+ }
+
+
+ @Builder
+ @Data
+ public static class GetResponse {
+ private Healthcheck healthcheck200;
+
+ private final int status;
+ private final MultivaluedMap headers;
+ private final String unexpected;
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/examples/de/nclazz/users/v0/client/RolesResource.java b/examples/de/nclazz/users/v0/client/RolesResource.java
new file mode 100644
index 0000000..6b696e4
--- /dev/null
+++ b/examples/de/nclazz/users/v0/client/RolesResource.java
@@ -0,0 +1,375 @@
+/**
+ * Auto-generated from apibuilder.io service spec.
+ * apidoc-version : 0.15.4
+ * organisation : nclazz
+ * service-version : 0.0.0-dev-30-gbd50cdf-bd9390b2-staging
+ *
+ * Documentation at:
+ * https://app.apibuilder.io/nclazz/users/0.0.0-dev-30-gbd50cdf-bd9390b2-staging
+ *
+**/
+package de.nclazz.users.v0.client;
+
+import de.nclazz.users.v0.client.UsersApiClientConfig;
+import de.nclazz.users.v0.models.*;
+
+import java.util.UUID;
+import de.nclazz.users.v0.models.RoleForm;
+import de.nclazz.users.v0.models.UserStatusForm;
+import de.nclazz.users.v0.models.Role;
+import java.util.List;
+import de.nclazz.users.v0.models.User;
+import de.nclazz.errors.v0.models.GenericError;
+import de.nclazz.users.v0.models.UserStatus;
+
+import lombok.*;
+
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.*;
+import java.net.URI;
+
+
+/**
+ * Client for API resource de.nclazz.users.v0.RolesResource
+ * version 0.0.0-dev-30-gbd50cdf-bd9390b2-staging
+ *
+ * Managing user roles.
+**/
+@RequiredArgsConstructor
+public class RolesResource {
+
+ private final UsersApiClientConfig config;
+
+ /** Get all defined user roles. **/
+ public Get get () {
+ return new Get(this.config);
+ }
+ /** Get a user role for id. **/
+ public GetByIdAndOther getByIdAndOther () {
+ return new GetByIdAndOther(this.config);
+ }
+ /** Create a new user role. **/
+ public PostRoleForm postRoleForm () {
+ return new PostRoleForm(this.config);
+ }
+ /** Update the status of a user role. **/
+ public PutUserStatusFormById putUserStatusFormById () {
+ return new PutUserStatusFormById(this.config);
+ }
+ /** Mark a user role as deleted. The user role cannot be accessed by the api, but will stay in the db for a while, before completely removed. **/
+ public DeleteById deleteById () {
+ return new DeleteById(this.config);
+ }
+
+ /**
+ * Get all defined user roles.
+ **/
+ public static class Get {
+
+ private final UsersApiClientConfig config;
+
+ public Get(@NonNull final UsersApiClientConfig config) {
+ this.config = config;
+ }
+
+ public GetResponse request() {
+ // /roles/
+ final URI uri = UriBuilder.fromUri(this.config.getBaseUrl())
+ .path("roles")
+ .build();
+
+ WebTarget target = config.getClient().target(uri);
+ Response response = target.request(MediaType.APPLICATION_JSON)
+ .method("GET");
+ int status = response.getStatus();
+ switch(status) {
+ case 200:
+ List role200Resp = response.readEntity(new GenericType>() {});
+
+ return GetResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .role200(role200Resp)
+ .build();
+ case 401:
+ return GetResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ default:
+ return GetResponse.builder()
+ .status(status)
+ .unexpected(response.readEntity(String.class))
+ .build();
+ }
+ }
+
+
+ @Builder
+ @Data
+ public static class GetResponse {
+ private List role200;
+
+ private final int status;
+ private final MultivaluedMap headers;
+ private final String unexpected;
+ }
+ }
+
+ /**
+ * Get a user role for id.
+ **/
+ public static class GetByIdAndOther {
+
+ private final UsersApiClientConfig config;
+
+ public GetByIdAndOther(@NonNull final UsersApiClientConfig config) {
+ this.config = config;
+ }
+
+ public GetByIdAndOtherResponse request(@NonNull UUID id, @NonNull String other) {
+ // /roles/:id/:other
+ final URI uri = UriBuilder.fromUri(this.config.getBaseUrl())
+ .path("roles")
+ .path(id.toString())
+ .path(other.toString())
+ .build();
+
+ WebTarget target = config.getClient().target(uri);
+ Response response = target.request(MediaType.APPLICATION_JSON)
+ .method("GET");
+ int status = response.getStatus();
+ switch(status) {
+ case 200:
+
+ Role role200Resp = response.readEntity(Role.class);
+ return GetByIdAndOtherResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .role200(role200Resp)
+ .build();
+ case 401:
+ return GetByIdAndOtherResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ case 404:
+ return GetByIdAndOtherResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ default:
+ return GetByIdAndOtherResponse.builder()
+ .status(status)
+ .unexpected(response.readEntity(String.class))
+ .build();
+ }
+ }
+
+
+ @Builder
+ @Data
+ public static class GetByIdAndOtherResponse {
+ private Role role200;
+
+ private final int status;
+ private final MultivaluedMap headers;
+ private final String unexpected;
+ }
+ }
+
+ /**
+ * Create a new user role.
+ **/
+ public static class PostRoleForm {
+
+ private final UsersApiClientConfig config;
+
+ public PostRoleForm(@NonNull final UsersApiClientConfig config) {
+ this.config = config;
+ }
+
+ public PostRoleFormResponse request(@NonNull RoleForm roleForm) {
+ // /roles/
+ final URI uri = UriBuilder.fromUri(this.config.getBaseUrl())
+ .path("roles")
+ .build();
+
+ WebTarget target = config.getClient().target(uri);
+ Response response = target.request(MediaType.APPLICATION_JSON)
+ .method("POST", Entity.json(roleForm));
+ int status = response.getStatus();
+ switch(status) {
+ case 201:
+
+ User user201Resp = response.readEntity(User.class);
+ return PostRoleFormResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .user201(user201Resp)
+ .build();
+ case 400:
+ List genericError400Resp = response.readEntity(new GenericType>() {});
+
+ return PostRoleFormResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .genericError400(genericError400Resp)
+ .build();
+ case 401:
+ return PostRoleFormResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ default:
+ return PostRoleFormResponse.builder()
+ .status(status)
+ .unexpected(response.readEntity(String.class))
+ .build();
+ }
+ }
+
+
+ @Builder
+ @Data
+ public static class PostRoleFormResponse {
+ private User user201;
+ private List genericError400;
+
+ private final int status;
+ private final MultivaluedMap headers;
+ private final String unexpected;
+ }
+ }
+
+ /**
+ * Update the status of a user role.
+ **/
+ public static class PutUserStatusFormById {
+
+ private final UsersApiClientConfig config;
+
+ public PutUserStatusFormById(@NonNull final UsersApiClientConfig config) {
+ this.config = config;
+ }
+
+ public PutUserStatusFormByIdResponse request(@NonNull UUID id, @NonNull UserStatusForm userStatusForm) {
+ // /roles/:id/status
+ final URI uri = UriBuilder.fromUri(this.config.getBaseUrl())
+ .path("roles")
+ .path(id.toString())
+ .path("status")
+ .build();
+
+ WebTarget target = config.getClient().target(uri);
+ Response response = target.request(MediaType.APPLICATION_JSON)
+ .method("PUT", Entity.json(userStatusForm));
+ int status = response.getStatus();
+ switch(status) {
+ case 200:
+
+ UserStatus userStatus200Resp = response.readEntity(UserStatus.class);
+ return PutUserStatusFormByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .userStatus200(userStatus200Resp)
+ .build();
+ case 400:
+ List genericError400Resp = response.readEntity(new GenericType>() {});
+
+ return PutUserStatusFormByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .genericError400(genericError400Resp)
+ .build();
+ case 401:
+ return PutUserStatusFormByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ case 404:
+ return PutUserStatusFormByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ default:
+ return PutUserStatusFormByIdResponse.builder()
+ .status(status)
+ .unexpected(response.readEntity(String.class))
+ .build();
+ }
+ }
+
+
+ @Builder
+ @Data
+ public static class PutUserStatusFormByIdResponse {
+ private UserStatus userStatus200;
+ private List genericError400;
+
+ private final int status;
+ private final MultivaluedMap headers;
+ private final String unexpected;
+ }
+ }
+
+ /**
+ * Mark a user role as deleted. The user role cannot be accessed by the api, but will stay in the db for a while, before completely removed.
+ **/
+ public static class DeleteById {
+
+ private final UsersApiClientConfig config;
+
+ public DeleteById(@NonNull final UsersApiClientConfig config) {
+ this.config = config;
+ }
+
+ public DeleteByIdResponse request(@NonNull UUID id) {
+ // /roles/:id
+ final URI uri = UriBuilder.fromUri(this.config.getBaseUrl())
+ .path("roles")
+ .path(id.toString())
+ .build();
+
+ WebTarget target = config.getClient().target(uri);
+ Response response = target.request(MediaType.APPLICATION_JSON)
+ .method("DELETE");
+ int status = response.getStatus();
+ switch(status) {
+ case 200:
+ return DeleteByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ case 401:
+ return DeleteByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ case 404:
+ return DeleteByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ default:
+ return DeleteByIdResponse.builder()
+ .status(status)
+ .unexpected(response.readEntity(String.class))
+ .build();
+ }
+ }
+
+
+ @Builder
+ @Data
+ public static class DeleteByIdResponse {
+
+ private final int status;
+ private final MultivaluedMap headers;
+ private final String unexpected;
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/examples/de/nclazz/users/v0/client/UserLoginsResource.java b/examples/de/nclazz/users/v0/client/UserLoginsResource.java
new file mode 100644
index 0000000..a92a6c4
--- /dev/null
+++ b/examples/de/nclazz/users/v0/client/UserLoginsResource.java
@@ -0,0 +1,99 @@
+/**
+ * Auto-generated from apibuilder.io service spec.
+ * apidoc-version : 0.15.4
+ * organisation : nclazz
+ * service-version : 0.0.0-dev-30-gbd50cdf-bd9390b2-staging
+ *
+ * Documentation at:
+ * https://app.apibuilder.io/nclazz/users/0.0.0-dev-30-gbd50cdf-bd9390b2-staging
+ *
+**/
+package de.nclazz.users.v0.client;
+
+import de.nclazz.users.v0.client.UsersApiClientConfig;
+import de.nclazz.users.v0.models.*;
+
+import de.nclazz.users.v0.models.UserLoginForm;
+import de.nclazz.users.v0.models.UserLogin;
+
+import lombok.*;
+
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.*;
+import java.net.URI;
+
+
+/**
+ * Client for API resource de.nclazz.users.v0.UserLoginsResource
+ * version 0.0.0-dev-30-gbd50cdf-bd9390b2-staging
+ *
+ * Resource for authenticating users.
+**/
+@RequiredArgsConstructor
+public class UserLoginsResource {
+
+ private final UsersApiClientConfig config;
+
+ /** Login user with username + password. **/
+ public PostUserLoginForm postUserLoginForm () {
+ return new PostUserLoginForm(this.config);
+ }
+
+ /**
+ * Login user with username + password.
+ **/
+ public static class PostUserLoginForm {
+
+ private final UsersApiClientConfig config;
+
+ public PostUserLoginForm(@NonNull final UsersApiClientConfig config) {
+ this.config = config;
+ }
+
+ public PostUserLoginFormResponse request(@NonNull UserLoginForm userLoginForm) {
+ // /login/
+ final URI uri = UriBuilder.fromUri(this.config.getBaseUrl())
+ .path("login")
+ .build();
+
+ WebTarget target = config.getClient().target(uri);
+ Response response = target.request(MediaType.APPLICATION_JSON)
+ .method("POST", Entity.json(userLoginForm));
+ int status = response.getStatus();
+ switch(status) {
+ case 200:
+
+ UserLogin userLogin200Resp = response.readEntity(UserLogin.class);
+ return PostUserLoginFormResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .userLogin200(userLogin200Resp)
+ .build();
+ case 401:
+ return PostUserLoginFormResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ default:
+ return PostUserLoginFormResponse.builder()
+ .status(status)
+ .unexpected(response.readEntity(String.class))
+ .build();
+ }
+ }
+
+
+ @Builder
+ @Data
+ public static class PostUserLoginFormResponse {
+ private UserLogin userLogin200;
+
+ private final int status;
+ private final MultivaluedMap headers;
+ private final String unexpected;
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/examples/de/nclazz/users/v0/client/UsersResource.java b/examples/de/nclazz/users/v0/client/UsersResource.java
new file mode 100644
index 0000000..7eb3acc
--- /dev/null
+++ b/examples/de/nclazz/users/v0/client/UsersResource.java
@@ -0,0 +1,464 @@
+/**
+ * Auto-generated from apibuilder.io service spec.
+ * apidoc-version : 0.15.4
+ * organisation : nclazz
+ * service-version : 0.0.0-dev-30-gbd50cdf-bd9390b2-staging
+ *
+ * Documentation at:
+ * https://app.apibuilder.io/nclazz/users/0.0.0-dev-30-gbd50cdf-bd9390b2-staging
+ *
+**/
+package de.nclazz.users.v0.client;
+
+import de.nclazz.users.v0.client.UsersApiClientConfig;
+import de.nclazz.users.v0.models.*;
+
+import de.nclazz.users.v0.models.UserForm;
+import de.nclazz.users.v0.models.UserStatusForm;
+import de.nclazz.users.v0.models.User;
+import java.util.List;
+import de.nclazz.errors.v0.models.GenericError;
+import de.nclazz.users.v0.models.UserStatus;
+
+import lombok.*;
+
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.*;
+import java.net.URI;
+
+
+/**
+ * Client for API resource de.nclazz.users.v0.UsersResource
+ * version 0.0.0-dev-30-gbd50cdf-bd9390b2-staging
+ *
+ * Access to the user management.
+**/
+@RequiredArgsConstructor
+public class UsersResource {
+
+ private final UsersApiClientConfig config;
+
+ /** Get all users. **/
+ public Get get () {
+ return new Get(this.config);
+ }
+ /** Get a user for given id. **/
+ public GetById getById () {
+ return new GetById(this.config);
+ }
+ /** Create a new user. **/
+ public PostUserForm postUserForm () {
+ return new PostUserForm(this.config);
+ }
+ /** Update user data. **/
+ public PutUserFormById putUserFormById () {
+ return new PutUserFormById(this.config);
+ }
+ /** Update the status of the user. **/
+ public PutUserStatusFormById putUserStatusFormById () {
+ return new PutUserStatusFormById(this.config);
+ }
+ /** Mark a user as deleted. The user cannot be accessed by the api, but will stay in the db for a while, before completely removed. **/
+ public DeleteById deleteById () {
+ return new DeleteById(this.config);
+ }
+
+ /**
+ * Get all users.
+ **/
+ public static class Get {
+
+ private final UsersApiClientConfig config;
+ @NonNull private String xAuthorization_header ;
+ private String xAgent_header ;
+ @Builder.Default private Integer limit_query = 200;
+
+ public Get(@NonNull final UsersApiClientConfig config) {
+ this.config = config;
+ }
+
+ public GetResponse request() {
+ // /users/
+ final URI uri = UriBuilder.fromUri(this.config.getBaseUrl())
+ .path("users")
+ .queryParam("limit", this.limit_query)
+ .build();
+
+ WebTarget target = config.getClient().target(uri);
+ Response response = target.request(MediaType.APPLICATION_JSON)
+ .header("x-authorization", this.xAuthorization_header)
+ .header("x-agent", this.xAgent_header)
+ .method("GET");
+ int status = response.getStatus();
+ switch(status) {
+ case 200:
+ List user200Resp = response.readEntity(new GenericType>() {});
+
+ return GetResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .user200(user200Resp)
+ .build();
+ case 401:
+ return GetResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ default:
+ return GetResponse.builder()
+ .status(status)
+ .unexpected(response.readEntity(String.class))
+ .build();
+ }
+ }
+
+ public Get xAuthorization(String xAuthorization) {
+ this.xAuthorization_header = xAuthorization;
+ return this;
+ }
+ public Get xAgent(String xAgent) {
+ this.xAgent_header = xAgent;
+ return this;
+ }
+ public Get limit(Integer limit) {
+ this.limit_query = limit;
+ return this;
+ }
+
+ @Builder
+ @Data
+ public static class GetResponse {
+ private List user200;
+
+ private final int status;
+ private final MultivaluedMap headers;
+ private final String unexpected;
+ }
+ }
+
+ /**
+ * Get a user for given id.
+ **/
+ public static class GetById {
+
+ private final UsersApiClientConfig config;
+
+ public GetById(@NonNull final UsersApiClientConfig config) {
+ this.config = config;
+ }
+
+ public GetByIdResponse request(@NonNull String id) {
+ // /users/:id
+ final URI uri = UriBuilder.fromUri(this.config.getBaseUrl())
+ .path("users")
+ .path(id.toString())
+ .build();
+
+ WebTarget target = config.getClient().target(uri);
+ Response response = target.request(MediaType.APPLICATION_JSON)
+ .method("GET");
+ int status = response.getStatus();
+ switch(status) {
+ case 200:
+
+ User user200Resp = response.readEntity(User.class);
+ return GetByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .user200(user200Resp)
+ .build();
+ case 404:
+ return GetByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ case 401:
+ return GetByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ default:
+ return GetByIdResponse.builder()
+ .status(status)
+ .unexpected(response.readEntity(String.class))
+ .build();
+ }
+ }
+
+
+ @Builder
+ @Data
+ public static class GetByIdResponse {
+ private User user200;
+
+ private final int status;
+ private final MultivaluedMap headers;
+ private final String unexpected;
+ }
+ }
+
+ /**
+ * Create a new user.
+ **/
+ public static class PostUserForm {
+
+ private final UsersApiClientConfig config;
+
+ public PostUserForm(@NonNull final UsersApiClientConfig config) {
+ this.config = config;
+ }
+
+ public PostUserFormResponse request(@NonNull UserForm userForm) {
+ // /users/
+ final URI uri = UriBuilder.fromUri(this.config.getBaseUrl())
+ .path("users")
+ .build();
+
+ WebTarget target = config.getClient().target(uri);
+ Response response = target.request(MediaType.APPLICATION_JSON)
+ .method("POST", Entity.json(userForm));
+ int status = response.getStatus();
+ switch(status) {
+ case 201:
+
+ User user201Resp = response.readEntity(User.class);
+ return PostUserFormResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .user201(user201Resp)
+ .build();
+ case 400:
+ List genericError400Resp = response.readEntity(new GenericType>() {});
+
+ return PostUserFormResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .genericError400(genericError400Resp)
+ .build();
+ case 401:
+ return PostUserFormResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ default:
+ return PostUserFormResponse.builder()
+ .status(status)
+ .unexpected(response.readEntity(String.class))
+ .build();
+ }
+ }
+
+
+ @Builder
+ @Data
+ public static class PostUserFormResponse {
+ private User user201;
+ private List genericError400;
+
+ private final int status;
+ private final MultivaluedMap headers;
+ private final String unexpected;
+ }
+ }
+
+ /**
+ * Update user data.
+ **/
+ public static class PutUserFormById {
+
+ private final UsersApiClientConfig config;
+
+ public PutUserFormById(@NonNull final UsersApiClientConfig config) {
+ this.config = config;
+ }
+
+ public PutUserFormByIdResponse request(@NonNull String id, @NonNull UserForm userForm) {
+ // /users/:id
+ final URI uri = UriBuilder.fromUri(this.config.getBaseUrl())
+ .path("users")
+ .path(id.toString())
+ .build();
+
+ WebTarget target = config.getClient().target(uri);
+ Response response = target.request(MediaType.APPLICATION_JSON)
+ .method("PUT", Entity.json(userForm));
+ int status = response.getStatus();
+ switch(status) {
+ case 200:
+
+ User user200Resp = response.readEntity(User.class);
+ return PutUserFormByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .user200(user200Resp)
+ .build();
+ case 400:
+ List genericError400Resp = response.readEntity(new GenericType>() {});
+
+ return PutUserFormByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .genericError400(genericError400Resp)
+ .build();
+ case 401:
+ return PutUserFormByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ case 404:
+ return PutUserFormByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ default:
+ return PutUserFormByIdResponse.builder()
+ .status(status)
+ .unexpected(response.readEntity(String.class))
+ .build();
+ }
+ }
+
+
+ @Builder
+ @Data
+ public static class PutUserFormByIdResponse {
+ private User user200;
+ private List genericError400;
+
+ private final int status;
+ private final MultivaluedMap headers;
+ private final String unexpected;
+ }
+ }
+
+ /**
+ * Update the status of the user.
+ **/
+ public static class PutUserStatusFormById {
+
+ private final UsersApiClientConfig config;
+
+ public PutUserStatusFormById(@NonNull final UsersApiClientConfig config) {
+ this.config = config;
+ }
+
+ public PutUserStatusFormByIdResponse request(@NonNull String id, @NonNull UserStatusForm userStatusForm) {
+ // /users/:id/status
+ final URI uri = UriBuilder.fromUri(this.config.getBaseUrl())
+ .path("users")
+ .path(id.toString())
+ .path("status")
+ .build();
+
+ WebTarget target = config.getClient().target(uri);
+ Response response = target.request(MediaType.APPLICATION_JSON)
+ .method("PUT", Entity.json(userStatusForm));
+ int status = response.getStatus();
+ switch(status) {
+ case 200:
+
+ UserStatus userStatus200Resp = response.readEntity(UserStatus.class);
+ return PutUserStatusFormByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .userStatus200(userStatus200Resp)
+ .build();
+ case 400:
+ List genericError400Resp = response.readEntity(new GenericType>() {});
+
+ return PutUserStatusFormByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .genericError400(genericError400Resp)
+ .build();
+ case 401:
+ return PutUserStatusFormByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ case 404:
+ return PutUserStatusFormByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ default:
+ return PutUserStatusFormByIdResponse.builder()
+ .status(status)
+ .unexpected(response.readEntity(String.class))
+ .build();
+ }
+ }
+
+
+ @Builder
+ @Data
+ public static class PutUserStatusFormByIdResponse {
+ private UserStatus userStatus200;
+ private List genericError400;
+
+ private final int status;
+ private final MultivaluedMap headers;
+ private final String unexpected;
+ }
+ }
+
+ /**
+ * Mark a user as deleted. The user cannot be accessed by the api, but will stay in the db for a while, before completely removed.
+ **/
+ public static class DeleteById {
+
+ private final UsersApiClientConfig config;
+
+ public DeleteById(@NonNull final UsersApiClientConfig config) {
+ this.config = config;
+ }
+
+ public DeleteByIdResponse request(@NonNull String id) {
+ // /users/:id
+ final URI uri = UriBuilder.fromUri(this.config.getBaseUrl())
+ .path("users")
+ .path(id.toString())
+ .build();
+
+ WebTarget target = config.getClient().target(uri);
+ Response response = target.request(MediaType.APPLICATION_JSON)
+ .method("DELETE");
+ int status = response.getStatus();
+ switch(status) {
+ case 200:
+ return DeleteByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ case 401:
+ return DeleteByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ case 404:
+ return DeleteByIdResponse.builder()
+ .status(status)
+ .headers(response.getHeaders())
+ .build();
+ default:
+ return DeleteByIdResponse.builder()
+ .status(status)
+ .unexpected(response.readEntity(String.class))
+ .build();
+ }
+ }
+
+
+ @Builder
+ @Data
+ public static class DeleteByIdResponse {
+
+ private final int status;
+ private final MultivaluedMap headers;
+ private final String unexpected;
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/examples/example.json b/examples/example.json
index 1b60c0d..c808701 100644
--- a/examples/example.json
+++ b/examples/example.json
@@ -18,7 +18,13 @@
"email": "info@nclazz.de"
}
},
- "headers": [],
+ "headers": [
+ {
+ "name": "x-something",
+ "type": "string",
+ "required": true
+ }
+ ],
"imports": [
{
"uri": "https://app.apibuilder.io/nclazz/common/latest/service.json",
diff --git a/src/generators/java-client-generator.js b/src/generators/java-client-generator.js
index 1c70963..988c7e8 100644
--- a/src/generators/java-client-generator.js
+++ b/src/generators/java-client-generator.js
@@ -3,6 +3,7 @@ const Mustache = require('mustache')
const fs = require('fs')
const path = require('path')
const utils = require('../utils')
+const javaType = require('../java-type')
const templateApiConfig = fs.readFileSync(path.resolve(path.join('templates', 'jax-rs-config.java.mustache')), 'utf-8')
const templateApi = fs.readFileSync(path.resolve(path.join('templates', 'jax-rs-api.java.mustache')), 'utf-8')
@@ -16,6 +17,12 @@ module.exports = (service) => {
service.package = service.namespace
const resources = javaClient.mapResources(service.resources, service.namespace)
+ service.headers = service.headers.map(header => {
+ header.type = javaType.mapJavaType(header.type, service.namespace)
+ header.label = utils.camelcase(header.name)
+ return header
+ })
+
const files = resources.map(resource => {
return {
name: `${resource.name}.java`,
diff --git a/templates/jax-rs-config.java.mustache b/templates/jax-rs-config.java.mustache
index 9eca6cd..aa7d589 100644
--- a/templates/jax-rs-config.java.mustache
+++ b/templates/jax-rs-config.java.mustache
@@ -15,17 +15,34 @@ import org.glassfish.jersey.client.HttpUrlConnectorProvider;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.ClientRequestFilter;
+import javax.ws.rs.client.ClientRequestContext;
+import java.io.IOException;
@Builder(toBuilder = true)
@With
@Getter
@EqualsAndHashCode
-public class {{configName}} {
+public class {{configName}} implements ClientRequestFilter {
@NonNull
private final String baseUrl;
@Builder.Default
private final Client client = ClientBuilder.newClient()
+ .register(this)
.property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true);
+ {{#headers}}/** {{#description}}{{.}}
+ {{/description}} **/{{#required}}
+ @NonNull{{/required}}
+ private {{{type.name}}} {{label}};
+ {{/headers}}
+
+ @Override
+ public void filter(ClientRequestContext requestContext) throws IOException {
+ {{#headers}}
+ requestContext.getHeaders().add("{{name}}", this.{{label}});
+ {{/headers}}
+ }
+
}
\ No newline at end of file