From 4f82a63ab980d60e3eee826920e7067b93e21a7e Mon Sep 17 00:00:00 2001 From: Alberto Date: Mon, 3 Feb 2025 16:01:20 -0500 Subject: [PATCH] fix(java): Add accept header if endpoint has errors --- .../endpoint/AbstractEndpointWriter.java | 20 +++++++++++++++++++ .../endpoint/NoRequestEndpointWriter.java | 4 +--- .../endpoint/OnlyRequestEndpointWriter.java | 9 +++------ .../WrappedRequestEndpointWriter.java | 10 +++++----- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/generators/java/sdk/src/main/java/com/fern/java/client/generators/endpoint/AbstractEndpointWriter.java b/generators/java/sdk/src/main/java/com/fern/java/client/generators/endpoint/AbstractEndpointWriter.java index 3fe03e43316..7278d312abf 100644 --- a/generators/java/sdk/src/main/java/com/fern/java/client/generators/endpoint/AbstractEndpointWriter.java +++ b/generators/java/sdk/src/main/java/com/fern/java/client/generators/endpoint/AbstractEndpointWriter.java @@ -1689,6 +1689,26 @@ public Boolean _visitUnknown(Object unknownType) { } } + public static Optional maybeAcceptsHeader(HttpEndpoint httpEndpoint, boolean withSemiColon) { + String ending = withSemiColon ? ";\n" : "\n"; + + Set contentTypes = new HashSet<>(); + + // TODO: We'll need to get error content types from the IR once they're available. + if (!httpEndpoint.getErrors().get().isEmpty()) { + contentTypes.add(APPLICATION_JSON_HEADER); + } + + responseContentType(httpEndpoint.getResponse()).ifPresent(contentTypes::add); + + if (contentTypes.isEmpty()) { + return Optional.empty(); + } + + String headerValue = String.join("; ", contentTypes); + return Optional.of(CodeBlock.of(".addHeader($S, $S)" + ending, ACCEPT_HEADER, headerValue)); + } + public static Optional responseContentType(Optional response) { if (response.isEmpty()) { return Optional.empty(); diff --git a/generators/java/sdk/src/main/java/com/fern/java/client/generators/endpoint/NoRequestEndpointWriter.java b/generators/java/sdk/src/main/java/com/fern/java/client/generators/endpoint/NoRequestEndpointWriter.java index bf067598322..4caee393a5f 100644 --- a/generators/java/sdk/src/main/java/com/fern/java/client/generators/endpoint/NoRequestEndpointWriter.java +++ b/generators/java/sdk/src/main/java/com/fern/java/client/generators/endpoint/NoRequestEndpointWriter.java @@ -111,9 +111,7 @@ public CodeBlock getInitializeRequestCodeBlock( if (sendContentType) { builder.add(".addHeader($S, $S)\n", AbstractEndpointWriter.CONTENT_TYPE_HEADER, contentType); } - AbstractEndpointWriter.responseContentType(httpEndpoint.getResponse()) - .ifPresent(responseContentType -> - builder.add(".addHeader($S, $S)\n", AbstractEndpointWriter.ACCEPT_HEADER, contentType)); + AbstractEndpointWriter.maybeAcceptsHeader(httpEndpoint, false).ifPresent(builder::add); return builder.add(".build();\n").unindent().build(); } } diff --git a/generators/java/sdk/src/main/java/com/fern/java/client/generators/endpoint/OnlyRequestEndpointWriter.java b/generators/java/sdk/src/main/java/com/fern/java/client/generators/endpoint/OnlyRequestEndpointWriter.java index 9046390aad0..5c561e79432 100644 --- a/generators/java/sdk/src/main/java/com/fern/java/client/generators/endpoint/OnlyRequestEndpointWriter.java +++ b/generators/java/sdk/src/main/java/com/fern/java/client/generators/endpoint/OnlyRequestEndpointWriter.java @@ -194,9 +194,8 @@ public CodeBlock getInitializeRequestCodeBlock( @Override public Void visitTypeReference(HttpRequestBodyReference typeReference) { builder.add(".addHeader($S, $S)\n", AbstractEndpointWriter.CONTENT_TYPE_HEADER, contentType); - AbstractEndpointWriter.responseContentType(httpEndpoint.getResponse()) - .ifPresent(responseContentType -> builder.add( - ".addHeader($S, $S)\n", AbstractEndpointWriter.ACCEPT_HEADER, contentType)); + AbstractEndpointWriter.maybeAcceptsHeader(httpEndpoint, false) + .ifPresent(builder::add); return null; } @@ -230,9 +229,7 @@ public Void _visitUnknown(Object unknownType) { ClientOptionsGenerator.HEADERS_METHOD_NAME, REQUEST_OPTIONS_PARAMETER_NAME); builder.add(".addHeader($S, $S)\n", AbstractEndpointWriter.CONTENT_TYPE_HEADER, contentType); - AbstractEndpointWriter.responseContentType(httpEndpoint.getResponse()) - .ifPresent(responseContentType -> - builder.add(".addHeader($S, $S)\n", AbstractEndpointWriter.ACCEPT_HEADER, contentType)); + AbstractEndpointWriter.maybeAcceptsHeader(httpEndpoint, false).ifPresent(builder::add); return builder.add(".build();\n").unindent().build(); } } diff --git a/generators/java/sdk/src/main/java/com/fern/java/client/generators/endpoint/WrappedRequestEndpointWriter.java b/generators/java/sdk/src/main/java/com/fern/java/client/generators/endpoint/WrappedRequestEndpointWriter.java index c2f9e2dff0e..02c877cd412 100644 --- a/generators/java/sdk/src/main/java/com/fern/java/client/generators/endpoint/WrappedRequestEndpointWriter.java +++ b/generators/java/sdk/src/main/java/com/fern/java/client/generators/endpoint/WrappedRequestEndpointWriter.java @@ -190,9 +190,9 @@ public CodeBlock getInitializeRequestCodeBlock( requestBodyCodeBlock.add( ".method($S, $L)\n", httpEndpoint.getMethod().toString(), getOkhttpRequestBodyName()); } - Optional acceptContentType = AbstractEndpointWriter.responseContentType(httpEndpoint.getResponse()); + Optional maybeAcceptsHeader = AbstractEndpointWriter.maybeAcceptsHeader(httpEndpoint, true); if (sendContentType && !isFileUpload) { - if (acceptContentType.isPresent()) { + if (maybeAcceptsHeader.isPresent()) { requestBodyCodeBlock .add( @@ -202,7 +202,7 @@ public CodeBlock getInitializeRequestCodeBlock( ClientOptionsGenerator.HEADERS_METHOD_NAME, AbstractEndpointWriter.REQUEST_OPTIONS_PARAMETER_NAME) .add(".addHeader($S, $S)", AbstractEndpointWriter.CONTENT_TYPE_HEADER, contentType) - .add(".addHeader($S, $S);\n", AbstractEndpointWriter.ACCEPT_HEADER, contentType); + .add(maybeAcceptsHeader.get()); } else { requestBodyCodeBlock @@ -215,7 +215,7 @@ public CodeBlock getInitializeRequestCodeBlock( .add(".addHeader($S, $S);\n", AbstractEndpointWriter.CONTENT_TYPE_HEADER, contentType); } } else { - if (acceptContentType.isPresent()) { + if (maybeAcceptsHeader.isPresent()) { requestBodyCodeBlock .add( ".headers($T.of($L.$L($L)));\n", @@ -224,7 +224,7 @@ public CodeBlock getInitializeRequestCodeBlock( ClientOptionsGenerator.HEADERS_METHOD_NAME, AbstractEndpointWriter.REQUEST_OPTIONS_PARAMETER_NAME) .add(".addHeader($S, $S)\n", AbstractEndpointWriter.CONTENT_TYPE_HEADER, contentType) - .add(".addHeader($S, $S);\n", AbstractEndpointWriter.ACCEPT_HEADER, contentType); + .add(maybeAcceptsHeader.get()); } else { requestBodyCodeBlock.add( ".headers($T.of($L.$L($L)));\n",