Skip to content

Commit fae4143

Browse files
committed
✨ Added support for cookies to AdaptiveFormsService
When rendering an Adaptive Form with data, the client makes two calls to AEM. In order for load-balancing to work, cookies provided in the response to the first call need to be transferred to and sent back in the second call. The code now does this.
1 parent 5fc722f commit fae4143

2 files changed

Lines changed: 15 additions & 5 deletions

File tree

rest-services/client/src/main/java/com/_4point/aem/docservices/rest_services/client/af/AdaptiveFormsService.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import com._4point.aem.docservices.rest_services.client.RestClient;
1313
import com._4point.aem.docservices.rest_services.client.RestClient.ContentType;
14+
import com._4point.aem.docservices.rest_services.client.RestClient.Cookies;
1415
import com._4point.aem.docservices.rest_services.client.RestClient.GetRequest;
1516
import com._4point.aem.docservices.rest_services.client.RestClient.MultipartPayload;
1617
import com._4point.aem.docservices.rest_services.client.RestClient.Response;
@@ -106,7 +107,9 @@ public Document renderAdaptiveForm(PathOrUrl template, Document data) throws Ada
106107
builder = builder.queryParam("wcmmode", "disabled");
107108

108109
if (!data.isEmpty()) {
109-
builder = builder.queryParam(DATA_REF_PARAM, generateDataRefParam(postDataToDataCacheService(data)));
110+
DataCacheResponse response = postDataToDataCacheService(data);
111+
builder = builder.queryParam(DATA_REF_PARAM, generateDataRefParam(response.uuid()))
112+
.addCookies(response.cookies());
110113
}
111114

112115
GetRequest getRequest = builder.build();
@@ -128,12 +131,14 @@ private String generateDataRefParam(String uuid) {
128131
return "service://FFPrefillService/" + uuid;
129132
}
130133

131-
private String postDataToDataCacheService(Document data) throws AdaptiveFormsServiceException {
134+
private record DataCacheResponse(String uuid, Cookies cookies) {}
135+
136+
private DataCacheResponse postDataToDataCacheService(Document data) throws AdaptiveFormsServiceException {
132137
try (MultipartPayload payload = dataCacheRestClient.multipartPayloadBuilder()
133138
.add(DATA_SERVICE_DATA_PARAM, data, getContentType(data))
134139
.build()) {
135140
return payload.postToServer(ContentType.TEXT_PLAIN)
136-
.map(uncheck(AdaptiveFormsService::responseToString))
141+
.map(uncheck(AdaptiveFormsService::mapResponse))
137142
.orElseThrow();
138143

139144
} catch (IOException e) {
@@ -152,8 +157,8 @@ private static ContentType getContentType(Document data) {
152157
}
153158
}
154159

155-
private static String responseToString(Response result) throws IOException {
156-
return new String(result.data().readAllBytes());
160+
private static DataCacheResponse mapResponse(Response result) throws IOException {
161+
return new DataCacheResponse(new String(result.data().readAllBytes()), result.getCookies());
157162
}
158163

159164
/**

rest-services/client/src/test/java/com/_4point/aem/docservices/rest_services/client/af/AdaptiveFormsServiceTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
import com._4point.aem.docservices.rest_services.client.RestClient;
3030
import com._4point.aem.docservices.rest_services.client.RestClient.ContentType;
31+
import com._4point.aem.docservices.rest_services.client.RestClient.Cookies;
3132
import com._4point.aem.docservices.rest_services.client.RestClient.GetRequest;
3233
import com._4point.aem.docservices.rest_services.client.RestClient.MultipartPayload;
3334
import com._4point.aem.docservices.rest_services.client.RestClient.Response;
@@ -62,6 +63,7 @@ class AdaptiveFormsServiceTest {
6263
@Mock(stubOnly = true) GetRequest.Builder mockGetRequestBuilder;
6364
@Mock(stubOnly = true) Response mockPostResponse;
6465
@Mock(stubOnly = true) Response mockGetResponse;
66+
@Mock(stubOnly = true) Cookies mockCookies;
6567

6668
@Captor ArgumentCaptor<AemConfig> aemConfig;
6769
@Captor ArgumentCaptor<String> servicePath;
@@ -172,6 +174,7 @@ void testRenderAdaptiveForm(HappyPath scenario) throws Exception {
172174
setupDataServiceMocks(setupMockPostResponse(DUMMY_GUID.getBytes(), ContentType.TEXT_PLAIN));
173175
when(mockPayloadBuilder.add(eq("Data"), Mockito.any(Document.class), eq(scenario.contentType))).thenReturn(mockPayloadBuilder);
174176
when(mockGetRequestBuilder.queryParam(eq("dataRef"), eq("service://FFPrefillService/" + DUMMY_GUID))).thenReturn(mockGetRequestBuilder);
177+
when(mockGetRequestBuilder.addCookies(Mockito.any(Cookies.class))).thenReturn(mockGetRequestBuilder);
175178
}
176179

177180
AdaptiveFormsService underTest = createAdapter(mockClientFactory);
@@ -210,6 +213,7 @@ private void setupFilterMocks(byte[] responseData) throws RestClientException {
210213
setupDataServiceMocks(setupMockPostResponse(DUMMY_GUID.getBytes(), ContentType.TEXT_PLAIN));
211214
when(mockPayloadBuilder.add(eq("Data"), Mockito.any(Document.class), Mockito.any(ContentType.class))).thenReturn(mockPayloadBuilder);
212215
when(mockGetRequestBuilder.queryParam(eq("dataRef"), eq("service://FFPrefillService/" + DUMMY_GUID))).thenReturn(mockGetRequestBuilder);
216+
when(mockGetRequestBuilder.addCookies(Mockito.any(Cookies.class))).thenReturn(mockGetRequestBuilder);
213217
}
214218

215219
@Test
@@ -258,6 +262,7 @@ private void setupAfServiceMocks(String form, Optional<Response> mockedResponse)
258262
private Optional<Response> setupMockPostResponse(byte[] responseData, ContentType expectedContentType) {
259263
// when(mockPostResponse.contentType()).thenReturn(expectedContentType); // ContentType is not queries.
260264
when(mockPostResponse.data()).thenReturn(new ByteArrayInputStream(responseData));
265+
when(mockPostResponse.getCookies()).thenReturn(mockCookies);
261266
return Optional.of(mockPostResponse);
262267
}
263268

0 commit comments

Comments
 (0)