You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bs...@apache.org on 2019/12/09 19:35:05 UTC

[geode] branch feature/GEODE-7536b created (now e7eb5b5)

This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a change to branch feature/GEODE-7536b
in repository https://gitbox.apache.org/repos/asf/geode.git.


      at e7eb5b5  GEODE-7536: Add serialization analysis to geode-gfsh

This branch includes the following new commits:

     new e7eb5b5  GEODE-7536: Add serialization analysis to geode-gfsh

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[geode] 01/01: GEODE-7536: Add serialization analysis to geode-gfsh

Posted by bs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a commit to branch feature/GEODE-7536b
in repository https://gitbox.apache.org/repos/asf/geode.git

commit e7eb5b583970319e49587a0cf583bb3d2d0b88b5
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Mon Dec 9 11:30:24 2019 -0800

    GEODE-7536: Add serialization analysis to geode-gfsh
    
    The new geode-gfsh module left all of its serializables in the
    sanctioned list from geode-core.  This commit adds serialization
    analysis to the new module and removes geode-gfsh serializables from
    sanctioned-geode-core-serializables.txt.
    
    I had to modify the base test class to read the sanctioned list using a
    resource stream instead of a file.  Geode-gfsh, for some reason, has the
    module's JAR file on the path and the test is finding the resource there
    instead of as a regular file.
---
 .../sanctioned-geode-core-serializables.txt        | 112 ---------------------
 .../AnalyzeGfshSerializablesJUnitTest.java         |  31 ++++++
 .../apache/geode/codeAnalysis/excludedClasses.txt  |   2 +
 .../org/apache/geode/codeAnalysis/openBugs.txt     |  18 ++++
 .../codeAnalysis/sanctionedDataSerializables.txt   |   0
 .../internal/GfshDistributedSystemService.java     |  43 ++++++++
 ...e.distributed.internal.DistributedSystemService |  16 +++
 .../sanctioned-geode-gfsh-serializables.txt        | 111 ++++++++++++++++++++
 .../AnalyzeSerializablesJUnitTestBase.java         |  27 +++--
 .../geode/codeAnalysis/CompiledClassUtils.java     |  11 +-
 10 files changed, 244 insertions(+), 127 deletions(-)

diff --git a/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt b/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt
index 80f480f..9497aec 100644
--- a/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt
+++ b/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt
@@ -401,8 +401,6 @@ org/apache/geode/internal/process/signal/SignalType,false,description:java/lang/
 org/apache/geode/internal/security/SecurableCommunicationChannel,false,constant:java/lang/String
 org/apache/geode/internal/sequencelog/GraphType,false
 org/apache/geode/internal/sequencelog/model/GraphID,false,graphName:java/lang/String,type:org/apache/geode/internal/sequencelog/GraphType
-org/apache/geode/internal/serialization/DSFIDNotFoundException,true,130596009484324655,dsfid:int,versionOrdinal:short
-org/apache/geode/internal/serialization/UnsupportedSerializationVersionException,true,3572445857994216007
 org/apache/geode/internal/size/ReflectionObjectSizer,false
 org/apache/geode/internal/size/SizeClassOnceObjectSizer,false
 org/apache/geode/internal/statistics/CounterMonitor$Type,false
@@ -435,10 +433,6 @@ org/apache/geode/management/DependenciesNotFoundException,true,90823049292381598
 org/apache/geode/management/JVMMetrics,false,committedMemory:long,gcCount:long,gcTimeMillis:long,initMemory:long,maxMemory:long,totalThreads:int,usedMemory:long
 org/apache/geode/management/ManagementException,true,879398950879472121
 org/apache/geode/management/OSMetrics,false,arch:java/lang/String,availableProcessors:int,committedVirtualMemorySize:long,freePhysicalMemorySize:long,freeSwapSpaceSize:long,maxFileDescriptorCount:long,name:java/lang/String,openFileDescriptorCount:long,processCpuTime:long,systemLoadAverage:double,totalPhysicalMemorySize:long,totalSwapSpaceSize:long,version:java/lang/String
-org/apache/geode/management/cli/CliFunction,false
-org/apache/geode/management/cli/CommandProcessingException,true,-1398779521639575884,errorData:java/lang/Object,errorType:int
-org/apache/geode/management/cli/CommandServiceException,true,7316102209844678329
-org/apache/geode/management/cli/Result$Status,false,code:int
 org/apache/geode/management/internal/BackupStatusImpl,true,3704172840296221840,backedUpDiskStores:java/util/Map,offlineDiskStores:java/util/Set
 org/apache/geode/management/internal/CacheElementOperation,false
 org/apache/geode/management/internal/ContextAwareSSLRMIClientSocketFactory,true,8159615071011918570
@@ -450,112 +444,6 @@ org/apache/geode/management/internal/beans/FileUploader$RemoteFile,false,filenam
 org/apache/geode/management/internal/beans/QueryDataFunction,true,1
 org/apache/geode/management/internal/beans/QueryDataFunction$LocalQueryFunction,true,1,id:java/lang/String,optimizeForWrite:boolean,regionName:java/lang/String,showMembers:boolean,this$0:org/apache/geode/management/internal/beans/QueryDataFunction
 org/apache/geode/management/internal/beans/stats/StatType,false
