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 always
corresponds to the schema at API version of its creation time, available at
Event.getApiVersion()
, while the model classes correspond to schemas at a specific
version pinned to this library Stripe.API_VERSION
. Thus, only data object with same
API versions is guaranteed to deserialize safely.
In practice, each Stripe.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.)
Upon seeing deserialization failure from retrieving events or during receiving webhook events,
consider defining your own custom EventDataObjectDeserializer.CompatibilityTransformer
to transform the raw JSON to
one with schema compatible with the current model classes. (Events in failed webhooks can be
retrieved again from the event API.)
An example of event data object deserialization is:
Event event = Event.retrieve("evt_123"); EventDataObjectDeserializer deserializer = event.getDataObjectDeserializer(); StripeObject stripeObject; if (deserializer.deserialize()) { stripeObject = deserializer.getObject(); } else { try { stripeObject = deserializer.deserializeUnsafe(); } catch (EventDataObjectDeserializationException e) { EventDataObjectDeserializer.CompatibilityTransformer transformer = myCustomerTransformer(); stripeObject = deserializer.deserializeUnsafeWith(transformer); } }
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) |
boolean |
deserialize()
Safe deserialize raw JSON into
StripeObject . |
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) |
StripeObject |
getObject()
Gets 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 StripeObject getObject()
EventData.getObject()
.
When non-null, 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
.public java.lang.String getRawJson()
EventDataObjectDeserializationException.getRawJson()
()} upon deserialization
failure.public boolean deserialize()
StripeObject
. This operation mutates the state, and the
successful result can be accessed via getObject()
.
Matching Event.getApiVersion()
and Stripe.API_VERSION
is necessary condition
to guarantee safe deserialization.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