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 <[email protected]>
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;
   }
 

Reply via email to