-org/apache/geode/management/internal/cli/AbstractCliAroundInterceptor$Response,false,text:java/lang/String
-org/apache/geode/management/internal/cli/CliUtil$DeflaterInflaterData,true,1104813333595216795,data:byte[],dataLength:int
-org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommand$DATASOURCE_TYPE,false,type:java/lang/String
-org/apache/geode/management/internal/cli/commands/ImportClusterConfigurationCommand$Action,false
-org/apache/geode/management/internal/cli/domain/AsyncEventQueueDetails,true,1,batchSize:int,createdWithPausedEventProcessing:boolean,diskStoreName:java/lang/String,id:java/lang/String,listener:java/lang/String,listenerProperties:java/util/Properties,maxQueueMemory:int,pausedEventProcessing:boolean,persistent:boolean
-org/apache/geode/management/internal/cli/domain/DataCommandRequest,false,command:java/lang/String,key:java/lang/String,keyClass:java/lang/String,loadOnCacheMiss:boolean,principal:java/lang/Object,putIfAbsent:boolean,query:java/lang/String,recursive:boolean,regionName:java/lang/String,removeAllKeys:java/lang/String,value:java/lang/String,valueClass:java/lang/String
-org/apache/geode/management/internal/cli/domain/DataCommandResult,true,2601227194108110936,command:java/lang/String,error:java/lang/Throwable,errorString:java/lang/String,getResult:java/lang/Object,hasResultForAggregation:boolean,infoString:java/lang/String,inputKey:java/lang/Object,inputQuery:java/lang/Object,inputValue:java/lang/Object,keyClass:java/lang/String,limit:int,locateEntryLocations:java/util/List,locateEntryResult:org/apache/geode/management/internal/cli/domain/DataCommandRes [...]
-org/apache/geode/management/internal/cli/domain/DataCommandResult$KeyInfo,false,host:java/lang/String,locations:java/util/ArrayList,memberId:java/lang/String,memberName:java/lang/String,pid:int
-org/apache/geode/management/internal/cli/domain/DataCommandResult$SelectResultRow,true,1,columnValues:java/util/Map,type:int
-org/apache/geode/management/internal/cli/domain/DiskStoreDetails,false,allowForceCompaction:java/lang/Boolean,asyncEventQueueDetailsSet:java/util/Set,autoCompact:java/lang/Boolean,cacheServerDetailsSet:java/util/Set,compactionThreshold:java/lang/Integer,diskDirDetailsSet:java/util/Set,diskUsageCriticalPercentage:java/lang/Float,diskUsageWarningPercentage:java/lang/Float,gatewayDetailsSet:java/util/Set,id:java/util/UUID,maxOplogSize:java/lang/Long,memberId:java/lang/String,memberName:java [...]
-org/apache/geode/management/internal/cli/domain/DiskStoreDetails$AsyncEventQueueDetails,false,id:java/lang/String
-org/apache/geode/management/internal/cli/domain/DiskStoreDetails$CacheServerDetails,false,bindAddress:java/lang/String,hostName:java/lang/String,port:int
-org/apache/geode/management/internal/cli/domain/DiskStoreDetails$DiskDirDetails,false,absolutePath:java/lang/String,size:int
-org/apache/geode/management/internal/cli/domain/DiskStoreDetails$GatewayDetails,false,id:java/lang/String,persistent:boolean
-org/apache/geode/management/internal/cli/domain/DiskStoreDetails$RegionDetails,false,fullPath:java/lang/String,name:java/lang/String,overflowToDisk:boolean,persistent:boolean
-org/apache/geode/management/internal/cli/domain/EvictionAttributesInfo,true,1,evictionAction:java/lang/String,evictionAlgorithm:java/lang/String,evictionMaxValue:int,nonDefaultAttributes:java/util/Map
-org/apache/geode/management/internal/cli/domain/FixedPartitionAttributesInfo,true,1,isPrimary:boolean,numBuckets:int,partitionName:java/lang/String
-org/apache/geode/management/internal/cli/domain/IndexDetails,true,-2198907141534201288,fromClause:java/lang/String,indexName:java/lang/String,indexStatisticsDetails:org/apache/geode/management/internal/cli/domain/IndexDetails$IndexStatisticsDetails,indexType:org/apache/geode/cache/query/IndexType,indexedExpression:java/lang/String,isValid:boolean,memberId:java/lang/String,memberName:java/lang/String,projectionAttributes:java/lang/String,regionName:java/lang/String,regionPath:java/lang/String
-org/apache/geode/management/internal/cli/domain/IndexDetails$IndexStatisticsDetails,false,numberOfKeys:java/lang/Long,numberOfUpdates:java/lang/Long,numberOfValues:java/lang/Long,totalUpdateTime:java/lang/Long,totalUses:java/lang/Long
-org/apache/geode/management/internal/cli/domain/MemberConfigurationInfo,false,cacheAttributes:java/util/Map,cacheServerAttributes:java/util/List,gfePropsRuntime:java/util/Map,gfePropsSetFromFile:java/util/Map,gfePropsSetUsingApi:java/util/Map,gfePropsSetWithDefaults:java/util/Map,jvmInputArguments:java/util/List,pdxAttributes:java/util/Map,systemProperties:java/util/Properties
-org/apache/geode/management/internal/cli/domain/PartitionAttributesInfo,true,1,colocatedWith:java/lang/String,fpaInfoList:java/util/List,localMaxMemory:int,nonDefaultAttributes:java/util/Map,partitionResolverName:java/lang/String,recoveryDelay:long,redundantCopies:int,startupRecoveryDelay:long,totalNumBuckets:int
-org/apache/geode/management/internal/cli/domain/RegionAttributesInfo,true,336184564012988487,asyncEventQueueIDs:java/util/Set,cacheListenerClassNames:java/util/List,cacheLoaderClassName:java/lang/String,cacheWriterClassName:java/lang/String,cloningEnabled:boolean,compressorClassName:java/lang/String,concurrencyChecksEnabled:boolean,concurrencyLevel:int,customExpiryIdleTimeoutClass:java/lang/String,customExpiryTTLClass:java/lang/String,dataPolicy:org/apache/geode/cache/DataPolicy,diskStor [...]
-org/apache/geode/management/internal/cli/domain/RegionDescription,true,6461449275798378332,cndEvictionAttributes:java/util/Map,cndPartitionAttributes:java/util/Map,cndRegionAttributes:java/util/Map,dataPolicy:org/apache/geode/cache/DataPolicy,isAccessor:boolean,isLocal:boolean,isPartition:boolean,isPersistent:boolean,isReplicate:boolean,name:java/lang/String,regionDescPerMemberMap:java/util/Map,scope:org/apache/geode/cache/Scope
-org/apache/geode/management/internal/cli/domain/RegionDescriptionPerMember,true,1,hostingMember:java/lang/String,isAccessor:boolean,name:java/lang/String,regionAttributesInfo:org/apache/geode/management/internal/cli/domain/RegionAttributesInfo,size:int
-org/apache/geode/management/internal/cli/domain/RegionInformation,true,1,dataPolicy:org/apache/geode/cache/DataPolicy,isRoot:boolean,name:java/lang/String,parentRegion:java/lang/String,path:java/lang/String,scope:org/apache/geode/cache/Scope,subRegionInformationSet:java/util/Set
-org/apache/geode/management/internal/cli/domain/StackTracesPerMember,true,1,memberNameOrId:java/lang/String,stackTraces:byte[],timestamp:java/time/Instant
-org/apache/geode/management/internal/cli/functions/AlterQueryServiceFunction,true,7155576168386556341
-org/apache/geode/management/internal/cli/functions/AlterRuntimeConfigFunction,true,1
-org/apache/geode/management/internal/cli/functions/AsyncEventQueueFunctionArgs,true,-6524494645663740872,asyncEventQueueId:java/lang/String,batchSize:int,batchTimeInterval:int,diskStoreName:java/lang/String,diskSynchronous:boolean,dispatcherThreads:int,enableBatchConflation:boolean,forwardExpirationDestroy:boolean,gatewayEventFilters:java/lang/String[],gatewaySubstitutionFilter:java/lang/String,isParallel:boolean,listenerClassName:java/lang/String,listenerProperties:java/util/Properties, [...]
-org/apache/geode/management/internal/cli/functions/ChangeLogLevelFunction,true,1
-org/apache/geode/management/internal/cli/functions/CloseDurableClientFunction,true,1
-org/apache/geode/management/internal/cli/functions/CloseDurableCqFunction,true,1
-org/apache/geode/management/internal/cli/functions/ContinuousQueryFunction,true,1
-org/apache/geode/management/internal/cli/functions/ContinuousQueryFunction$ClientInfo,true,1,isDurable:java/lang/String,primaryServer:java/lang/String,secondaryServer:java/lang/String,this$0:org/apache/geode/management/internal/cli/functions/ContinuousQueryFunction
-org/apache/geode/management/internal/cli/functions/CreateAsyncEventQueueFunction,true,1
-org/apache/geode/management/internal/cli/functions/CreateDefinedIndexesFunction,true,6756381106602823693
-org/apache/geode/management/internal/cli/functions/CreateDiskStoreFunction,true,1
-org/apache/geode/management/internal/cli/functions/CreateIndexFunction,true,1
-org/apache/geode/management/internal/cli/functions/CreateJndiBindingFunction,false
-org/apache/geode/management/internal/cli/functions/CreateRegionFunctionArgs,false,config:org/apache/geode/cache/configuration/RegionConfig,ifNotExists:boolean,regionPath:java/lang/String
-org/apache/geode/management/internal/cli/functions/DataCommandFunction,true,1,optimizeForWrite:boolean
-org/apache/geode/management/internal/cli/functions/DeployFunction,true,1
-org/apache/geode/management/internal/cli/functions/DescribeDiskStoreFunction,false
-org/apache/geode/management/internal/cli/functions/DescribeQueryServiceFunction,true,8283480284191516847
-org/apache/geode/management/internal/cli/functions/DestroyAsyncEventQueueFunction,true,-7754359270344102817
-org/apache/geode/management/internal/cli/functions/DestroyAsyncEventQueueFunctionArgs,true,1755045410754561928,id:java/lang/String,ifExists:boolean
-org/apache/geode/management/internal/cli/functions/DestroyDiskStoreFunction,true,1
-org/apache/geode/management/internal/cli/functions/DestroyDiskStoreFunctionArgs,true,2296397958405313306,id:java/lang/String,ifExists:boolean
-org/apache/geode/management/internal/cli/functions/DestroyGatewayReceiverFunction,true,1490927519860899562
-org/apache/geode/management/internal/cli/functions/DestroyIndexFunction,true,-868082551095130315
-org/apache/geode/management/internal/cli/functions/DestroyJndiBindingFunction,false
-org/apache/geode/management/internal/cli/functions/ExportConfigFunction,true,1
-org/apache/geode/management/internal/cli/functions/ExportDataFunction,true,1
-org/apache/geode/management/internal/cli/functions/ExportLogsFunction,true,1
-org/apache/geode/management/internal/cli/functions/ExportLogsFunction$Args,false,endTime:java/time/LocalDateTime,includeLogs:boolean,includeStats:boolean,logLevel:org/apache/logging/log4j/Level,startTime:java/time/LocalDateTime,thisLogLevelOnly:boolean
-org/apache/geode/management/internal/cli/functions/FetchRegionAttributesFunction,true,4366812590788342070
-org/apache/geode/management/internal/cli/functions/FetchSharedConfigurationStatusFunction,true,1
-org/apache/geode/management/internal/cli/functions/GarbageCollectionFunction,true,1
-org/apache/geode/management/internal/cli/functions/GatewayReceiverCreateFunction,true,8746830191680509335
-org/apache/geode/management/internal/cli/functions/GatewaySenderCreateFunction,true,8746830191680509335
-org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunction,true,1
-org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionArgs,true,3848480256348119530,id:java/lang/String,ifExists:boolean
-org/apache/geode/management/internal/cli/functions/GatewaySenderFunctionArgs,true,4636678328980816780,alertThreshold:java/lang/Integer,batchSize:java/lang/Integer,batchTimeInterval:java/lang/Integer,diskStoreName:java/lang/String,diskSynchronous:java/lang/Boolean,dispatcherThreads:java/lang/Integer,enableBatchConflation:java/lang/Boolean,enablePersistence:java/lang/Boolean,gatewayEventFilters:java/util/List,gatewayTransportFilters:java/util/List,id:java/lang/String,manualStart:java/lang/ [...]
-org/apache/geode/management/internal/cli/functions/GetMemberConfigInformationFunction,true,1
-org/apache/geode/management/internal/cli/functions/GetRegionDescriptionFunction,true,1
-org/apache/geode/management/internal/cli/functions/GetRegionsFunction,true,1
-org/apache/geode/management/internal/cli/functions/GetStackTracesFunction,true,1
-org/apache/geode/management/internal/cli/functions/GetSubscriptionQueueSizeFunction,true,1
-org/apache/geode/management/internal/cli/functions/ImportDataFunction,true,1
-org/apache/geode/management/internal/cli/functions/ListAsyncEventQueuesFunction,true,1
-org/apache/geode/management/internal/cli/functions/ListDeployedFunction,true,1
-org/apache/geode/management/internal/cli/functions/ListDiskStoresFunction,false
-org/apache/geode/management/internal/cli/functions/ListDurableCqNamesFunction,true,1
-org/apache/geode/management/internal/cli/functions/ListFunctionFunction,true,1
-org/apache/geode/management/internal/cli/functions/ListIndexFunction,false
-org/apache/geode/management/internal/cli/functions/ListJndiBindingFunction,true,5254506785395069200
-org/apache/geode/management/internal/cli/functions/NetstatFunction,true,1
-org/apache/geode/management/internal/cli/functions/NetstatFunction$NetstatFunctionArgument,true,1,lineSeparator:java/lang/String,withlsof:boolean
-org/apache/geode/management/internal/cli/functions/NetstatFunction$NetstatFunctionResult,true,1,compressedBytes:org/apache/geode/management/internal/cli/CliUtil$DeflaterInflaterData,headerInfo:java/lang/String,host:java/lang/String
-org/apache/geode/management/internal/cli/functions/RegionAlterFunction,true,-4846425364943216425
-org/apache/geode/management/internal/cli/functions/RegionAttributesWrapper,true,-5517424520268271436,cacheListenerClasses:java/util/List,cacheLoaderClass:org/apache/geode/management/configuration/ClassName,cacheWriterClass:org/apache/geode/management/configuration/ClassName,compressorClass:java/lang/String,keyConstraintClass:java/lang/String,regionAttributes:org/apache/geode/cache/RegionAttributes,valueConstraintClass:java/lang/String
-org/apache/geode/management/internal/cli/functions/RegionCreateFunction,true,8746830191680509335
-org/apache/geode/management/internal/cli/functions/RegionDestroyFunction,true,9172773671865750685
-org/apache/geode/management/internal/cli/functions/RegionFunctionArgs,true,2204943186081037302,asyncEventQueueIds:java/util/Set,cacheListeners:java/util/Set,cacheLoader:org/apache/geode/management/configuration/ClassName,cacheWriter:org/apache/geode/management/configuration/ClassName,cloningEnabled:java/lang/Boolean,compressor:java/lang/String,concurrencyChecksEnabled:java/lang/Boolean,concurrencyLevel:java/lang/Integer,diskStore:java/lang/String,diskSynchronous:java/lang/Boolean,enableA [...]
-org/apache/geode/management/internal/cli/functions/RegionFunctionArgs$EvictionAttrs,true,9015454906371076014,evictionAction:java/lang/String,maxEntryCount:java/lang/Integer,maxMemory:java/lang/Integer,objectSizer:java/lang/String
-org/apache/geode/management/internal/cli/functions/RegionFunctionArgs$ExpirationAttrs,true,1474255033398008063,action:org/apache/geode/cache/ExpirationAction,time:java/lang/Integer
-org/apache/geode/management/internal/cli/functions/RegionFunctionArgs$PartitionArgs,true,5907052187323280919,partitionResolver:java/lang/String,prColocatedWith:java/lang/String,prLocalMaxMemory:java/lang/Integer,prRecoveryDelay:java/lang/Long,prRedundantCopies:java/lang/Integer,prStartupRecoveryDelay:java/lang/Long,prTotalMaxMemory:java/lang/Long,prTotalNumBuckets:java/lang/Integer
-org/apache/geode/management/internal/cli/functions/ResumeAsyncEventQueueDispatcherFunction,false
-org/apache/geode/management/internal/cli/functions/ShowMissingDiskStoresFunction,false
-org/apache/geode/management/internal/cli/functions/ShutDownFunction,true,1
-org/apache/geode/management/internal/cli/functions/SizeExportLogsFunction,true,1
-org/apache/geode/management/internal/cli/functions/UndeployFunction,true,1
-org/apache/geode/management/internal/cli/functions/UnregisterFunction,true,1
-org/apache/geode/management/internal/cli/functions/UserFunctionExecution,true,1
-org/apache/geode/management/internal/cli/result/CommandResultException,true,1,result:org/apache/geode/management/cli/Result
-org/apache/geode/management/internal/cli/result/TableBuilder$Align,false
-org/apache/geode/management/internal/cli/result/TableBuilderHelper$TooManyColumnsException,false
-org/apache/geode/management/internal/cli/shell/JMXConnectionException,true,3872374016604940917,exceptionType:int
-org/apache/geode/management/internal/cli/shell/JMXInvocationException,true,-4265451314790394366
-org/apache/geode/management/internal/cli/shell/jline/ANSIHandler$ANSIStyle,false
-org/apache/geode/management/internal/cli/util/EvictionAttributesInfo,true,1,evictionAction:java/lang/String,evictionAlgorithm:java/lang/String,evictionMaxValue:int
-org/apache/geode/management/internal/cli/util/ExportLogsCacheWriter,false,currentFile:java/nio/file/Path,currentOutputStream:java/io/BufferedOutputStream,isEmpty:boolean
-org/apache/geode/management/internal/cli/util/FixedPartitionAttributesInfo,false,isPrimary:boolean,numBuckets:int,partitionName:java/lang/String
-org/apache/geode/management/internal/cli/util/JConsoleNotFoundException,true,-1485615321440327206
-org/apache/geode/management/internal/cli/util/LogFilter$LineFilterResult,false
-org/apache/geode/management/internal/cli/util/VisualVmNotFoundException,true,-8491645604829510102
 org/apache/geode/management/internal/configuration/domain/SharedConfigurationStatus,false
 org/apache/geode/management/internal/configuration/functions/DownloadJarFunction,true,1
 org/apache/geode/management/internal/configuration/functions/GetClusterConfigurationFunction,false
