diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/json/JacksonParser.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/json/JacksonParser.scala index 19e2c4228236..1cd4b4cd29bc 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/json/JacksonParser.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/json/JacksonParser.scala @@ -293,7 +293,8 @@ class JacksonParser( case _: StringType => (parser: JsonParser) => { // This must be enabled if we will retrieve the bytes directly from the raw content: val oldFeature = parser.getFeatureMask - parser.setFeatureMask(oldFeature | JsonParser.Feature.INCLUDE_SOURCE_IN_LOCATION.getMask) + val featureToAdd = JsonParser.Feature.INCLUDE_SOURCE_IN_LOCATION.getMask + parser.overrideStdFeatures(oldFeature | featureToAdd, featureToAdd) val result = parseJsonToken[UTF8String](parser, dataType) { case VALUE_STRING => UTF8String.fromString(parser.getText) @@ -338,8 +339,11 @@ class JacksonParser( UTF8String.fromBytes(writer.toByteArray) } } - // Reset back to the original configuration: - parser.setFeatureMask(oldFeature) + // Reset back to the original configuration using `~0` as the mask, + // which is a bitmask with all bits set, effectively allowing all features + // to be reset. This ensures that every feature is restored to its previous + // state as defined by `oldFeature`. + parser.overrideStdFeatures(oldFeature, ~0) result }