[ 
https://issues.apache.org/jira/browse/GEODE-7381?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16964234#comment-16964234
 ] 

John Blum edited comment on GEODE-7381 at 2/1/22, 7:29 PM:
-----------------------------------------------------------

Technically, there is no logical reason why the constructor needs to be public 
in the first place.  Java Introspection & Reflection facilities allow all 
members of a class type to be inspected *and* invoked.

Also there is no reason why the constructor needs to be no-arg either.  See 
[GEODE-7382].


was (Author: jblum):
Technically, there is not logical reason why the constructor needs to be public 
in the first place.  Java Introspection & Reflection facilities allow all 
members of a class type to be inspected *and* invoked.

Also there is no reason why the constructor needs to be no-arg either.  See 
[GEODE-7382].

> PDX Serialization throws an Exception with an 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
>            Priority: Major
>
> 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.20.1#820001)

Reply via email to