diff --git a/geode-gfsh/src/integrationTest/java/org/apache/geode/codeAnalysis/AnalyzeGfshSerializablesJUnitTest.java b/geode-gfsh/src/integrationTest/java/org/apache/geode/codeAnalysis/AnalyzeGfshSerializablesJUnitTest.java
new file mode 100755
index 0000000..6b95f6d
--- /dev/null
+++ b/geode-gfsh/src/integrationTest/java/org/apache/geode/codeAnalysis/AnalyzeGfshSerializablesJUnitTest.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.codeAnalysis;
+
+
+import org.apache.geode.management.internal.GfshDistributedSystemService;
+
+public class AnalyzeGfshSerializablesJUnitTest extends AnalyzeSerializablesJUnitTestBase {
+
+  @Override
+  protected String getModuleName() {
+    return "geode-gfsh";
+  }
+
+  @Override
+  protected Class getModuleClass() {
+    return GfshDistributedSystemService.class;
+  }
+}
diff --git a/geode-gfsh/src/integrationTest/resources/org/apache/geode/codeAnalysis/excludedClasses.txt b/geode-gfsh/src/integrationTest/resources/org/apache/geode/codeAnalysis/excludedClasses.txt
new file mode 100644
index 0000000..8ce0692
--- /dev/null
+++ b/geode-gfsh/src/integrationTest/resources/org/apache/geode/codeAnalysis/excludedClasses.txt
@@ -0,0 +1,2 @@
+# e.g.,
+#org/apache/geode/cache/query/CqAttributesFactory
diff --git a/geode-gfsh/src/integrationTest/resources/org/apache/geode/codeAnalysis/openBugs.txt b/geode-gfsh/src/integrationTest/resources/org/apache/geode/codeAnalysis/openBugs.txt
new file mode 100644
index 0000000..bf62d60
--- /dev/null
+++ b/geode-gfsh/src/integrationTest/resources/org/apache/geode/codeAnalysis/openBugs.txt
@@ -0,0 +1,18 @@
+# This is a list of classes excluded due to open bugs about their having
+# incompatible changes.  There should be no entries in this file at the
+# time of a product release.
+
+# Each entry should be a bug number followed by a comma and the
+# full class name.  The package components can be delimited with a period
+# or a comma.  Don't include ".class" or ".java" at the end of the name.
+
+# example:  50174,org/apache/geode/distributed/internal/StartupResponseWithVersionMessage
+# example:  50175,com.gemstone.org.jgroups.Message$Header
+
+
+# ~~~~~~~~~~~~~~~~~~~ DataSerializables ~~~~~~~~~~~~~~~~~~~~~~~~~
+# these are failures from testDataSerializables
+
+
+# ~~~~~~~~~~~~~~~~~~~ Serializables ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# these are failures from testSerializables
diff --git a/geode-gfsh/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt b/geode-gfsh/src/integrationTest/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt
new file mode 100644
index 0000000..e69de29
diff --git a/geode-gfsh/src/main/java/org/apache/geode/management/internal/GfshDistributedSystemService.java b/geode-gfsh/src/main/java/org/apache/geode/management/internal/GfshDistributedSystemService.java
new file mode 100644
index 0000000..dbf7189
--- /dev/null
+++ b/geode-gfsh/src/main/java/org/apache/geode/management/internal/GfshDistributedSystemService.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.management.internal;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Collection;
+
+import org.apache.geode.distributed.internal.DistributedSystemService;
+import org.apache.geode.distributed.internal.InternalDistributedSystem;
+import org.apache.geode.internal.ClassPathLoader;
+import org.apache.geode.internal.InternalDataSerializer;
+
+public class GfshDistributedSystemService implements DistributedSystemService {
+  @Override
+  public void init(InternalDistributedSystem internalDistributedSystem) {
+
+  }
+
+  @Override
+  public Class getInterface() {
+    return getClass();
+  }
+
+  @Override
+  public Collection<String> getSerializationAcceptlist() throws IOException {
+    URL sanctionedSerializables = ClassPathLoader.getLatest().getResource(getClass(),
+        "sanctioned-geode-gfsh-serializables.txt");
+    return InternalDataSerializer.loadClassNames(sanctionedSerializables);
+  }
+}
diff --git a/geode-gfsh/src/main/resources/META-INF/services/org.apache.geode.distributed.internal.DistributedSystemService b/geode-gfsh/src/main/resources/META-INF/services/org.apache.geode.distributed.internal.DistributedSystemService
new file mode 100644
index 0000000..4a0427d
--- /dev/null
+++ b/geode-gfsh/src/main/resources/META-INF/services/org.apache.geode.distributed.internal.DistributedSystemService
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+org.apache.geode.management.internal.GfshDistributedSystemService
+
diff --git a/geode-gfsh/src/main/resources/org/apache/geode/management/internal/sanctioned-geode-gfsh-serializables.txt b/geode-gfsh/src/main/resources/org/apache/geode/management/internal/sanctioned-geode-gfsh-serializables.txt
new file mode 100644
index 0000000..7b34faf
--- /dev/null
+++ b/geode-gfsh/src/main/resources/org/apache/geode/management/internal/sanctioned-geode-gfsh-serializables.txt
@@ -0,0 +1,111 @@
+org/apache/geode/management/cli/CliFunction,false
+org/apache/geode/management/cli/CommandProcessingException,true,-1398779521639575884,errorData:java/lang/Object,errorType:int
+org/apache/geode/management/cli/CommandServiceException,true,7316102209844678329
+org/apache/geode/management/cli/Result$Status,false,code:int
+org/apache/geode/management/internal/cli/AbstractCliAroundInterceptor$Response,false,text:java/lang/String
+org/apache/geode/management/internal/cli/CliUtil$DeflaterInflaterData,true,1104813333595216795,data:byte[],dataLength:int
+org/apache/geode/management/internal/cli/commands/CreateJndiBindingCommand$DATASOURCE_TYPE,false,type:java/lang/String
+org/apache/geode/management/internal/cli/commands/ImportClusterConfigurationCommand$Action,false
+org/apache/geode/management/internal/cli/commands/ShowMetricsCommand$Category,false
+org/apache/geode/management/internal/cli/domain/AsyncEventQueueDetails,true,1,batchSize:int,createdWithPausedEventProcessing:boolean,diskStoreName:java/lang/String,id:java/lang/String,listener:java/lang/String,listenerProperties:java/util/Properties,maxQueueMemory:int,pausedEventProcessing:boolean,persistent:boolean
+org/apache/geode/management/internal/cli/domain/DataCommandRequest,false,command:java/lang/String,key:java/lang/String,keyClass:java/lang/String,loadOnCacheMiss:boolean,principal:java/lang/Object,putIfAbsent:boolean,query:java/lang/String,recursive:boolean,regionName:java/lang/String,removeAllKeys:java/lang/String,value:java/lang/String,valueClass:java/lang/String
+org/apache/geode/management/internal/cli/domain/DataCommandResult,true,2601227194108110936,command:java/lang/String,error:java/lang/Throwable,errorString:java/lang/String,getResult:java/lang/Object,hasResultForAggregation:boolean,infoString:java/lang/String,inputKey:java/lang/Object,inputQuery:java/lang/Object,inputValue:java/lang/Object,keyClass:java/lang/String,limit:int,locateEntryLocations:java/util/List,locateEntryResult:org/apache/geode/management/internal/cli/domain/DataCommandRes [...]
+org/apache/geode/management/internal/cli/domain/DataCommandResult$KeyInfo,false,host:java/lang/String,locations:java/util/ArrayList,memberId:java/lang/String,memberName:java/lang/String,pid:int
+org/apache/geode/management/internal/cli/domain/DataCommandResult$SelectResultRow,true,1,columnValues:java/util/Map,type:int
+org/apache/geode/management/internal/cli/domain/DiskStoreDetails,false,allowForceCompaction:java/lang/Boolean,asyncEventQueueDetailsSet:java/util/Set,autoCompact:java/lang/Boolean,cacheServerDetailsSet:java/util/Set,compactionThreshold:java/lang/Integer,diskDirDetailsSet:java/util/Set,diskUsageCriticalPercentage:java/lang/Float,diskUsageWarningPercentage:java/lang/Float,gatewayDetailsSet:java/util/Set,id:java/util/UUID,maxOplogSize:java/lang/Long,memberId:java/lang/String,memberName:java [...]
+org/apache/geode/management/internal/cli/domain/DiskStoreDetails$AsyncEventQueueDetails,false,id:java/lang/String
+org/apache/geode/management/internal/cli/domain/DiskStoreDetails$CacheServerDetails,false,bindAddress:java/lang/String,hostName:java/lang/String,port:int
+org/apache/geode/management/internal/cli/domain/DiskStoreDetails$DiskDirDetails,false,absolutePath:java/lang/String,size:int
+org/apache/geode/management/internal/cli/domain/DiskStoreDetails$GatewayDetails,false,id:java/lang/String,persistent:boolean
+org/apache/geode/management/internal/cli/domain/DiskStoreDetails$RegionDetails,false,fullPath:java/lang/String,name:java/lang/String,overflowToDisk:boolean,persistent:boolean
+org/apache/geode/management/internal/cli/domain/EvictionAttributesInfo,true,1,evictionAction:java/lang/String,evictionAlgorithm:java/lang/String,evictionMaxValue:int,nonDefaultAttributes:java/util/Map
+org/apache/geode/management/internal/cli/domain/FixedPartitionAttributesInfo,true,1,isPrimary:boolean,numBuckets:int,partitionName:java/lang/String
+org/apache/geode/management/internal/cli/domain/IndexDetails,true,-2198907141534201288,fromClause:java/lang/String,indexName:java/lang/String,indexStatisticsDetails:org/apache/geode/management/internal/cli/domain/IndexDetails$IndexStatisticsDetails,indexType:org/apache/geode/cache/query/IndexType,indexedExpression:java/lang/String,isValid:boolean,memberId:java/lang/String,memberName:java/lang/String,projectionAttributes:java/lang/String,regionName:java/lang/String,regionPath:java/lang/String
+org/apache/geode/management/internal/cli/domain/IndexDetails$IndexStatisticsDetails,false,numberOfKeys:java/lang/Long,numberOfUpdates:java/lang/Long,numberOfValues:java/lang/Long,totalUpdateTime:java/lang/Long,totalUses:java/lang/Long
+org/apache/geode/management/internal/cli/domain/MemberConfigurationInfo,false,cacheAttributes:java/util/Map,cacheServerAttributes:java/util/List,gfePropsRuntime:java/util/Map,gfePropsSetFromFile:java/util/Map,gfePropsSetUsingApi:java/util/Map,gfePropsSetWithDefaults:java/util/Map,jvmInputArguments:java/util/List,pdxAttributes:java/util/Map,systemProperties:java/util/Properties
+org/apache/geode/management/internal/cli/domain/PartitionAttributesInfo,true,1,colocatedWith:java/lang/String,fpaInfoList:java/util/List,localMaxMemory:int,nonDefaultAttributes:java/util/Map,partitionResolverName:java/lang/String,recoveryDelay:long,redundantCopies:int,startupRecoveryDelay:long,totalNumBuckets:int
+org/apache/geode/management/internal/cli/domain/RegionAttributesInfo,true,336184564012988487,asyncEventQueueIDs:java/util/Set,cacheListenerClassNames:java/util/List,cacheLoaderClassName:java/lang/String,cacheWriterClassName:java/lang/String,cloningEnabled:boolean,compressorClassName:java/lang/String,concurrencyChecksEnabled:boolean,concurrencyLevel:int,customExpiryIdleTimeoutClass:java/lang/String,customExpiryTTLClass:java/lang/String,dataPolicy:org/apache/geode/cache/DataPolicy,diskStor [...]
+org/apache/geode/management/internal/cli/domain/RegionDescription,true,6461449275798378332,cndEvictionAttributes:java/util/Map,cndPartitionAttributes:java/util/Map,cndRegionAttributes:java/util/Map,dataPolicy:org/apache/geode/cache/DataPolicy,isAccessor:boolean,isLocal:boolean,isPartition:boolean,isPersistent:boolean,isReplicate:boolean,name:java/lang/String,regionDescPerMemberMap:java/util/Map,scope:org/apache/geode/cache/Scope
+org/apache/geode/management/internal/cli/domain/RegionDescriptionPerMember,true,1,hostingMember:java/lang/String,isAccessor:boolean,name:java/lang/String,regionAttributesInfo:org/apache/geode/management/internal/cli/domain/RegionAttributesInfo,size:int
+org/apache/geode/management/internal/cli/domain/RegionInformation,true,1,dataPolicy:org/apache/geode/cache/DataPolicy,isRoot:boolean,name:java/lang/String,parentRegion:java/lang/String,path:java/lang/String,scope:org/apache/geode/cache/Scope,subRegionInformationSet:java/util/Set
+org/apache/geode/management/internal/cli/domain/StackTracesPerMember,true,1,memberNameOrId:java/lang/String,stackTraces:byte[],timestamp:java/time/Instant
+org/apache/geode/management/internal/cli/functions/AlterQueryServiceFunction,true,7155576168386556341
+org/apache/geode/management/internal/cli/functions/AlterRuntimeConfigFunction,true,1
+org/apache/geode/management/internal/cli/functions/AsyncEventQueueFunctionArgs,true,-6524494645663740872,asyncEventQueueId:java/lang/String,batchSize:int,batchTimeInterval:int,diskStoreName:java/lang/String,diskSynchronous:boolean,dispatcherThreads:int,enableBatchConflation:boolean,forwardExpirationDestroy:boolean,gatewayEventFilters:java/lang/String[],gatewaySubstitutionFilter:java/lang/String,isParallel:boolean,listenerClassName:java/lang/String,listenerProperties:java/util/Properties, [...]
+org/apache/geode/management/internal/cli/functions/ChangeLogLevelFunction,true,1
+org/apache/geode/management/internal/cli/functions/CloseDurableClientFunction,true,1
+org/apache/geode/management/internal/cli/functions/CloseDurableCqFunction,true,1
+org/apache/geode/management/internal/cli/functions/ContinuousQueryFunction,true,1
+org/apache/geode/management/internal/cli/functions/ContinuousQueryFunction$ClientInfo,true,1,isDurable:java/lang/String,primaryServer:java/lang/String,secondaryServer:java/lang/String,this$0:org/apache/geode/management/internal/cli/functions/ContinuousQueryFunction
+org/apache/geode/management/internal/cli/functions/CreateAsyncEventQueueFunction,true,1
+org/apache/geode/management/internal/cli/functions/CreateDefinedIndexesFunction,true,6756381106602823693
+org/apache/geode/management/internal/cli/functions/CreateDiskStoreFunction,true,1
+org/apache/geode/management/internal/cli/functions/CreateIndexFunction,true,1
+org/apache/geode/management/internal/cli/functions/CreateJndiBindingFunction,false
+org/apache/geode/management/internal/cli/functions/CreateRegionFunctionArgs,false,config:org/apache/geode/cache/configuration/RegionConfig,ifNotExists:boolean,regionPath:java/lang/String
+org/apache/geode/management/internal/cli/functions/DataCommandFunction,true,1,optimizeForWrite:boolean
+org/apache/geode/management/internal/cli/functions/DeployFunction,true,1
+org/apache/geode/management/internal/cli/functions/DescribeDiskStoreFunction,false
+org/apache/geode/management/internal/cli/functions/DescribeQueryServiceFunction,true,8283480284191516847
+org/apache/geode/management/internal/cli/functions/DestroyAsyncEventQueueFunction,true,-7754359270344102817
+org/apache/geode/management/internal/cli/functions/DestroyAsyncEventQueueFunctionArgs,true,1755045410754561928,id:java/lang/String,ifExists:boolean
+org/apache/geode/management/internal/cli/functions/DestroyDiskStoreFunction,true,1
+org/apache/geode/management/internal/cli/functions/DestroyDiskStoreFunctionArgs,true,2296397958405313306,id:java/lang/String,ifExists:boolean
+org/apache/geode/management/internal/cli/functions/DestroyGatewayReceiverFunction,true,1490927519860899562
+org/apache/geode/management/internal/cli/functions/DestroyIndexFunction,true,-868082551095130315
+org/apache/geode/management/internal/cli/functions/DestroyJndiBindingFunction,false
+org/apache/geode/management/internal/cli/functions/ExportConfigFunction,true,1
+org/apache/geode/management/internal/cli/functions/ExportDataFunction,true,1
+org/apache/geode/management/internal/cli/functions/ExportLogsFunction,true,1
+org/apache/geode/management/internal/cli/functions/ExportLogsFunction$Args,false,endTime:java/time/LocalDateTime,includeLogs:boolean,includeStats:boolean,logLevel:org/apache/logging/log4j/Level,startTime:java/time/LocalDateTime,thisLogLevelOnly:boolean
+org/apache/geode/management/internal/cli/functions/FetchRegionAttributesFunction,true,4366812590788342070
+org/apache/geode/management/internal/cli/functions/FetchSharedConfigurationStatusFunction,true,1
+org/apache/geode/management/internal/cli/functions/GarbageCollectionFunction,true,1
+org/apache/geode/management/internal/cli/functions/GatewayReceiverCreateFunction,true,8746830191680509335
+org/apache/geode/management/internal/cli/functions/GatewaySenderCreateFunction,true,8746830191680509335
+org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunction,true,1
+org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionArgs,true,3848480256348119530,id:java/lang/String,ifExists:boolean
+org/apache/geode/management/internal/cli/functions/GatewaySenderFunctionArgs,true,4636678328980816780,alertThreshold:java/lang/Integer,batchSize:java/lang/Integer,batchTimeInterval:java/lang/Integer,diskStoreName:java/lang/String,diskSynchronous:java/lang/Boolean,dispatcherThreads:java/lang/Integer,enableBatchConflation:java/lang/Boolean,enablePersistence:java/lang/Boolean,gatewayEventFilters:java/util/List,gatewayTransportFilters:java/util/List,id:java/lang/String,manualStart:java/lang/ [...]
+org/apache/geode/management/internal/cli/functions/GetMemberConfigInformationFunction,true,1
+org/apache/geode/management/internal/cli/functions/GetRegionDescriptionFunction,true,1
+org/apache/geode/management/internal/cli/functions/GetRegionsFunction,true,1
+org/apache/geode/management/internal/cli/functions/GetStackTracesFunction,true,1
+org/apache/geode/management/internal/cli/functions/GetSubscriptionQueueSizeFunction,true,1
+org/apache/geode/management/internal/cli/functions/ImportDataFunction,true,1
+org/apache/geode/management/internal/cli/functions/ListAsyncEventQueuesFunction,true,1
+org/apache/geode/management/internal/cli/functions/ListDeployedFunction,true,1
+org/apache/geode/management/internal/cli/functions/ListDiskStoresFunction,false
+org/apache/geode/management/internal/cli/functions/ListDurableCqNamesFunction,true,1
+org/apache/geode/management/internal/cli/functions/ListFunctionFunction,true,1
+org/apache/geode/management/internal/cli/functions/ListIndexFunction,false
+org/apache/geode/management/internal/cli/functions/ListJndiBindingFunction,true,5254506785395069200
+org/apache/geode/management/internal/cli/functions/NetstatFunction,true,1
+org/apache/geode/management/internal/cli/functions/NetstatFunction$NetstatFunctionArgument,true,1,lineSeparator:java/lang/String,withlsof:boolean
+org/apache/geode/management/internal/cli/functions/NetstatFunction$NetstatFunctionResult,true,1,compressedBytes:org/apache/geode/management/internal/cli/CliUtil$DeflaterInflaterData,headerInfo:java/lang/String,host:java/lang/String
+org/apache/geode/management/internal/cli/functions/RegionAlterFunction,true,-4846425364943216425
+org/apache/geode/management/internal/cli/functions/RegionAttributesWrapper,true,-5517424520268271436,cacheListenerClasses:java/util/List,cacheLoaderClass:org/apache/geode/management/configuration/ClassName,cacheWriterClass:org/apache/geode/management/configuration/ClassName,compressorClass:java/lang/String,keyConstraintClass:java/lang/String,regionAttributes:org/apache/geode/cache/RegionAttributes,valueConstraintClass:java/lang/String
+org/apache/geode/management/internal/cli/functions/RegionCreateFunction,true,8746830191680509335
+org/apache/geode/management/internal/cli/functions/RegionDestroyFunction,true,9172773671865750685
+org/apache/geode/management/internal/cli/functions/RegionFunctionArgs,true,2204943186081037302,asyncEventQueueIds:java/util/Set,cacheListeners:java/util/Set,cacheLoader:org/apache/geode/management/configuration/ClassName,cacheWriter:org/apache/geode/management/configuration/ClassName,cloningEnabled:java/lang/Boolean,compressor:java/lang/String,concurrencyChecksEnabled:java/lang/Boolean,concurrencyLevel:java/lang/Integer,diskStore:java/lang/String,diskSynchronous:java/lang/Boolean,enableA [...]
+org/apache/geode/management/internal/cli/functions/RegionFunctionArgs$EvictionAttrs,true,9015454906371076014,evictionAction:java/lang/String,maxEntryCount:java/lang/Integer,maxMemory:java/lang/Integer,objectSizer:java/lang/String
+org/apache/geode/management/internal/cli/functions/RegionFunctionArgs$ExpirationAttrs,true,1474255033398008063,action:org/apache/geode/cache/ExpirationAction,time:java/lang/Integer
+org/apache/geode/management/internal/cli/functions/RegionFunctionArgs$PartitionArgs,true,5907052187323280919,partitionResolver:java/lang/String,prColocatedWith:java/lang/String,prLocalMaxMemory:java/lang/Integer,prRecoveryDelay:java/lang/Long,prRedundantCopies:java/lang/Integer,prStartupRecoveryDelay:java/lang/Long,prTotalMaxMemory:java/lang/Long,prTotalNumBuckets:java/lang/Integer
+org/apache/geode/management/internal/cli/functions/ResumeAsyncEventQueueDispatcherFunction,false
+org/apache/geode/management/internal/cli/functions/ShowMissingDiskStoresFunction,false
+org/apache/geode/management/internal/cli/functions/ShutDownFunction,true,1
+org/apache/geode/management/internal/cli/functions/SizeExportLogsFunction,true,1
+org/apache/geode/management/internal/cli/functions/UndeployFunction,true,1
+org/apache/geode/management/internal/cli/functions/UnregisterFunction,true,1
+org/apache/geode/management/internal/cli/functions/UserFunctionExecution,true,1
+org/apache/geode/management/internal/cli/result/CommandResultException,true,1,result:org/apache/geode/management/cli/Result
+org/apache/geode/management/internal/cli/result/TableBuilder$Align,false
+org/apache/geode/management/internal/cli/result/TableBuilderHelper$TooManyColumnsException,false
+org/apache/geode/management/internal/cli/shell/JMXConnectionException,true,3872374016604940917,exceptionType:int
+org/apache/geode/management/internal/cli/shell/JMXInvocationException,true,-4265451314790394366
+org/apache/geode/management/internal/cli/shell/jline/ANSIHandler$ANSIStyle,false
+org/apache/geode/management/internal/cli/util/EvictionAttributesInfo,true,1,evictionAction:java/lang/String,evictionAlgorithm:java/lang/String,evictionMaxValue:int
+org/apache/geode/management/internal/cli/util/ExportLogsCacheWriter,false,currentFile:java/nio/file/Path,currentOutputStream:java/io/BufferedOutputStream,isEmpty:boolean
+org/apache/geode/management/internal/cli/util/FixedPartitionAttributesInfo,false,isPrimary:boolean,numBuckets:int,partitionName:java/lang/String
+org/apache/geode/management/internal/cli/util/JConsoleNotFoundException,true,-1485615321440327206
+org/apache/geode/management/internal/cli/util/LogFilter$LineFilterResult,false
+org/apache/geode/management/internal/cli/util/VisualVmNotFoundException,true,-8491645604829510102
diff --git a/geode-junit/src/main/java/org/apache/geode/codeAnalysis/AnalyzeSerializablesJUnitTestBase.java b/geode-junit/src/main/java/org/apache/geode/codeAnalysis/AnalyzeSerializablesJUnitTestBase.java
index 295066f..2546f6c 100644
--- a/geode-junit/src/main/java/org/apache/geode/codeAnalysis/AnalyzeSerializablesJUnitTestBase.java
+++ b/geode-junit/src/main/java/org/apache/geode/codeAnalysis/AnalyzeSerializablesJUnitTestBase.java
@@ -26,6 +26,7 @@ import java.io.Externalizable;
 import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.InvalidClassException;
 import java.io.Serializable;
 import java.lang.reflect.Constructor;
