[ https://issues.apache.org/jira/browse/GEODE-7381?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16964234#comment-16964234 ]
John Blum commented on GEODE-7381: ---------------------------------- 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 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.3.4#803005)