public class EventDataObjectDeserializer
extends java.lang.Object
StripeObject
and handle failure due to schema
incompatibility between the data object and the model classes. Event data object by default
corresponds to the schema at API version tied to your Stripe account at the event creation time.
This event version is in Event.getApiVersion()
. The model classes for deserialization,
however, corresponds to a specific version pinned to this library Stripe.API_VERSION
.
Thus, only data object with same API versions is guaranteed to deserialize safely.
To avoid this problem of API version mismatch, create a new webhook endpoint `api_versions`
corresponding to Stripe.API_VERSION
. For more information, see API reference
In practice, each API version update only affects specific set of classes, so event data
object for the unaffected classes can still be serialized successfully -- even when the API
versions do not match. (Although it is considered unsafe by the API version comparison.) In that
case, you can use deserializeUnsafe()
Old events from Event.retrieve(String)
or Event.list(Map)
will have immutable
API versions on them, and there is currently no support for rendering it at different API
versions. If you find failure from reading these events, consider defining your own custom EventDataObjectDeserializer.CompatibilityTransformer
to transform the raw JSON to one with schema compatible with this
current model classes.
En event integration from webhook may look like the example below. Assuming that you have the event api version matching this library, you should safely find deserialized object from the deserializer.
Event event = Webhook.constructEvent(payload, sigHeader, secret); EventDataObjectDeserializer dataObjectDeserializer = event.getDataObjectDeserializer(); if (dataObjectDeserializer.getObject().isPresent()) { StripeObject stripeObject = dataObjectDeserializer.getObject().get(); doSomething(stripeObject); } else { throw new IllegalStateException( String.format("Unable to deserialize event data object for %s", event)); }
Modifier and Type | Class and Description |
---|---|
static interface |
EventDataObjectDeserializer.CompatibilityTransformer
Definition of event data object JSON transformation to be compatible to API version of the
library.
|
Modifier and Type | Method and Description |
---|---|
protected boolean |
canEqual(java.lang.Object other) |
StripeObject |
deserializeUnsafe()
Force deserialize raw JSON to
StripeObject . |
StripeObject |
deserializeUnsafeWith(EventDataObjectDeserializer.CompatibilityTransformer transformer)
Deserialize JSON that has been processed by
EventDataObjectDeserializer.CompatibilityTransformer.transform(JsonObject, String, String) into StripeObject . |
boolean |
equals(java.lang.Object o) |
java.util.Optional<StripeObject> |
getObject()
Gets an
Optional of data event object, in favor of the deprecated EventData.getObject() . |
java.lang.String |
getRawJson()
Get raw JSON string for the data object.
|
int |
hashCode() |
public java.util.Optional<StripeObject> getObject()
Optional
of data event object, in favor of the deprecated EventData.getObject()
. When the optional is present, the deserialized StripeObject
preserves high data integrity because of correspondence between schema of the API response and
the model class (the underlying concrete class for abstract StripeObject
) schema. This
is when Event.getApiVersion()
matches Stripe.API_VERSION
. Otherwise, the
optional is empty.Optional
of stripe object when deserialization is safe.public java.lang.String getRawJson()
EventDataObjectDeserializationException.getRawJson()
upon deserialization failure.public StripeObject deserializeUnsafe() throws EventDataObjectDeserializationException
StripeObject
. The deserialized data is not guaranteed to
fully represent the JSON. For example, events of new API version having fields that are not
captured by current model class will be lost. Similarly, events of old API version having
fields that should be translated into the new fields, like field rename, will be lost.
Upon deserialization failure, consider making the JSON compatible to the current model
classes and recover from failure with deserializeUnsafeWith(CompatibilityTransformer)
.
EventDataObjectDeserializationException
- exception that contains the message error and
the raw JSON response of the StripeObject
to be deserialized.public StripeObject deserializeUnsafeWith(EventDataObjectDeserializer.CompatibilityTransformer transformer)
EventDataObjectDeserializer.CompatibilityTransformer.transform(JsonObject, String, String)
into StripeObject
. This
deserialization method should only be used to handle events with schema incompatible to model
class schema of this library. Throws JsonParseException
when the transformed JSON
remains incompatible with the model classes.StripeObject
from user-supplied compatible JSON.public boolean equals(java.lang.Object o)
equals
in class java.lang.Object
protected boolean canEqual(java.lang.Object other)
public int hashCode()
hashCode
in class java.lang.Object