John Blum created GEODE-7381:
--------------------------------

             Summary: PDX Serialization throws an Exception with an incorrect 
incorrect error message when a domain type does not have a public, no-arg 
Constructor
                 Key: GEODE-7381
                 URL: https://issues.apache.org/jira/browse/GEODE-7381
             Project: Geode
          Issue Type: Bug
            Reporter: John Blum


Apache Geode throws an incorrect {{PdxSerializationException}} with message 
"_Could not deserialize pdx because the pdx serializer's fromData returned 
false for a pdx of class com.springone.austin.vursys.battle.model.Vote_", 
instead.

The Stack Trace is:

{code:java}
Caused by: org.apache.geode.pdx.PdxSerializationException: Could not 
deserialize pdx because the pdx serializer's fromData returned false for a pdx 
of class com.springone.austin.vursys.battle.model.Vote
        at 
org.apache.geode.pdx.internal.PdxReaderImpl.basicGetObject(PdxReaderImpl.java:823)
        at 
org.apache.geode.pdx.internal.PdxReaderImpl.getObject(PdxReaderImpl.java:753)
        at 
org.apache.geode.internal.InternalDataSerializer.readPdxSerializable(InternalDataSerializer.java:3153)
        at 
org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:2916)
        at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2978)
        at 
org.apache.geode.internal.util.BlobHelper.deserializeBlob(BlobHelper.java:90)
        at 
org.apache.geode.internal.cache.EntryEventImpl.deserialize(EntryEventImpl.java:2013)
        at 
org.apache.geode.internal.cache.EntryEventImpl.deserialize(EntryEventImpl.java:2006)
        at 
org.apache.geode.internal.cache.VMCachedDeserializable.getDeserializedValue(VMCachedDeserializable.java:132)
        at 
org.apache.geode.internal.cache.LocalRegion.getDeserialized(LocalRegion.java:1336)
        at 
org.apache.geode.internal.cache.NonTXEntry.getValue(NonTXEntry.java:91)
        at 
org.apache.geode.internal.cache.LocalDataSet$LocalEntriesSet$LocalEntriesSetIterator.moveNext(LocalDataSet.java:781)
        at 
org.apache.geode.internal.cache.LocalDataSet$LocalEntriesSet$LocalEntriesSetIterator.<init>(LocalDataSet.java:735)
        at 
org.apache.geode.internal.cache.LocalDataSet$LocalEntriesSet.iterator(LocalDataSet.java:722)
        at 
org.apache.geode.cache.query.internal.ResultsCollectionWrapper.iterator(ResultsCollectionWrapper.java:199)
        at 
org.apache.geode.cache.query.internal.QRegion.iterator(QRegion.java:282)
        at 
org.apache.geode.cache.query.internal.CompiledSelect.doNestedIterations(CompiledSelect.java:834)
        at 
org.apache.geode.cache.query.internal.CompiledSelect.doIterationEvaluate(CompiledSelect.java:701)
        at 
org.apache.geode.cache.query.internal.CompiledSelect.evaluate(CompiledSelect.java:545)
        at 
org.apache.geode.cache.query.internal.CompiledGroupBySelect.evaluate(CompiledGroupBySelect.java:157)
        at 
org.apache.geode.cache.query.internal.CompiledGroupBySelect.evaluate(CompiledGroupBySelect.java:42)
        at 
org.apache.geode.cache.query.internal.DefaultQuery.executeUsingContext(DefaultQuery.java:430)
        at 
org.apache.geode.internal.cache.PRQueryProcessor.executeQueryOnBuckets(PRQueryProcessor.java:246)
        at 
org.apache.geode.internal.cache.PRQueryProcessor.executeSequentially(PRQueryProcessor.java:204)
        at 
org.apache.geode.internal.cache.PRQueryProcessor.executeQuery(PRQueryProcessor.java:122)
        at 
org.apache.geode.internal.cache.PartitionedRegionQueryEvaluator.executeQueryOnLocalNode(PartitionedRegionQueryEvaluator.java:962)
        at 
org.apache.geode.internal.cache.PartitionedRegionQueryEvaluator.executeQueryOnRemoteAndLocalNodes(PartitionedRegionQueryEvaluator.java:378)
        at 
org.apache.geode.internal.cache.PartitionedRegionQueryEvaluator.queryBuckets(PartitionedRegionQueryEvaluator.java:495)
        at 
org.apache.geode.internal.cache.PartitionedRegion.doExecuteQuery(PartitionedRegion.java:1963)
        at 
org.apache.geode.internal.cache.PartitionedRegion.executeQuery(PartitionedRegion.java:1890)
        at 
org.apache.geode.cache.query.internal.DefaultQuery.execute(DefaultQuery.java:831)
        at 
com.springone.austin.vursys.battle.geode.function.impl.FindWinningCharacter.execute(FindWinningCharacter.java:60)
        at 
org.apache.geode.internal.cache.execute.AbstractExecution.executeFunctionLocally(AbstractExecution.java:335)
        at 
org.apache.geode.internal.cache.execute.AbstractExecution$1.run(AbstractExecution.java:275)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at 
org.apache.geode.distributed.internal.ClusterDistributionManager.runUntilShutdown(ClusterDistributionManager.java:960)
        at 
org.apache.geode.distributed.internal.ClusterDistributionManager.doFunctionExecutionThread(ClusterDistributionManager.java:814)
        at 
org.apache.geode.internal.logging.LoggingThreadFactory.lambda$newThread$0(LoggingThreadFactory.java:121)
        at java.lang.Thread.run(Thread.java:748)
{code}

The Apache Geode code did *not* properly consider that there was simply no 
public, no-arg constructor on the application domain type (e.g. {{Vote}})!  Of 
course, after adding a public, no-arg constructor to the application domain 
type, everything works as expected!

The error and message is very misleading!



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to