PutObject. The application keeps its S3 model and configured Cloud Adapter endpoint. The example selects ExecuteAndExplain, so it performs the upload.
Decide whether the request may execute
An ordinary generated AWS SDK client expects an origin service response. It can consume
ExecuteAndExplain because the adapter preserves that native response. Explicit Explain instead returns a diagnostic document and needs explanation-aware handling; do not cast that document to a successful created-resource response or allow the SDK to retry it as a transient parsing failure.
Configure the S3 client
Set the endpoint either process-wide or on this client, as described in the AWS Java SDK guide. Keep origin credentials separate from the target-cloud identity held by the adapter. For one client:AwsCredentialsProvider; do not place an access key in source code or diagnostic output.
Execute one upload and request a report
AwsRequestOverrideConfiguration adds the header before the SDK signs this request:
PutObjectResponse or ETag establishes neither report completeness nor support for multipart or resumable upload.
Capture receipts on success and service errors
Read receipt headers from the SDK’s HTTP response before converting the result into application-specific logging. The same helper works for a response carried by an AWS service exception. This complete class is compiled against the same AWS SDK major version used by the application example:Handle preview mode deliberately
To preview the same request, change only the control value:PutObject. Its response is an explanation document rather than an S3 PutObjectResponse. Use an explanation-aware integration that:
- marks the explained response as non-retryable;
- preserves the report ID and document;
- does not treat the absence of an S3 ETag as a transient provider error;
- reads the report through the authorized report route;
- has the report owner acknowledge the sealed revision only after exporting the evidence others need.
Explain through a response-unaware generated SDK or invent a response wrapper. Use tensor9 explain to inspect the directed profile while you coordinate an approved request-level integration.
Keep the control signed and singular
Request override configuration is applied before SigV4 signing. Middleware that mutates the final HTTP request afterward can invalidate the signature or leave the Explain control unsigned. Inspect the final request construction if the request is refused:- add exactly one
x-t9-explainfield; - do not combine a default interceptor and a request override that append two fields;
- use the exact case-sensitive JSON enum values;
- keep the header ASCII and under 4096 bytes;
- ensure the signing identity covers
x-t9-explain.
Explain documents from entering a normal service retry loop.
Retrieve without replaying
Once you havex-t9-explain-id, read that report. Do not repeat PutObject to “get the explanation again.” A signed report GET returns the current revision in Human, Agent or JSON format. For an asynchronous origin operation with a declared status read, an explanation-aware client can poll the original status operation with:
Assign acknowledgment ownership
The authenticated principal recorded as the report owner is the principal that can read and acknowledge it through the HTTP report routes. Acknowledging its sealed revision consumes that report. Decide responsibility before the request:- the application can export a sanitized bundle and leave acknowledgment to the component acting as the report owner;
- an automated test that owns the report can acknowledge after its assertions and evidence export;
- people or systems that do not hold the owner identity receive only the sanitized evidence shared through an approved channel, not direct report-route access.
Consumed.