-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Description
ObjectMapper's copy method does not correctly copy Features if constructed with a MappingJsonFactory, which is the default for the ObjectMapper no-arg constructor.
This issue was fixed for JsonFactory FasterXML/jackson-core@7b796a8 , but not for the default factory of ObjectMapper.
For example:
public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(Feature.ALLOW_COMMENTS, true);
System.out.println("Expecting true: " + mapper.getFactory().isEnabled(Feature.ALLOW_COMMENTS));
System.out.println("Expecting 9: " + mapper.readValue("//test\n9", Integer.class));
ObjectMapper copy = mapper.copy();
System.out.println("Expecting true: " + copy.isEnabled(Feature.ALLOW_COMMENTS));
System.out.println("Expecting 9: " + copy.readValue("//test\n9", Integer.class));
}
This prints out:
Expecting true: true
Expecting 9: 9
Expecting true: false
Exception in thread "main" com.fasterxml.jackson.core.JsonParseException: Unexpected character ('/' (code 47)): maybe a (non-standard) comment? (not recognized as one since Feature 'ALLOW_COMMENTS' not enabled for parser)
at [Source: //test
9; line: 1, column: 2]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1581)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:533)
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:462)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._skipComment(ReaderBasedJsonParser.java:2099)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._skipWSOrEnd2(ReaderBasedJsonParser.java:2074)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._skipWSOrEnd(ReaderBasedJsonParser.java:2025)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:577)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3742)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3687)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2714)
at foo.JacksonTest.main(JacksonTest.java:20)