added global header support for client

master
Niclas Thobaben 2021-07-18 15:25:15 +02:00
parent 03301b856c
commit 0f3ac20614
11 changed files with 1198 additions and 5 deletions

View File

@ -0,0 +1,40 @@
/**
* Auto-generated from apibuilder.io service specification.
* apidoc-version :
* organisation :
* service-version :
*
* Documentation at:
* <a href="https://app.apibuilder.io///">https://app.apibuilder.io///</a>
*
**/
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 {
}
}

View File

@ -0,0 +1,31 @@
/**
* Auto-generated from apibuilder.io service spec.
* apidoc-version :
* organisation :
* service-version :
*
* Documentation at:
* <a href="https://app.apibuilder.io///">https://app.apibuilder.io///</a>
*
**/
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;
}
}

View File

@ -8,22 +8,38 @@
* <a href="https://app.apibuilder.io///">https://app.apibuilder.io///</a>
*
**/
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);
}
}

View File

@ -0,0 +1,43 @@
/**
* Auto-generated from apibuilder.io service spec.
* apidoc-version :
* organisation :
* service-version :
*
* Documentation at:
* <a href="https://app.apibuilder.io///">https://app.apibuilder.io///</a>
*
**/
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);
}
}

View File

@ -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:
* <a href="https://app.apibuilder.io/nclazz/users/0.0.0-dev-30-gbd50cdf-bd9390b2-staging">https://app.apibuilder.io/nclazz/users/0.0.0-dev-30-gbd50cdf-bd9390b2-staging</a>
*
**/
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<String, Object> headers;
private final String unexpected;
}
}
}

View File

@ -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:
* <a href="https://app.apibuilder.io/nclazz/users/0.0.0-dev-30-gbd50cdf-bd9390b2-staging">https://app.apibuilder.io/nclazz/users/0.0.0-dev-30-gbd50cdf-bd9390b2-staging</a>
*
**/
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<Role> role200Resp = response.readEntity(new GenericType<List<Role>>() {});
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<Role> role200;
private final int status;
private final MultivaluedMap<String, Object> 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<String, Object> 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<GenericError> genericError400Resp = response.readEntity(new GenericType<List<GenericError>>() {});
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<GenericError> genericError400;
private final int status;
private final MultivaluedMap<String, Object> 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<GenericError> genericError400Resp = response.readEntity(new GenericType<List<GenericError>>() {});
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<GenericError> genericError400;
private final int status;
private final MultivaluedMap<String, Object> 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<String, Object> headers;
private final String unexpected;
}
}
}

View File

@ -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:
* <a href="https://app.apibuilder.io/nclazz/users/0.0.0-dev-30-gbd50cdf-bd9390b2-staging">https://app.apibuilder.io/nclazz/users/0.0.0-dev-30-gbd50cdf-bd9390b2-staging</a>
*
**/
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<String, Object> headers;
private final String unexpected;
}
}
}

View File

@ -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:
* <a href="https://app.apibuilder.io/nclazz/users/0.0.0-dev-30-gbd50cdf-bd9390b2-staging">https://app.apibuilder.io/nclazz/users/0.0.0-dev-30-gbd50cdf-bd9390b2-staging</a>
*
**/
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<User> user200Resp = response.readEntity(new GenericType<List<User>>() {});
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<User> user200;
private final int status;
private final MultivaluedMap<String, Object> 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<String, Object> 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<GenericError> genericError400Resp = response.readEntity(new GenericType<List<GenericError>>() {});
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<GenericError> genericError400;
private final int status;
private final MultivaluedMap<String, Object> 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<GenericError> genericError400Resp = response.readEntity(new GenericType<List<GenericError>>() {});
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<GenericError> genericError400;
private final int status;
private final MultivaluedMap<String, Object> 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<GenericError> genericError400Resp = response.readEntity(new GenericType<List<GenericError>>() {});
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<GenericError> genericError400;
private final int status;
private final MultivaluedMap<String, Object> 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<String, Object> headers;
private final String unexpected;
}
}
}

View File

@ -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",

View File

@ -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`,

View File

@ -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}}
}
}