@@ -88,7 +89,7 @@ public abstract class AnalyzeSerializablesJUnitTestBase {
   private File expectedDataSerializablesFile;
   private String expectedSerializablesFileName =
       "sanctioned-" + getModuleName() + "-serializables.txt";
-  private File expectedSerializablesFile;
+  private InputStream expectedSerializablesInputStream;
 
   private List<ClassAndMethodDetails> expectedDataSerializables;
   private List<ClassAndVariableDetails> expectedSerializables;
@@ -105,12 +106,11 @@ public abstract class AnalyzeSerializablesJUnitTestBase {
   }
 
   public void loadExpectedSerializables() throws Exception {
-    this.expectedSerializablesFile =
-        getResourceAsFile(getModuleClass(), expectedSerializablesFileName);
-    assertThat(this.expectedSerializablesFile).exists().canRead();
+    this.expectedSerializablesInputStream =
+        getResourceAsStream(getModuleClass(), expectedSerializablesFileName);
 
     this.expectedSerializables =
-        CompiledClassUtils.loadClassesAndVariables(this.expectedSerializablesFile);
+        CompiledClassUtils.loadClassesAndVariables(this.expectedSerializablesInputStream);
   }
 
   public void findClasses() throws Exception {
@@ -197,7 +197,7 @@ public abstract class AnalyzeSerializablesJUnitTestBase {
       System.out.println(diff);
       fail(diff + FAIL_MESSAGE, getSrcPathFor(getResourceAsFile(EXCLUDED_CLASSES_TXT)),
           actualSerializablesFile.getAbsolutePath(),
-          getSrcPathFor(this.expectedSerializablesFile, "main"));
+          this.expectedSerializablesFileName);
     }
   }
 
