This looks like a bug
in com.gemstone.gemfire.cache.operations.KeyValueOperationContext.getValue().
This method should return to deserialized value for the operation. The
javadocs don't actually say this but I think that was the idea. If you
wanted to serialized value you could call getSerializedValue().

The problem with the current getValue implementation is that if the context
has a serialized value it just returns it. But the serialized value will
always be a byte[] that contains the serialized bytes.

getValue should only return a byte array if the actual value passed to the
operation was a byte array.
I will fire a jira ticket for this. Thanks for reporting it.

Your workaround looks reasonable.


On Wed, Jul 8, 2015 at 11:08 AM, gtantachuco . <[email protected]>
wrote:

> All,
> I am using a plain-old Java object and Geode PDX to PUT and GET values
> from a client app to a Geode region. Thanks to PDX, I don't have to install
> the class on the Geode cluster.
>
> In my implementation of the AccessControl interface, I receive the
> OperationContext object as part of the pre- and post-authorization
> callbacks. I was expecting to receive a PdxInstance object but instead I am
> receiving a byte[] object.
> In the future, It would be nice to receive a PdxInstance to make the
> process much cleaner. For now I have to do this something like this to get
> my PdxInstance object:
>
> PdxInputStream pdxIs = new PdxInputStream((byte[])
> ((KeyValueOperationContext) context).getValue());
>
>  userData = (PdxInstance) DataSerializer.readObject(pdxIs);
>
> --
> Best regards,
> -Guillermo
>
>

Reply via email to