@@ -111,44 +111,42 @@ public HttpResponseMessage createCheckStatusResponse(HttpRequestMessage<?> reque
111111 // request headers into consideration and generate the base URL accordingly.
112112 // More info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Forwarded.
113113 // One potential workaround is to set ASPNETCORE_FORWARDEDHEADERS_ENABLED to true.
114+
115+ // Construct the response as an HTTP 202 with a JSON object payload
116+ return request .createResponseBuilder (HttpStatus .ACCEPTED )
117+ .header ("Location" , this .getInstanceStatusURL (request , instanceId ) + "?" + this .requiredQueryStringParameters )
118+ .header ("Content-Type" , "application/json" )
119+ .body (this .getClientResponseLinks (request , instanceId ))
120+ .build ();
121+ }
122+
123+ /**
124+ * Creates a {@link HttpManagementPayload} that is useful for checking the status of the specified instance.
125+ *
126+ * @param request The HTTP request that triggered the current orchestration instance.
127+ * @param instanceId The ID of the orchestration instance to check.
128+ * @return The {@link HttpManagementPayload} with URLs that can be used to query the status of the orchestration,
129+ * raise events to the orchestration, or terminate the orchestration.
130+ */
131+ public HttpManagementPayload createHttpManagementPayload (HttpRequestMessage <?> request , String instanceId ) {
132+ return this .getClientResponseLinks (request , instanceId );
133+ }
134+
135+ private HttpManagementPayload getClientResponseLinks (HttpRequestMessage <?> request , String instanceId ) {
136+ String instanceStatusURL = this .getInstanceStatusURL (request , instanceId );
137+ return new HttpManagementPayload (instanceId , instanceStatusURL , this .requiredQueryStringParameters );
138+ }
139+
140+ private String getInstanceStatusURL (HttpRequestMessage <?> request , String instanceId ) {
114141 String baseUrl = request .getUri ().getScheme () + "://" + request .getUri ().getAuthority ();
115142 String encodedInstanceId ;
143+
116144 try {
117145 encodedInstanceId = URLEncoder .encode (instanceId , StandardCharsets .UTF_8 .toString ());
118146 } catch (UnsupportedEncodingException ex ) {
119147 throw new IllegalArgumentException ("Failed to encode the instance ID: " + instanceId , ex );
120148 }
121149
122- String instanceStatusURL = baseUrl + "/runtime/webhooks/durabletask/instances/" + encodedInstanceId ;
123-
124- // Construct the response as an HTTP 202 with a JSON object payload
125- return request .createResponseBuilder (HttpStatus .ACCEPTED )
126- .header ("Location" , instanceStatusURL + "?" + this .requiredQueryStringParameters )
127- .header ("Content-Type" , "application/json" )
128- .body (new HttpCreateCheckStatusResponse (
129- instanceId ,
130- instanceStatusURL ,
131- this .requiredQueryStringParameters ))
132- .build ();
133- }
134-
135- private static class HttpCreateCheckStatusResponse {
136- // These fields are serialized to JSON
137- public final String id ;
138- public final String purgeHistoryDeleteUri ;
139- public final String sendEventPostUri ;
140- public final String statusQueryGetUri ;
141- public final String terminatePostUri ;
142-
143- public HttpCreateCheckStatusResponse (
144- String instanceId ,
145- String instanceStatusURL ,
146- String requiredQueryStringParameters ) {
147- this .id = instanceId ;
148- this .purgeHistoryDeleteUri = instanceStatusURL + "?" + requiredQueryStringParameters ;
149- this .sendEventPostUri = instanceStatusURL + "/raiseEvent/{eventName}?" + requiredQueryStringParameters ;
150- this .statusQueryGetUri = instanceStatusURL + "?" + requiredQueryStringParameters ;
151- this .terminatePostUri = instanceStatusURL + "/terminate?reason={text}&" + requiredQueryStringParameters ;
152- }
150+ return baseUrl + "/runtime/webhooks/durabletask/instances/" + encodedInstanceId ;
153151 }
154152}
0 commit comments