@@ -433,7 +433,7 @@ public abstract class AnalyzeSerializablesJUnitTestBase {
     String ideaBuildDirName = Paths.get(getModuleName(), "out", "production", "classes").toString();
     System.out.println("ideaBuildDirName is " + ideaBuildDirName);
     String ideaFQCNBuildDirName = Paths.get("out", "production",
-        "org.apache.geode." + getModuleName() + ".main").toString();
+        "geode." + getModuleName() + ".main").toString();
     System.out.println("idea build path with full package names is " + ideaFQCNBuildDirName);
     String buildDir = null;
 
@@ -577,11 +577,18 @@ public abstract class AnalyzeSerializablesJUnitTestBase {
     return file;
   }
 
+  /**
+   * Use this method to get a resource stored in the test's resource directory
+   */
   private File getResourceAsFile(String resourceName) {
-    return getResourceAsFile(getClass(), resourceName);
+    return new File(getClass().getResource(resourceName).getFile());
   }
 
-  private File getResourceAsFile(Class associatedClass, String resourceName) {
-    return new File(associatedClass.getResource(resourceName).getFile());
+  /**
+   * Use this method to get a resource that might be in a JAR file
+   */
+  private InputStream getResourceAsStream(Class associatedClass, String resourceName)
+      throws IOException {
+    return associatedClass.getResource(resourceName).openStream();
   }
 }
