From cbaed5659c0af670e26959d173e2389362f6c669 Mon Sep 17 00:00:00 2001 From: Tom Schindl Date: Fri, 19 Jun 2026 01:47:21 +0200 Subject: [PATCH 1/2] 61 - added possibility to provide http-client and added close API --- .../client/jdkhttp/JDKSpecSamplesClient.java | 159 ++++++++++++------ .../sample/client/BinaryTypesServiceTest.java | 4 +- .../client/BodyParameterTypesServiceTest.java | 4 +- .../HeaderParameterTypesServiceTest.java | 4 +- .../ListBodyParameterTypesServiceTest.java | 4 +- .../ListHeaderParameterTypesServiceTest.java | 4 +- .../ListQueryParameterTypesServiceTest.java | 4 +- .../client/ListSampleServiceServiceTest.java | 4 +- .../PathParameterTypeServiceServiceTest.java | 4 +- .../QueryParameterTypesServiceTest.java | 4 +- .../client/SampleServiceServiceTest.java | 4 +- .../ScalarSubstition_ServiceServiceTest.java | 4 +- .../cli/src/java-rest-client-jdk/client.ts | 51 ++++-- 13 files changed, 172 insertions(+), 82 deletions(-) diff --git a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/JDKSpecSamplesClient.java b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/JDKSpecSamplesClient.java index acd0595f..6af5675f 100644 --- a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/JDKSpecSamplesClient.java +++ b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/JDKSpecSamplesClient.java @@ -146,7 +146,7 @@ import dev.rsdlang.sample.client.ScalarSubstition_ServiceService; import dev.rsdlang.sample.client.SpecSamplesClient; -public class JDKSpecSamplesClient implements SpecSamplesClient { +public class JDKSpecSamplesClient implements SpecSamplesClient, AutoCloseable { public enum ContentTypeEncoding { APPLICATION_JSON("application/json"), APPLICATION_VND_MSGPACK("application/vnd.msgpack"); @@ -160,7 +160,7 @@ public enum ContentTypeEncoding { public static class Builder { private URI baseURI; - private HttpClient httpClient; + private Supplier httpClientSupplier; private ContentTypeEncoding contentTypeEncoding; public Builder baseURI(URI baseURI) { @@ -169,7 +169,11 @@ public Builder baseURI(URI baseURI) { } public Builder httpClient(HttpClient httpClient) { - this.httpClient = httpClient; + return httpClientSupplier(() -> httpClient); + } + + public Builder httpClientSupplier(Supplier httpClientSupplier) { + this.httpClientSupplier = httpClientSupplier; return this; } @@ -182,11 +186,21 @@ public SpecSamplesClient build() { if (baseURI == null) { throw new IllegalStateException("baseURI must be set"); } - var client = (httpClient != null) ? httpClient : HttpClient.newHttpClient(); - if (contentTypeEncoding == null) { - contentTypeEncoding = ContentTypeEncoding.APPLICATION_JSON; + var contentType = contentTypeEncoding == null ? ContentTypeEncoding.APPLICATION_JSON : contentTypeEncoding; + if (httpClientSupplier == null) { + var client = HttpClient.newBuilder().build(); + return new JDKSpecSamplesClient(baseURI, new InternalClientSupplier(), contentType); } - return new JDKSpecSamplesClient(baseURI, client, contentTypeEncoding); + return new JDKSpecSamplesClient(baseURI, httpClientSupplier, contentType); + } + } + + static class InternalClientSupplier implements Supplier { + private final HttpClient client = HttpClient.newBuilder().build(); + + @Override + public HttpClient get() { + return client; } } @@ -222,21 +236,31 @@ public void onFinally(String method) { private static Map, BiFunction> SERVICE_CREATOR_MAP = new HashMap<>(); static { - registerBuilderCreator(SimpleRecord_KeyVersion.DataBuilder.class, SimpleRecord_KeyVersionDataImpl.DataBuilderImpl::new); - registerBuilderCreator(SimpleRecord_KeyVersion_Int_Int.DataBuilder.class, SimpleRecord_KeyVersion_Int_IntDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_KeyVersion.DataBuilder.class, + SimpleRecord_KeyVersionDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_KeyVersion_Int_Int.DataBuilder.class, + SimpleRecord_KeyVersion_Int_IntDataImpl.DataBuilderImpl::new); registerBuilderCreator(SimpleRecord.DataBuilder.class, SimpleRecordDataImpl.DataBuilderImpl::new); registerBuilderCreator(SimpleRecord_Basic.DataBuilder.class, SimpleRecord_BasicDataImpl.DataBuilderImpl::new); - registerBuilderCreator(SimpleRecord_Basic_Optional.DataBuilder.class, SimpleRecord_Basic_OptionalDataImpl.DataBuilderImpl::new); - registerBuilderCreator(SimpleRecord_Basic_Null.DataBuilder.class, SimpleRecord_Basic_NullDataImpl.DataBuilderImpl::new); - registerBuilderCreator(SimpleRecord_Basic_Optional_Null.DataBuilder.class, SimpleRecord_Basic_Optional_NullDataImpl.DataBuilderImpl::new); - registerBuilderCreator(SimpleRecord_Basic_List.DataBuilder.class, SimpleRecord_Basic_ListDataImpl.DataBuilderImpl::new); - registerBuilderCreator(SimpleRecord_Basic_List_Optional.DataBuilder.class, SimpleRecord_Basic_List_OptionalDataImpl.DataBuilderImpl::new); - registerBuilderCreator(SimpleRecord_Basic_List_Null.DataBuilder.class, SimpleRecord_Basic_List_NullDataImpl.DataBuilderImpl::new); - registerBuilderCreator(SimpleRecord_Basic_List_Optional_Null.DataBuilder.class, SimpleRecord_Basic_List_Optional_NullDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_Basic_Optional.DataBuilder.class, + SimpleRecord_Basic_OptionalDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_Basic_Null.DataBuilder.class, + SimpleRecord_Basic_NullDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_Basic_Optional_Null.DataBuilder.class, + SimpleRecord_Basic_Optional_NullDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_Basic_List.DataBuilder.class, + SimpleRecord_Basic_ListDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_Basic_List_Optional.DataBuilder.class, + SimpleRecord_Basic_List_OptionalDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_Basic_List_Null.DataBuilder.class, + SimpleRecord_Basic_List_NullDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_Basic_List_Optional_Null.DataBuilder.class, + SimpleRecord_Basic_List_Optional_NullDataImpl.DataBuilderImpl::new); registerBuilderCreator(EnumRecord.DataBuilder.class, EnumRecordDataImpl.DataBuilderImpl::new); registerBuilderCreator(EnumInlineRecord.DataBuilder.class, EnumInlineRecordDataImpl.DataBuilderImpl::new); registerBuilderCreator(ScalarRecord.DataBuilder.class, ScalarRecordDataImpl.DataBuilderImpl::new); - registerBuilderCreator(ScalarRecord_Substitution.DataBuilder.class, ScalarRecord_SubstitutionDataImpl.DataBuilderImpl::new); + registerBuilderCreator(ScalarRecord_Substitution.DataBuilder.class, + ScalarRecord_SubstitutionDataImpl.DataBuilderImpl::new); registerBuilderCreator(RecordOfRecords.DataBuilder.class, RecordOfRecordsDataImpl.DataBuilderImpl::new); registerBuilderCreator(RecordWithUnions.DataBuilder.class, RecordWithUnionsDataImpl.DataBuilderImpl::new); registerBuilderCreator(UnionA.DataBuilder.class, UnionADataImpl.DataBuilderImpl::new); @@ -245,20 +269,33 @@ public void onFinally(String method) { registerBuilderCreator(CyclicNodeA.DataBuilder.class, CyclicNodeADataImpl.DataBuilderImpl::new); registerBuilderCreator(CyclicNodeB.DataBuilder.class, CyclicNodeBDataImpl.DataBuilderImpl::new); registerBuilderCreator(PatchableRecord.DataBuilder.class, PatchableRecordDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic.DataBuilder.class, PatchableRecord_BasicDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_Optional.DataBuilder.class, PatchableRecord_Basic_OptionalDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_Null.DataBuilder.class, PatchableRecord_Basic_NullDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_Optional_Null.DataBuilder.class, PatchableRecord_Basic_Optional_NullDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_List.DataBuilder.class, PatchableRecord_Basic_ListDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_List_Optional.DataBuilder.class, PatchableRecord_Basic_List_OptionalDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_List_Null.DataBuilder.class, PatchableRecord_Basic_List_NullDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_List_Optional_Null.DataBuilder.class, PatchableRecord_Basic_List_Optional_NullDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic.DataBuilder.class, + PatchableRecord_BasicDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_Optional.DataBuilder.class, + PatchableRecord_Basic_OptionalDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_Null.DataBuilder.class, + PatchableRecord_Basic_NullDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_Optional_Null.DataBuilder.class, + PatchableRecord_Basic_Optional_NullDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_List.DataBuilder.class, + PatchableRecord_Basic_ListDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_List_Optional.DataBuilder.class, + PatchableRecord_Basic_List_OptionalDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_List_Null.DataBuilder.class, + PatchableRecord_Basic_List_NullDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_List_Optional_Null.DataBuilder.class, + PatchableRecord_Basic_List_Optional_NullDataImpl.DataBuilderImpl::new); registerBuilderCreator(PatchableEnumRecord.DataBuilder.class, PatchableEnumRecordDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableEnumInlineRecord.DataBuilder.class, PatchableEnumInlineRecordDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableScalarRecord.DataBuilder.class, PatchableScalarRecordDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableScalarRecord_Substitution.DataBuilder.class, PatchableScalarRecord_SubstitutionDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecordOfRecords.DataBuilder.class, PatchableRecordOfRecordsDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecordWithUnion.DataBuilder.class, PatchableRecordWithUnionDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableEnumInlineRecord.DataBuilder.class, + PatchableEnumInlineRecordDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableScalarRecord.DataBuilder.class, + PatchableScalarRecordDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableScalarRecord_Substitution.DataBuilder.class, + PatchableScalarRecord_SubstitutionDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecordOfRecords.DataBuilder.class, + PatchableRecordOfRecordsDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecordWithUnion.DataBuilder.class, + PatchableRecordWithUnionDataImpl.DataBuilderImpl::new); registerBuilderCreator(PatchableUnionA.DataBuilder.class, PatchableUnionADataImpl.DataBuilderImpl::new); registerBuilderCreator(PatchableUnionB.DataBuilder.class, PatchableUnionBDataImpl.DataBuilderImpl::new); registerBuilderCreator(MixinRecord.DataBuilder.class, MixinRecordDataImpl.DataBuilderImpl::new); @@ -267,20 +304,34 @@ public void onFinally(String method) { registerBuilderCreator(ErrorData.DataBuilder.class, ErrorDataDataImpl.DataBuilderImpl::new); registerBuilderCreator(PatchableRecord.PatchBuilder.class, PatchableRecordPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic.PatchBuilder.class, PatchableRecord_BasicPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_Optional.PatchBuilder.class, PatchableRecord_Basic_OptionalPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_Null.PatchBuilder.class, PatchableRecord_Basic_NullPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_Optional_Null.PatchBuilder.class, PatchableRecord_Basic_Optional_NullPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_List.PatchBuilder.class, PatchableRecord_Basic_ListPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_List_Optional.PatchBuilder.class, PatchableRecord_Basic_List_OptionalPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_List_Null.PatchBuilder.class, PatchableRecord_Basic_List_NullPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_List_Optional_Null.PatchBuilder.class, PatchableRecord_Basic_List_Optional_NullPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableEnumRecord.PatchBuilder.class, PatchableEnumRecordPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableEnumInlineRecord.PatchBuilder.class, PatchableEnumInlineRecordPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableScalarRecord.PatchBuilder.class, PatchableScalarRecordPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableScalarRecord_Substitution.PatchBuilder.class, PatchableScalarRecord_SubstitutionPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecordOfRecords.PatchBuilder.class, PatchableRecordOfRecordsPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecordWithUnion.PatchBuilder.class, PatchableRecordWithUnionPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic.PatchBuilder.class, + PatchableRecord_BasicPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_Optional.PatchBuilder.class, + PatchableRecord_Basic_OptionalPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_Null.PatchBuilder.class, + PatchableRecord_Basic_NullPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_Optional_Null.PatchBuilder.class, + PatchableRecord_Basic_Optional_NullPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_List.PatchBuilder.class, + PatchableRecord_Basic_ListPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_List_Optional.PatchBuilder.class, + PatchableRecord_Basic_List_OptionalPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_List_Null.PatchBuilder.class, + PatchableRecord_Basic_List_NullPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_List_Optional_Null.PatchBuilder.class, + PatchableRecord_Basic_List_Optional_NullPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableEnumRecord.PatchBuilder.class, + PatchableEnumRecordPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableEnumInlineRecord.PatchBuilder.class, + PatchableEnumInlineRecordPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableScalarRecord.PatchBuilder.class, + PatchableScalarRecordPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableScalarRecord_Substitution.PatchBuilder.class, + PatchableScalarRecord_SubstitutionPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecordOfRecords.PatchBuilder.class, + PatchableRecordOfRecordsPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecordWithUnion.PatchBuilder.class, + PatchableRecordWithUnionPatchImpl.PatchBuilderImpl::new); registerBuilderCreator(PatchableUnionA.PatchBuilder.class, PatchableUnionAPatchImpl.PatchBuilderImpl::new); registerBuilderCreator(PatchableUnionB.PatchBuilder.class, PatchableUnionBPatchImpl.PatchBuilderImpl::new); @@ -301,17 +352,19 @@ private static void registerBuilderCreator(Class clazz, Supplier cons BUILDER_CREATOR_MAP.put(clazz, constructor); } - private static void registerServiceCreator(Class clazz, BiFunction constructor) { + private static void registerServiceCreator(Class clazz, + BiFunction constructor) { SERVICE_CREATOR_MAP.put(clazz, constructor); } private final URI baseURI; - private final HttpClient httpClient; + private final Supplier httpClientSupplier; private final ContentTypeEncoding contentTypeEncoding; - JDKSpecSamplesClient(URI baseURI, HttpClient httpClient, ContentTypeEncoding contentTypeEncoding) { + JDKSpecSamplesClient(URI baseURI, Supplier httpClientSupplier, + ContentTypeEncoding contentTypeEncoding) { this.baseURI = baseURI; - this.httpClient = httpClient; + this.httpClientSupplier = httpClientSupplier; this.contentTypeEncoding = contentTypeEncoding; } @@ -320,7 +373,7 @@ public ContentTypeEncoding contentTypeEncoding() { } public HttpClient httpClient() { - return this.httpClient; + return this.httpClientSupplier.get(); } public URI baseURI() { @@ -397,4 +450,12 @@ public RSDBlob createBlob(Path file, String mimeType) { public RSDFile createFile(Path file, String mimeType, String filename) { return _FileImpl.of(file, mimeType, filename); } + + @Override + public void close() { + if (this.httpClientSupplier instanceof InternalClientSupplier) { + var client = this.httpClientSupplier.get(); + client.close(); + } + } } diff --git a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/BinaryTypesServiceTest.java b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/BinaryTypesServiceTest.java index b1ceced8..4d2df1b3 100644 --- a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/BinaryTypesServiceTest.java +++ b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/BinaryTypesServiceTest.java @@ -32,8 +32,8 @@ static void setUp() { @AfterAll static void tearDown() { - ((JDKSpecSamplesClient) JSON).httpClient().close(); - ((JDKSpecSamplesClient) MSGPACK).httpClient().close(); + ((JDKSpecSamplesClient) JSON).close(); + ((JDKSpecSamplesClient) MSGPACK).close(); } static BinaryTypesService[] serviceProvider() { diff --git a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/BodyParameterTypesServiceTest.java b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/BodyParameterTypesServiceTest.java index 9b40184a..41c05138 100644 --- a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/BodyParameterTypesServiceTest.java +++ b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/BodyParameterTypesServiceTest.java @@ -42,8 +42,8 @@ static void setUp() { @AfterAll static void tearDown() { - ((JDKSpecSamplesClient) JSON).httpClient().close(); - ((JDKSpecSamplesClient) MSGPACK).httpClient().close(); + ((JDKSpecSamplesClient) JSON).close(); + ((JDKSpecSamplesClient) MSGPACK).close(); } static BodyParameterTypesService[] serviceProvider() { diff --git a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/HeaderParameterTypesServiceTest.java b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/HeaderParameterTypesServiceTest.java index 5a413bc2..c70136a0 100644 --- a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/HeaderParameterTypesServiceTest.java +++ b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/HeaderParameterTypesServiceTest.java @@ -40,8 +40,8 @@ static void setUp() { @AfterAll static void tearDown() { - ((JDKSpecSamplesClient) JSON).httpClient().close(); - ((JDKSpecSamplesClient) MSGPACK).httpClient().close(); + ((JDKSpecSamplesClient) JSON).close(); + ((JDKSpecSamplesClient) MSGPACK).close(); } static HeaderParameterTypesService[] serviceProvider() { diff --git a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ListBodyParameterTypesServiceTest.java b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ListBodyParameterTypesServiceTest.java index 14d71fb1..203ce995 100644 --- a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ListBodyParameterTypesServiceTest.java +++ b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ListBodyParameterTypesServiceTest.java @@ -40,8 +40,8 @@ static void setUp() { @AfterAll static void tearDown() { - ((JDKSpecSamplesClient) JSON).httpClient().close(); - ((JDKSpecSamplesClient) MSGPACK).httpClient().close(); + ((JDKSpecSamplesClient) JSON).close(); + ((JDKSpecSamplesClient) MSGPACK).close(); } static ListBodyParameterTypesService[] serviceProvider() { diff --git a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ListHeaderParameterTypesServiceTest.java b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ListHeaderParameterTypesServiceTest.java index ba7cefcd..b4ec118d 100644 --- a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ListHeaderParameterTypesServiceTest.java +++ b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ListHeaderParameterTypesServiceTest.java @@ -40,8 +40,8 @@ static void setUp() { @AfterAll static void tearDown() { - ((JDKSpecSamplesClient) JSON).httpClient().close(); - ((JDKSpecSamplesClient) MSGPACK).httpClient().close(); + ((JDKSpecSamplesClient) JSON).close(); + ((JDKSpecSamplesClient) MSGPACK).close(); } static ListHeaderParameterTypesService[] serviceProvider() { diff --git a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ListQueryParameterTypesServiceTest.java b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ListQueryParameterTypesServiceTest.java index 6563e43f..4a839d39 100644 --- a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ListQueryParameterTypesServiceTest.java +++ b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ListQueryParameterTypesServiceTest.java @@ -36,8 +36,8 @@ static void setUp() { @AfterAll static void tearDown() { - ((JDKSpecSamplesClient) JSON).httpClient().close(); - ((JDKSpecSamplesClient) MSGPACK).httpClient().close(); + ((JDKSpecSamplesClient) JSON).close(); + ((JDKSpecSamplesClient) MSGPACK).close(); } static ListQueryParameterTypesService[] serviceProvider() { diff --git a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ListSampleServiceServiceTest.java b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ListSampleServiceServiceTest.java index d2945303..3899eca3 100644 --- a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ListSampleServiceServiceTest.java +++ b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ListSampleServiceServiceTest.java @@ -34,8 +34,8 @@ static void setUp() { @AfterAll static void tearDown() { - ((JDKSpecSamplesClient) JSON).httpClient().close(); - ((JDKSpecSamplesClient) MSGPACK).httpClient().close(); + ((JDKSpecSamplesClient) JSON).close(); + ((JDKSpecSamplesClient) MSGPACK).close(); } static ListSampleServiceService[] serviceProvider() { diff --git a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/PathParameterTypeServiceServiceTest.java b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/PathParameterTypeServiceServiceTest.java index 59056d24..c194aa5f 100644 --- a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/PathParameterTypeServiceServiceTest.java +++ b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/PathParameterTypeServiceServiceTest.java @@ -33,8 +33,8 @@ static void setUp() { @AfterAll static void tearDown() { - ((JDKSpecSamplesClient) JSON).httpClient().close(); - ((JDKSpecSamplesClient) MSGPACK).httpClient().close(); + ((JDKSpecSamplesClient) JSON).close(); + ((JDKSpecSamplesClient) MSGPACK).close(); } static PathParameterTypeServiceService[] serviceProvider() { diff --git a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/QueryParameterTypesServiceTest.java b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/QueryParameterTypesServiceTest.java index d5c8df44..b7c9e49f 100644 --- a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/QueryParameterTypesServiceTest.java +++ b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/QueryParameterTypesServiceTest.java @@ -35,8 +35,8 @@ static void setUp() { @AfterAll static void tearDown() { - ((JDKSpecSamplesClient) JSON).httpClient().close(); - ((JDKSpecSamplesClient) MSGPACK).httpClient().close(); + ((JDKSpecSamplesClient) JSON).close(); + ((JDKSpecSamplesClient) MSGPACK).close(); } static QueryParameterTypesService[] serviceProvider() { diff --git a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/SampleServiceServiceTest.java b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/SampleServiceServiceTest.java index 7b9b80e7..99cdf657 100644 --- a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/SampleServiceServiceTest.java +++ b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/SampleServiceServiceTest.java @@ -34,8 +34,8 @@ static void setUp() { @AfterAll static void tearDown() { - ((JDKSpecSamplesClient) JSON).httpClient().close(); - ((JDKSpecSamplesClient) MSGPACK).httpClient().close(); + ((JDKSpecSamplesClient) JSON).close(); + ((JDKSpecSamplesClient) MSGPACK).close(); } static SampleServiceService[] serviceProvider() { diff --git a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ScalarSubstition_ServiceServiceTest.java b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ScalarSubstition_ServiceServiceTest.java index af600f65..ed15ec17 100644 --- a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ScalarSubstition_ServiceServiceTest.java +++ b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/ScalarSubstition_ServiceServiceTest.java @@ -28,8 +28,8 @@ static void setUp() { @AfterAll static void tearDown() { - ((JDKSpecSamplesClient) JSON).httpClient().close(); - ((JDKSpecSamplesClient) MSGPACK).httpClient().close(); + ((JDKSpecSamplesClient) JSON).close(); + ((JDKSpecSamplesClient) MSGPACK).close(); } static ScalarSubstition_ServiceService[] serviceProvider() { diff --git a/dsl/packages/cli/src/java-rest-client-jdk/client.ts b/dsl/packages/cli/src/java-rest-client-jdk/client.ts index 0f29770e..e390c441 100644 --- a/dsl/packages/cli/src/java-rest-client-jdk/client.ts +++ b/dsl/packages/cli/src/java-rest-client-jdk/client.ts @@ -39,7 +39,10 @@ export function generateClient( const Optional = fqn('java.util.Optional'); const content = new CompositeGeneratorNode(); - content.append(`public class JDK${toCamelCaseIdentifier(generatorConfig.name)}Client implements ${Client} {`, NL); + content.append( + `public class JDK${toCamelCaseIdentifier(generatorConfig.name)}Client implements ${Client}, AutoCloseable {`, + NL, + ); content.indent(classBody => { const contentEncodings = artifactConfig.contentTypeEncodings === undefined || artifactConfig.contentTypeEncodings.length === 0 @@ -65,7 +68,7 @@ export function generateClient( const builder = toNodeTree(` public static class Builder { private URI baseURI; - private HttpClient httpClient; + private Supplier httpClientSupplier; private ContentTypeEncoding contentTypeEncoding; public Builder baseURI(URI baseURI) { @@ -74,7 +77,11 @@ export function generateClient( } public Builder httpClient(HttpClient httpClient) { - this.httpClient = httpClient; + return httpClientSupplier(() -> httpClient); + } + + public Builder httpClientSupplier(Supplier httpClientSupplier) { + this.httpClientSupplier = httpClientSupplier; return this; } @@ -87,11 +94,21 @@ export function generateClient( if (baseURI == null) { throw new IllegalStateException("baseURI must be set"); } - var client = (httpClient != null) ? httpClient : HttpClient.newHttpClient(); - if (contentTypeEncoding == null) { - contentTypeEncoding = ContentTypeEncoding.${toEnumLiteral(contentEncodings[0])}; + var contentType = contentTypeEncoding == null ? ContentTypeEncoding.APPLICATION_JSON : contentTypeEncoding; + if (httpClientSupplier == null) { + var client = HttpClient.newBuilder().build(); + return new JDK${toCamelCaseIdentifier(generatorConfig.name)}Client(baseURI, new InternalClientSupplier(), contentType); } - return new JDK${toCamelCaseIdentifier(generatorConfig.name)}Client(baseURI, client, contentTypeEncoding); + return new JDK${toCamelCaseIdentifier(generatorConfig.name)}Client(baseURI, httpClientSupplier, contentType); + } + } + + static class InternalClientSupplier implements Supplier { + private final HttpClient client = HttpClient.newBuilder().build(); + + @Override + public HttpClient get() { + return client; } } @@ -181,18 +198,18 @@ export function generateClient( clBody.append('}', NL); clBody.appendNewLine(); clBody.append(`private final ${URI} baseURI;`, NL); - clBody.append(`private final ${HttpClient} httpClient;`, NL); + clBody.append(`private final ${Supplier}<${HttpClient}> httpClientSupplier;`, NL); clBody.append(`private final ContentTypeEncoding contentTypeEncoding;`, NL); clBody.appendNewLine(); clBody.append( `JDK${toCamelCaseIdentifier( generatorConfig.name, - )}Client(${URI} baseURI, ${HttpClient} httpClient, ContentTypeEncoding contentTypeEncoding) {`, + )}Client(${URI} baseURI, ${Supplier}<${HttpClient}> httpClientSupplier, ContentTypeEncoding contentTypeEncoding) {`, NL, ); clBody.indent(initBlock => { initBlock.append('this.baseURI = baseURI;', NL); - initBlock.append('this.httpClient = httpClient;', NL); + initBlock.append('this.httpClientSupplier = httpClientSupplier;', NL); initBlock.append('this.contentTypeEncoding = contentTypeEncoding;', NL); }); clBody.append('}', NL); @@ -203,7 +220,7 @@ export function generateClient( } public HttpClient httpClient() { - return this.httpClient; + return this.httpClientSupplier.get(); } public URI baseURI() { @@ -351,6 +368,18 @@ export function generateClient( } }); + const autoClose = toNodeTree(` + @Override + public void close() { + if (this.httpClientSupplier instanceof InternalClientSupplier) { + var client = this.httpClientSupplier.get(); + client.close(); + } + }`); + content.indent(clBody => { + clBody.appendNewLine(); + clBody.append(autoClose, NL); + }); content.append('}', NL); return { From 8830a4d1a14c05a1f4d12049122e14f47947799b Mon Sep 17 00:00:00 2001 From: Tom Schindl Date: Fri, 19 Jun 2026 01:55:06 +0200 Subject: [PATCH 2/2] 61 - fixed PR feedback - removed dead code - fixed hard coding of content-type - allow diposing of the closeable suppliers --- .../client/jdkhttp/JDKSpecSamplesClient.java | 124 +++++++----------- .../cli/src/java-rest-client-jdk/client.ts | 9 +- 2 files changed, 52 insertions(+), 81 deletions(-) diff --git a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/JDKSpecSamplesClient.java b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/JDKSpecSamplesClient.java index 6af5675f..ee1ec743 100644 --- a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/JDKSpecSamplesClient.java +++ b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/JDKSpecSamplesClient.java @@ -188,7 +188,6 @@ public SpecSamplesClient build() { } var contentType = contentTypeEncoding == null ? ContentTypeEncoding.APPLICATION_JSON : contentTypeEncoding; if (httpClientSupplier == null) { - var client = HttpClient.newBuilder().build(); return new JDKSpecSamplesClient(baseURI, new InternalClientSupplier(), contentType); } return new JDKSpecSamplesClient(baseURI, httpClientSupplier, contentType); @@ -236,31 +235,21 @@ public void onFinally(String method) { private static Map, BiFunction> SERVICE_CREATOR_MAP = new HashMap<>(); static { - registerBuilderCreator(SimpleRecord_KeyVersion.DataBuilder.class, - SimpleRecord_KeyVersionDataImpl.DataBuilderImpl::new); - registerBuilderCreator(SimpleRecord_KeyVersion_Int_Int.DataBuilder.class, - SimpleRecord_KeyVersion_Int_IntDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_KeyVersion.DataBuilder.class, SimpleRecord_KeyVersionDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_KeyVersion_Int_Int.DataBuilder.class, SimpleRecord_KeyVersion_Int_IntDataImpl.DataBuilderImpl::new); registerBuilderCreator(SimpleRecord.DataBuilder.class, SimpleRecordDataImpl.DataBuilderImpl::new); registerBuilderCreator(SimpleRecord_Basic.DataBuilder.class, SimpleRecord_BasicDataImpl.DataBuilderImpl::new); - registerBuilderCreator(SimpleRecord_Basic_Optional.DataBuilder.class, - SimpleRecord_Basic_OptionalDataImpl.DataBuilderImpl::new); - registerBuilderCreator(SimpleRecord_Basic_Null.DataBuilder.class, - SimpleRecord_Basic_NullDataImpl.DataBuilderImpl::new); - registerBuilderCreator(SimpleRecord_Basic_Optional_Null.DataBuilder.class, - SimpleRecord_Basic_Optional_NullDataImpl.DataBuilderImpl::new); - registerBuilderCreator(SimpleRecord_Basic_List.DataBuilder.class, - SimpleRecord_Basic_ListDataImpl.DataBuilderImpl::new); - registerBuilderCreator(SimpleRecord_Basic_List_Optional.DataBuilder.class, - SimpleRecord_Basic_List_OptionalDataImpl.DataBuilderImpl::new); - registerBuilderCreator(SimpleRecord_Basic_List_Null.DataBuilder.class, - SimpleRecord_Basic_List_NullDataImpl.DataBuilderImpl::new); - registerBuilderCreator(SimpleRecord_Basic_List_Optional_Null.DataBuilder.class, - SimpleRecord_Basic_List_Optional_NullDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_Basic_Optional.DataBuilder.class, SimpleRecord_Basic_OptionalDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_Basic_Null.DataBuilder.class, SimpleRecord_Basic_NullDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_Basic_Optional_Null.DataBuilder.class, SimpleRecord_Basic_Optional_NullDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_Basic_List.DataBuilder.class, SimpleRecord_Basic_ListDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_Basic_List_Optional.DataBuilder.class, SimpleRecord_Basic_List_OptionalDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_Basic_List_Null.DataBuilder.class, SimpleRecord_Basic_List_NullDataImpl.DataBuilderImpl::new); + registerBuilderCreator(SimpleRecord_Basic_List_Optional_Null.DataBuilder.class, SimpleRecord_Basic_List_Optional_NullDataImpl.DataBuilderImpl::new); registerBuilderCreator(EnumRecord.DataBuilder.class, EnumRecordDataImpl.DataBuilderImpl::new); registerBuilderCreator(EnumInlineRecord.DataBuilder.class, EnumInlineRecordDataImpl.DataBuilderImpl::new); registerBuilderCreator(ScalarRecord.DataBuilder.class, ScalarRecordDataImpl.DataBuilderImpl::new); - registerBuilderCreator(ScalarRecord_Substitution.DataBuilder.class, - ScalarRecord_SubstitutionDataImpl.DataBuilderImpl::new); + registerBuilderCreator(ScalarRecord_Substitution.DataBuilder.class, ScalarRecord_SubstitutionDataImpl.DataBuilderImpl::new); registerBuilderCreator(RecordOfRecords.DataBuilder.class, RecordOfRecordsDataImpl.DataBuilderImpl::new); registerBuilderCreator(RecordWithUnions.DataBuilder.class, RecordWithUnionsDataImpl.DataBuilderImpl::new); registerBuilderCreator(UnionA.DataBuilder.class, UnionADataImpl.DataBuilderImpl::new); @@ -269,33 +258,20 @@ public void onFinally(String method) { registerBuilderCreator(CyclicNodeA.DataBuilder.class, CyclicNodeADataImpl.DataBuilderImpl::new); registerBuilderCreator(CyclicNodeB.DataBuilder.class, CyclicNodeBDataImpl.DataBuilderImpl::new); registerBuilderCreator(PatchableRecord.DataBuilder.class, PatchableRecordDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic.DataBuilder.class, - PatchableRecord_BasicDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_Optional.DataBuilder.class, - PatchableRecord_Basic_OptionalDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_Null.DataBuilder.class, - PatchableRecord_Basic_NullDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_Optional_Null.DataBuilder.class, - PatchableRecord_Basic_Optional_NullDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_List.DataBuilder.class, - PatchableRecord_Basic_ListDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_List_Optional.DataBuilder.class, - PatchableRecord_Basic_List_OptionalDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_List_Null.DataBuilder.class, - PatchableRecord_Basic_List_NullDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_List_Optional_Null.DataBuilder.class, - PatchableRecord_Basic_List_Optional_NullDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic.DataBuilder.class, PatchableRecord_BasicDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_Optional.DataBuilder.class, PatchableRecord_Basic_OptionalDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_Null.DataBuilder.class, PatchableRecord_Basic_NullDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_Optional_Null.DataBuilder.class, PatchableRecord_Basic_Optional_NullDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_List.DataBuilder.class, PatchableRecord_Basic_ListDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_List_Optional.DataBuilder.class, PatchableRecord_Basic_List_OptionalDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_List_Null.DataBuilder.class, PatchableRecord_Basic_List_NullDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_List_Optional_Null.DataBuilder.class, PatchableRecord_Basic_List_Optional_NullDataImpl.DataBuilderImpl::new); registerBuilderCreator(PatchableEnumRecord.DataBuilder.class, PatchableEnumRecordDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableEnumInlineRecord.DataBuilder.class, - PatchableEnumInlineRecordDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableScalarRecord.DataBuilder.class, - PatchableScalarRecordDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableScalarRecord_Substitution.DataBuilder.class, - PatchableScalarRecord_SubstitutionDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecordOfRecords.DataBuilder.class, - PatchableRecordOfRecordsDataImpl.DataBuilderImpl::new); - registerBuilderCreator(PatchableRecordWithUnion.DataBuilder.class, - PatchableRecordWithUnionDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableEnumInlineRecord.DataBuilder.class, PatchableEnumInlineRecordDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableScalarRecord.DataBuilder.class, PatchableScalarRecordDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableScalarRecord_Substitution.DataBuilder.class, PatchableScalarRecord_SubstitutionDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecordOfRecords.DataBuilder.class, PatchableRecordOfRecordsDataImpl.DataBuilderImpl::new); + registerBuilderCreator(PatchableRecordWithUnion.DataBuilder.class, PatchableRecordWithUnionDataImpl.DataBuilderImpl::new); registerBuilderCreator(PatchableUnionA.DataBuilder.class, PatchableUnionADataImpl.DataBuilderImpl::new); registerBuilderCreator(PatchableUnionB.DataBuilder.class, PatchableUnionBDataImpl.DataBuilderImpl::new); registerBuilderCreator(MixinRecord.DataBuilder.class, MixinRecordDataImpl.DataBuilderImpl::new); @@ -304,34 +280,20 @@ public void onFinally(String method) { registerBuilderCreator(ErrorData.DataBuilder.class, ErrorDataDataImpl.DataBuilderImpl::new); registerBuilderCreator(PatchableRecord.PatchBuilder.class, PatchableRecordPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic.PatchBuilder.class, - PatchableRecord_BasicPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_Optional.PatchBuilder.class, - PatchableRecord_Basic_OptionalPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_Null.PatchBuilder.class, - PatchableRecord_Basic_NullPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_Optional_Null.PatchBuilder.class, - PatchableRecord_Basic_Optional_NullPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_List.PatchBuilder.class, - PatchableRecord_Basic_ListPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_List_Optional.PatchBuilder.class, - PatchableRecord_Basic_List_OptionalPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_List_Null.PatchBuilder.class, - PatchableRecord_Basic_List_NullPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecord_Basic_List_Optional_Null.PatchBuilder.class, - PatchableRecord_Basic_List_Optional_NullPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableEnumRecord.PatchBuilder.class, - PatchableEnumRecordPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableEnumInlineRecord.PatchBuilder.class, - PatchableEnumInlineRecordPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableScalarRecord.PatchBuilder.class, - PatchableScalarRecordPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableScalarRecord_Substitution.PatchBuilder.class, - PatchableScalarRecord_SubstitutionPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecordOfRecords.PatchBuilder.class, - PatchableRecordOfRecordsPatchImpl.PatchBuilderImpl::new); - registerBuilderCreator(PatchableRecordWithUnion.PatchBuilder.class, - PatchableRecordWithUnionPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic.PatchBuilder.class, PatchableRecord_BasicPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_Optional.PatchBuilder.class, PatchableRecord_Basic_OptionalPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_Null.PatchBuilder.class, PatchableRecord_Basic_NullPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_Optional_Null.PatchBuilder.class, PatchableRecord_Basic_Optional_NullPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_List.PatchBuilder.class, PatchableRecord_Basic_ListPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_List_Optional.PatchBuilder.class, PatchableRecord_Basic_List_OptionalPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_List_Null.PatchBuilder.class, PatchableRecord_Basic_List_NullPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecord_Basic_List_Optional_Null.PatchBuilder.class, PatchableRecord_Basic_List_Optional_NullPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableEnumRecord.PatchBuilder.class, PatchableEnumRecordPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableEnumInlineRecord.PatchBuilder.class, PatchableEnumInlineRecordPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableScalarRecord.PatchBuilder.class, PatchableScalarRecordPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableScalarRecord_Substitution.PatchBuilder.class, PatchableScalarRecord_SubstitutionPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecordOfRecords.PatchBuilder.class, PatchableRecordOfRecordsPatchImpl.PatchBuilderImpl::new); + registerBuilderCreator(PatchableRecordWithUnion.PatchBuilder.class, PatchableRecordWithUnionPatchImpl.PatchBuilderImpl::new); registerBuilderCreator(PatchableUnionA.PatchBuilder.class, PatchableUnionAPatchImpl.PatchBuilderImpl::new); registerBuilderCreator(PatchableUnionB.PatchBuilder.class, PatchableUnionBPatchImpl.PatchBuilderImpl::new); @@ -352,8 +314,7 @@ private static void registerBuilderCreator(Class clazz, Supplier cons BUILDER_CREATOR_MAP.put(clazz, constructor); } - private static void registerServiceCreator(Class clazz, - BiFunction constructor) { + private static void registerServiceCreator(Class clazz, BiFunction constructor) { SERVICE_CREATOR_MAP.put(clazz, constructor); } @@ -361,8 +322,7 @@ private static void registerServiceCreator(Class clazz, private final Supplier httpClientSupplier; private final ContentTypeEncoding contentTypeEncoding; - JDKSpecSamplesClient(URI baseURI, Supplier httpClientSupplier, - ContentTypeEncoding contentTypeEncoding) { + JDKSpecSamplesClient(URI baseURI, Supplier httpClientSupplier, ContentTypeEncoding contentTypeEncoding) { this.baseURI = baseURI; this.httpClientSupplier = httpClientSupplier; this.contentTypeEncoding = contentTypeEncoding; @@ -456,6 +416,12 @@ public void close() { if (this.httpClientSupplier instanceof InternalClientSupplier) { var client = this.httpClientSupplier.get(); client.close(); + } else if (this.httpClientSupplier instanceof AutoCloseable closeable) { + try { + closeable.close(); + } catch (Exception e) { + throw new IllegalStateException(e); + } } } } diff --git a/dsl/packages/cli/src/java-rest-client-jdk/client.ts b/dsl/packages/cli/src/java-rest-client-jdk/client.ts index e390c441..8c08cc71 100644 --- a/dsl/packages/cli/src/java-rest-client-jdk/client.ts +++ b/dsl/packages/cli/src/java-rest-client-jdk/client.ts @@ -94,9 +94,8 @@ export function generateClient( if (baseURI == null) { throw new IllegalStateException("baseURI must be set"); } - var contentType = contentTypeEncoding == null ? ContentTypeEncoding.APPLICATION_JSON : contentTypeEncoding; + var contentType = contentTypeEncoding == null ? ContentTypeEncoding.${toEnumLiteral(contentEncodings[0])} : contentTypeEncoding; if (httpClientSupplier == null) { - var client = HttpClient.newBuilder().build(); return new JDK${toCamelCaseIdentifier(generatorConfig.name)}Client(baseURI, new InternalClientSupplier(), contentType); } return new JDK${toCamelCaseIdentifier(generatorConfig.name)}Client(baseURI, httpClientSupplier, contentType); @@ -374,6 +373,12 @@ export function generateClient( if (this.httpClientSupplier instanceof InternalClientSupplier) { var client = this.httpClientSupplier.get(); client.close(); + } else if (this.httpClientSupplier instanceof AutoCloseable closeable) { + try { + closeable.close(); + } catch (Exception e) { + throw new IllegalStateException(e); + } } }`); content.indent(clBody => {