Eventing Client
The Eventing client manages event subscriptions — configure real-time notifications for fulfillment operations delivered to a webhook, Azure Service Bus, or Google Cloud Pub/Sub.
Basic Usage
import de.joesst.dev.fulfillmenttools.id.SubscriptionId;
import de.joesst.dev.fulfillmenttools.eventing.Subscription;
import de.joesst.dev.fulfillmenttools.NotFoundException;
import de.joesst.dev.fulfillmenttools.FulfillmenttoolsException;
try {
Subscription subscription = client.eventing().get(
SubscriptionId.builder().value("sub-001").build()
);
System.out.println("Name: " + subscription.name());
System.out.println("Event: " + subscription.event());
System.out.println("Created: " + subscription.created());
} catch (NotFoundException e) {
System.out.println("Subscription not found");
} catch (FulfillmenttoolsException e) {
System.out.println("Request failed: " + e.getMessage());
}Listing Subscriptions
import de.joesst.dev.fulfillmenttools.model.Page;
import de.joesst.dev.fulfillmenttools.eventing.Subscription;
import de.joesst.dev.fulfillmenttools.eventing.SubscriptionListRequest;
Page<Subscription> page = client.eventing().list(
SubscriptionListRequest.builder()
.size(50)
.build()
);
for (Subscription subscription : page.items()) {
System.out.println(subscription.id().value() + " — " + subscription.event());
}Iterate through all subscriptions automatically:
import de.joesst.dev.fulfillmenttools.eventing.Subscription;
import de.joesst.dev.fulfillmenttools.eventing.SubscriptionListRequest;
Iterable<Subscription> allSubscriptions = client.eventing().listAll(
SubscriptionListRequest.builder()
.size(100)
.build()
);
for (Subscription subscription : allSubscriptions) {
System.out.println(subscription.id().value() + " — " + subscription.name());
}Creating a Subscription
name and event are required. Use target with a WebhookTarget to deliver events to an HTTP endpoint:
import de.joesst.dev.fulfillmenttools.eventing.Subscription;
import de.joesst.dev.fulfillmenttools.eventing.CreateSubscriptionRequest;
import de.joesst.dev.fulfillmenttools.eventing.WebhookTarget;
import de.joesst.dev.fulfillmenttools.FulfillmenttoolsException;
try {
Subscription subscription = client.eventing().create(
CreateSubscriptionRequest.builder()
.name("order-hook")
.event("ORDER_CREATED")
.target(
WebhookTarget.builder()
.type("WEBHOOK")
.callbackUrl("https://example.com/webhook")
.build()
)
.build()
);
System.out.println("Created subscription: " + subscription.id().value());
} catch (FulfillmenttoolsException e) {
System.out.println("Creation failed: " + e.getMessage());
}Azure Service Bus target
import de.joesst.dev.fulfillmenttools.eventing.Subscription;
import de.joesst.dev.fulfillmenttools.eventing.CreateSubscriptionRequest;
import de.joesst.dev.fulfillmenttools.eventing.AzureServiceBusTarget;
Subscription subscription = client.eventing().create(
CreateSubscriptionRequest.builder()
.name("order-service-bus")
.event("ORDER_CREATED")
.target(
AzureServiceBusTarget.builder()
.type("MICROSOFT_AZURE_SERVICE_BUS")
.tenantId("my-tenant-id")
.clientId("my-client-id")
.clientSecret("my-client-secret")
.namespace("my-namespace")
.queueOrTopicName("my-queue")
.build()
)
.build()
);Google Cloud Pub/Sub target
import de.joesst.dev.fulfillmenttools.eventing.Subscription;
import de.joesst.dev.fulfillmenttools.eventing.CreateSubscriptionRequest;
import de.joesst.dev.fulfillmenttools.eventing.GoogleCloudPubSubTarget;
Subscription subscription = client.eventing().create(
CreateSubscriptionRequest.builder()
.name("order-pubsub")
.event("ORDER_CREATED")
.target(
GoogleCloudPubSubTarget.builder()
.type("GOOGLE_CLOUD_PUB_SUB")
.projectId("my-gcp-project")
.topicId("my-topic")
.build()
)
.build()
);Updating a Subscription
import de.joesst.dev.fulfillmenttools.id.SubscriptionId;
import de.joesst.dev.fulfillmenttools.eventing.Subscription;
import de.joesst.dev.fulfillmenttools.eventing.UpdateSubscriptionRequest;
Subscription updated = client.eventing().update(
SubscriptionId.builder().value("sub-001").build(),
UpdateSubscriptionRequest.builder()
.callbackUrl("https://example.com/webhook-v2")
.build()
);
System.out.println("Updated callback URL: " + updated.callbackUrl());Deleting a Subscription
import de.joesst.dev.fulfillmenttools.id.SubscriptionId;
client.eventing().delete(
SubscriptionId.builder().value("sub-001").build()
);Async Usage
All methods have async variants returning CompletableFuture:
import de.joesst.dev.fulfillmenttools.id.SubscriptionId;
import de.joesst.dev.fulfillmenttools.eventing.Subscription;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
CompletableFuture<Subscription> future = client.eventing().getAsync(
SubscriptionId.builder().value("sub-001").build()
);
future.whenComplete((subscription, ex) -> {
if (ex != null) {
Throwable cause = ex instanceof CompletionException && ex.getCause() != null
? ex.getCause() : ex;
System.out.println("Error: " + cause.getMessage());
} else {
System.out.println("Name: " + subscription.name());
System.out.println("Event: " + subscription.event());
}
});API Reference
get(SubscriptionId)
Get a subscription by ID.
Parameters:
subscriptionId: SubscriptionId— The subscription identifier
Returns: Subscription
Throws: NotFoundException (404), FulfillmenttoolsException if the request fails
getAsync(SubscriptionId)
Get a subscription by ID asynchronously.
Parameters:
subscriptionId: SubscriptionId— The subscription identifier
Returns: CompletableFuture<Subscription>
list(SubscriptionListRequest)
List subscriptions with pagination.
Parameters:
request: SubscriptionListRequest— List request withsizeandstartAfterIdcursor
Returns: Page<Subscription>
Throws: FulfillmenttoolsException if the request fails
listAsync(SubscriptionListRequest)
List subscriptions asynchronously.
Parameters:
request: SubscriptionListRequest— List request
Returns: CompletableFuture<Page<Subscription>>
listAll(SubscriptionListRequest)
List all subscriptions, automatically iterating through pages.
Parameters:
request: SubscriptionListRequest— List request
Returns: Iterable<Subscription>
create(CreateSubscriptionRequest)
Create a new subscription. name and event are required.
Parameters:
request: CreateSubscriptionRequest— Creation request
Returns: Subscription
Throws: FulfillmenttoolsException if the request fails
createAsync(CreateSubscriptionRequest)
Create a subscription asynchronously.
Parameters:
request: CreateSubscriptionRequest— Creation request
Returns: CompletableFuture<Subscription>
update(SubscriptionId, UpdateSubscriptionRequest)
Update an existing subscription. Updatable fields: callbackUrl, status.
Parameters:
subscriptionId: SubscriptionId— The subscription identifierrequest: UpdateSubscriptionRequest— Update request
Returns: Subscription
Throws: FulfillmenttoolsException if the request fails
updateAsync(SubscriptionId, UpdateSubscriptionRequest)
Update a subscription asynchronously.
Parameters:
subscriptionId: SubscriptionId— The subscription identifierrequest: UpdateSubscriptionRequest— Update request
Returns: CompletableFuture<Subscription>
delete(SubscriptionId)
Delete a subscription.
Parameters:
subscriptionId: SubscriptionId— The subscription identifier
Returns: void
Throws: FulfillmenttoolsException if the request fails
deleteAsync(SubscriptionId)
Delete a subscription asynchronously.
Parameters:
subscriptionId: SubscriptionId— The subscription identifier
Returns: CompletableFuture<Void>