### Question:
HiveTableHandle implements ConnectorTableHandle { public SchemaTableName getSchemaTableName() { return new SchemaTableName(schemaName, tableName); } @JsonCreator  HiveTableHandle(
            @JsonProperty("schemaName") String schemaName,
            @JsonProperty("tableName") String tableName,
            @JsonProperty("partitionColumns") List<HiveColumnHandle> partitionColumns,
            @JsonProperty("compactEffectivePredicate") TupleDomain<HiveColumnHandle> compactEffectivePredicate,
            @JsonProperty("enforcedConstraint") TupleDomain<ColumnHandle> enforcedConstraint,
            @JsonProperty("bucketHandle") Optional<HiveBucketHandle> bucketHandle,
            @JsonProperty("bucketFilter") Optional<HiveBucketFilter> bucketFilter,
            @JsonProperty("analyzePartitionValues") Optional<List<List<String>>> analyzePartitionValues,
            @JsonProperty("analyzeColumnNames") Optional<Set<String>> analyzeColumnNames);  HiveTableHandle(
            String schemaName,
            String tableName,
            Map<String, String> tableParameters,
            List<HiveColumnHandle> partitionColumns,
            Optional<HiveBucketHandle> bucketHandle);  HiveTableHandle(
            String schemaName,
            String tableName,
            Optional<Map<String, String>> tableParameters,
            List<HiveColumnHandle> partitionColumns,
            Optional<List<HivePartition>> partitions,
            TupleDomain<HiveColumnHandle> compactEffectivePredicate,
            TupleDomain<ColumnHandle> enforcedConstraint,
            Optional<HiveBucketHandle> bucketHandle,
            Optional<HiveBucketFilter> bucketFilter,
            Optional<List<List<String>>> analyzePartitionValues,
            Optional<Set<String>> analyzeColumnNames,
            Optional<Set<ColumnHandle>> constraintColumns); HiveTableHandle withAnalyzePartitionValues(List<List<String>> analyzePartitionValues); HiveTableHandle withAnalyzeColumnNames(Set<String> analyzeColumnNames); @JsonProperty String getSchemaName(); @JsonProperty String getTableName(); @JsonIgnore Optional<Map<String, String>> getTableParameters(); @JsonProperty List<HiveColumnHandle> getPartitionColumns(); @JsonIgnore Optional<List<HivePartition>> getPartitions(); @JsonProperty TupleDomain<HiveColumnHandle> getCompactEffectivePredicate(); @JsonProperty TupleDomain<ColumnHandle> getEnforcedConstraint(); @JsonProperty Optional<HiveBucketHandle> getBucketHandle(); @JsonProperty Optional<HiveBucketFilter> getBucketFilter(); @JsonProperty Optional<List<List<String>>> getAnalyzePartitionValues(); @JsonProperty Optional<Set<String>> getAnalyzeColumnNames(); @JsonIgnore Optional<Set<ColumnHandle>> getConstraintColumns(); SchemaTableName getSchemaTableName(); @Override boolean equals(Object o); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void testRoundTrip() { HiveTableHandle expected = new HiveTableHandle("schema", "table", ImmutableMap.of(), ImmutableList.of(), Optional.empty()); String json = codec.toJson(expected); HiveTableHandle actual = codec.fromJson(json); assertEquals(actual.getSchemaTableName(), expected.getSchemaTableName()); }