diff --git a/geode-junit/src/main/java/org/apache/geode/codeAnalysis/CompiledClassUtils.java b/geode-junit/src/main/java/org/apache/geode/codeAnalysis/CompiledClassUtils.java
index f206178..eff5a0b 100644
--- a/geode-junit/src/main/java/org/apache/geode/codeAnalysis/CompiledClassUtils.java
+++ b/geode-junit/src/main/java/org/apache/geode/codeAnalysis/CompiledClassUtils.java
@@ -21,6 +21,8 @@ import java.io.FileInputStream;
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.io.LineNumberReader;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -292,11 +294,10 @@ public class CompiledClassUtils {
     out.close();
   }
 
-  public static List<ClassAndVariableDetails> loadClassesAndVariables(File file)
+  public static List<ClassAndVariableDetails> loadClassesAndVariables(InputStream stream)
       throws IOException {
-    List<ClassAndVariableDetails> result = new LinkedList<ClassAndVariableDetails>();
-    FileReader fr = new FileReader(file);
-    BufferedReader in = new BufferedReader(fr);
+    List<ClassAndVariableDetails> result = new LinkedList<>();
+    BufferedReader in = new BufferedReader(new InputStreamReader(stream));
     String line;
     while ((line = in.readLine()) != null) {
       line = line.trim();
@@ -306,7 +307,7 @@ public class CompiledClassUtils {
         result.add(new ClassAndVariableDetails(line));
       }
     }
-    fr.close();
+    stream.close();
     return result;
   }