GH-5744: migrate RDF4J to Jackson 3 LTS#5773
Conversation
There was a problem hiding this comment.
Pull request overview
Migrates selected RDF4J modules (core/query and queryresultio-sparqljson) from Jackson 2 (com.fasterxml.jackson.*) to Jackson 3.1 (tools.jackson.*) and adapts parsing/writing code to the Jackson 3 API and exception model.
Changes:
- Introduces
jackson3.versionand updates module POMs to depend ontools.jacksonJackson 3 artifacts. - Updates SPARQL/JSON parser/writer code to Jackson 3 API changes (token/name/location accessors, generator “property” write methods, factory builder changes).
- Updates query explanation JSON serialization to use immutable
JsonMapper.builder()configuration.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
pom.xml |
Adds jackson3.version property to pin Jackson 3 dependency versions. |
core/query/pom.xml |
Switches query module Jackson deps to tools.jackson.* (keeping jackson-annotations from com.fasterxml). |
core/query/src/main/java/org/eclipse/rdf4j/query/explanation/ExplanationImpl.java |
Replaces mutable ObjectMapper setup with JsonMapper.builder() and removes checked-exception handling. |
core/queryresultio/sparqljson/pom.xml |
Switches sparqljson module to tools.jackson.core:jackson-core at ${jackson3.version}. |
core/queryresultio/sparqljson/src/main/java/.../AbstractSPARQLJSONParser.java |
Updates parsing logic to Jackson 3 APIs and exception type (JacksonException). |
core/queryresultio/sparqljson/src/main/java/.../AbstractSPARQLJSONWriter.java |
Updates writer to Jackson 3 APIs, including property-writing methods and pretty-printer wiring via ObjectWriteContext. |
core/queryresultio/sparqljson/src/main/java/.../SPARQLResultsJSONParser.java |
Updates token/name/location calls to Jackson 3 equivalents. |
core/queryresultio/sparqljson/src/main/java/.../SPARQLResultsJSONWriter.java |
Updates generator field/property methods and removes checked IOException from internal write path. |
core/queryresultio/sparqljson/src/test/java/.../SPARQLJSONParserCustomTest.java |
Updates tests to assert JacksonException as the underlying cause and still validates source location behavior. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
ea58311 to
e7536c4
Compare
There was a problem hiding this comment.
Pull request overview
Migrates RDF4J’s JSON handling across multiple modules from Jackson 2 (com.fasterxml.jackson.*) to Jackson 3.1.x (tools.jackson.*), aligning with the Jackson 3 LTS line while keeping jackson-annotations on the Jackson 2 namespace as intended by Jackson 3.
Changes:
- Introduces a root
${jackson3.version}and updates multiple module POMs to depend ontools.jackson.*Jackson 3 artifacts. - Updates production code and tests to Jackson 3 API changes (parser/generator/token method renames,
ObjectReadContext/ObjectWriteContextusage,JacksonException). - Adapts pretty-print configuration for Jackson 3 where generator pretty printers must be set at creation time.
Reviewed changes
Copilot reviewed 42 out of 42 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/commands/QueryServlet.java | Switch Jackson imports to tools.jackson.databind.*. |
| tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/commands/DeleteServlet.java | Switch Jackson imports to tools.jackson.databind.*. |
| pom.xml | Add ${jackson3.version} property for Jackson 3 modules. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalTestUtils.java | Update parser/token APIs + ObjectReadContext for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalSearchEdgeCasesTest.java | Update generator APIs + ObjectWriteContext for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalRecoveryDedupTest.java | Update generator APIs + ObjectWriteContext for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderUnknownValueKindTest.java | Update generator APIs + ObjectWriteContext for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderUncompressedTest.java | Update generator APIs + ObjectWriteContext for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderUncompressedCrcMismatchTest.java | Update generator APIs + ObjectWriteContext for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderTruncatedRecordTest.java | Update generator APIs + ObjectWriteContext for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderParseJsonSkipChildrenTest.java | Update generator APIs + ObjectWriteContext for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderListSegmentsUnreadableTest.java | Update generator APIs + ObjectWriteContext for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderLastLsnNonMintedTest.java | Update generator APIs + ObjectWriteContext for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderInvalidFrameTest.java | Update generator APIs + ObjectWriteContext for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderHasSequenceGapsTest.java | Update generator APIs + ObjectWriteContext for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderGzipInvalidAndTruncatedTest.java | Update generator APIs + ObjectWriteContext for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReadSegmentSequenceTest.java | Update generator APIs + ObjectWriteContext for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalCompressedSummaryCrcValidationTest.java | Update parser/generator APIs + contexts for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalCompressedSegmentRestoreTest.java | Update parser APIs + ObjectReadContext for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalCompressedNoSummaryTest.java | Update generator APIs + ObjectWriteContext for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWALReadSegmentSequenceEdgeCasesTest.java | Update generator APIs + ObjectWriteContext for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/ValueStoreRandomLookupTest.java | Update parser/token APIs + ObjectReadContext for Jackson 3. |
| core/sail/nativerdf/src/main/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalSearch.java | Update parser APIs + ObjectReadContext for Jackson 3. |
| core/sail/nativerdf/src/main/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReader.java | Update parser APIs + ObjectReadContext for Jackson 3. |
| core/sail/nativerdf/src/main/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWAL.java | Update parser/generator APIs + read/write contexts for Jackson 3. |
| core/sail/nativerdf/pom.xml | Switch jackson-core dependency to tools.jackson.core at ${jackson3.version}. |
| core/sail/memory/src/test/java/org/eclipse/rdf4j/sail/memory/QueryPlanRetrievalTest.java | Update Jackson databind imports to tools.jackson.databind.*. |
| core/rio/rdfjson/src/test/java/org/eclipse/rdf4j/rio/rdfjson/RDFJSONParserCustomTest.java | Update exception type assertions/imports to JacksonException. |
| core/rio/rdfjson/src/main/java/org/eclipse/rdf4j/rio/rdfjson/RDFJSONWriter.java | Update generator API calls + factory builder, pretty printing via ObjectWriteContext. |
| core/rio/rdfjson/src/main/java/org/eclipse/rdf4j/rio/rdfjson/RDFJSONParser.java | Update parser API calls, locations, factory builder, and exception handling types. |
| core/rio/rdfjson/pom.xml | Switch jackson-core dependency to tools.jackson.core at ${jackson3.version}. |
| core/rio/api/src/main/java/org/eclipse/rdf4j/rio/helpers/SetRioSetting.java | Update databind/type references + exception type to Jackson 3. |
| core/rio/api/pom.xml | Switch jackson-core/jackson-databind dependencies to tools.jackson.core at ${jackson3.version}. |
| core/queryresultio/sparqljson/src/test/java/org/eclipse/rdf4j/query/resultio/sparqljson/SPARQLJSONParserCustomTest.java | Update exception type assertions/imports to JacksonException. |
| core/queryresultio/sparqljson/src/main/java/org/eclipse/rdf4j/query/resultio/sparqljson/SPARQLResultsJSONWriter.java | Update generator method names and remove checked IO exceptions. |
| core/queryresultio/sparqljson/src/main/java/org/eclipse/rdf4j/query/resultio/sparqljson/SPARQLResultsJSONParser.java | Update parser token/name/location APIs for Jackson 3. |
| core/queryresultio/sparqljson/src/main/java/org/eclipse/rdf4j/query/resultio/sparqljson/AbstractSPARQLJSONWriter.java | Update factory builder + generator method names; attempt pretty print via context. |
| core/queryresultio/sparqljson/src/main/java/org/eclipse/rdf4j/query/resultio/sparqljson/AbstractSPARQLJSONParser.java | Update factory builder + parser token/name/location APIs and exception type. |
| core/queryresultio/sparqljson/pom.xml | Switch jackson-core dependency to tools.jackson.core at ${jackson3.version}. |
| core/query/src/main/java/org/eclipse/rdf4j/query/explanation/ExplanationImpl.java | Migrate to Jackson 3 JsonMapper.builder() and remove checked exception handling. |
| core/query/pom.xml | Switch jackson-core/jackson-databind dependencies to tools.jackson.core at ${jackson3.version}. |
| core/http/client/src/main/java/org/eclipse/rdf4j/http/client/RDF4JProtocolSession.java | Switch databind import to tools.jackson.databind.ObjectMapper. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Removed JsonProcessingException import (now JacksonException, unchecked — no longer needed) - Added JsonMapper import (tools.jackson.databind.json.JsonMapper) - Replaced mutable new ObjectMapper() + chained setters with an immutable JsonMapper.builder() configured via changeDefaultVisibility() and changeDefaultPropertyInclusion() - Removed try/catch in toJson() since Jackson 3 exceptions are unchecked
Update jackson-core dependency to tools.jackson.core group at version
3.1.2 (managed via jackson3.version property in root pom).
Java code changes following the Jackson 3 migration guide:
- Update all imports from com.fasterxml.jackson to tools.jackson
(jackson-annotations excluded as per Jackson 3 design)
- JsonFactory/JsonFactoryBuilder moved to tools.jackson.core.json
package
- JsonProcessingException renamed to JacksonException (now unchecked)
- JsonParser: getCurrentToken/Name/Location() →
currentToken/Name/Location()
- JsonParser: getParsingContext() → streamReadContext()
- JsonParser: nextTextValue() → nextStringValue()
- JsonToken.FIELD_NAME → JsonToken.PROPERTY_NAME
- JsonGenerator: writeFieldName() → writeName()
- JsonGenerator write*Field/FieldStart → write*Property/PropertyStart
- JsonReadFeature.ALLOW_UNQUOTED_FIELD_NAMES →
ALLOW_UNQUOTED_PROPERTY_NAMES
- JsonFactory.Feature.INTERN/CANONICALIZE_FIELD_NAMES removed
- ObjectMapper is immutable: configure pretty printer via
ObjectWriteContext
at generator creation time instead of setPrettyPrinter()
- catch(IOException) → catch(JacksonException) for Jackson call sites
a468f55 to
a0d12f4
Compare
- Update jackson-core dependency to tools.jackson.core groupId
- Replace JsonFactoryBuilder + removed INTERN/CANONICALIZE_FIELD_NAMES
features with JsonFactory.builder()
- JsonLocation renamed to TokenStreamLocation
- ALLOW_UNQUOTED_FIELD_NAMES renamed to ALLOW_UNQUOTED_PROPERTY_NAMES
- JsonParser API: getCurrentLocation/Name/Token →
currentLocation/Name/Token
- JsonGenerator API: writeObjectField/ArrayFieldStart →
writeStringProperty/writeObjectPropertyStart/writeArrayPropertyStart
- setPrettyPrinter() removed; replaced with ObjectWriteContext at
generator creation time
- modelToRdfJsonInternal: remove throws IOException and duplicate
pretty-printer setup (now configured via ObjectWriteContext in
startRDF)
- Exception handling: IOException catches replaced with
JacksonException
- Test: JsonProcessingException → JacksonException, update
ContentReference import
- Update jackson-core and jackson-databind dependencies to
tools.jackson.core groupId; jackson-annotations remains at 2.21
- SetRioSetting: JsonProcessingException → JacksonException,
update TypeReference and ObjectMapper imports to tools.jackson.*
- RDF4JProtocolSession, DeleteServlet, QueryServlet: update
ObjectMapper
and ObjectNode imports to tools.jackson.databind.*
- Update jackson-core dependency to tools.jackson.core groupId
- Update imports to tools.jackson.core.* /
tools.jackson.core.json.JsonFactory
- JsonToken.FIELD_NAME → JsonToken.PROPERTY_NAME
- JsonParser: getCurrentName() → currentName()
- JsonGenerator:
writeStringField/writeNumberField/writeObjectFieldStart →
writeStringProperty/writeNumberProperty/writeObjectPropertyStart
- Replace deprecated createParser(byte[]) with
createParser(ObjectReadContext.empty(), content)
- Replace deprecated createGenerator(OutputStream) with
createGenerator(ObjectWriteContext.empty(), out)
Update QueryPlanRetrievalTest to use
tools.jackson.databind.{JsonNode,ObjectMapper} instead of
com.fasterxml.jackson.databind. Jackson 3 arrives transitively, so no
pom.xml change is required.
Jackson 3 reads the PrettyPrinter from the ObjectWriteContext eagerly at generator construction time. The previous code created the generator in the constructor (before writer settings were available) with a prettyPrinterSupplier that always returned null, then updated the supplier in startDocument() — too late to have any effect. Fix: delay JsonGenerator creation to startDocument(), where the writer config is known, and capture the resolved PrettyPrinter directly in the ObjectWriteContext passed to createGenerator(). Add SPARQLJSONPrettyPrintTest to verify that PRETTY_PRINT=true produces indented output and PRETTY_PRINT=false produces compact output for both SPARQLResultsJSONWriter and SPARQLBooleanJSONWriter, and that both forms round-trip correctly through the parser.
a0d12f4 to
1a7765d
Compare
There was a problem hiding this comment.
Pull request overview
This PR migrates RDF4J’s JSON handling from Jackson 2.x (com.fasterxml.jackson.*) to Jackson 3.1 LTS (tools.jackson.*) across multiple modules, updating both Maven dependencies and Java code to match Jackson 3 API changes.
Changes:
- Introduce and use
jackson3.version(3.1.2) and update module POMs to depend ontools.jackson.*Jackson 3 artifacts. - Update Java source to Jackson 3 APIs (token/property renames,
currentName()/currentLocation(),ObjectReadContext/ObjectWriteContext, generator/property write methods). - Adjust and add tests to validate JSON output/behavior under the new Jackson 3 implementation (including pretty-print behavior).
Reviewed changes
Copilot reviewed 43 out of 43 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/commands/QueryServlet.java | Switch workbench JSON imports to tools.jackson.databind.*. |
| tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/commands/DeleteServlet.java | Switch workbench JSON imports to tools.jackson.databind.*. |
| pom.xml | Add jackson3.version property for Jackson 3.1.2. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalTestUtils.java | Update WAL test parsing to Jackson 3 parser APIs and contexts. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalSearchEdgeCasesTest.java | Update Jackson generator creation and field/property writing APIs. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalRecoveryDedupTest.java | Update generator creation and property-writing APIs. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderUnknownValueKindTest.java | Update generator creation and property-writing APIs. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderUncompressedTest.java | Update generator creation and property-writing APIs. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderUncompressedCrcMismatchTest.java | Update generator creation and property-writing APIs. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderTruncatedRecordTest.java | Update generator creation and property-writing APIs. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderParseJsonSkipChildrenTest.java | Update generator object start + property-writing APIs. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderListSegmentsUnreadableTest.java | Update generator creation and property-writing APIs. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderLastLsnNonMintedTest.java | Update generator creation and property-writing APIs. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderInvalidFrameTest.java | Update generator creation and property-writing APIs. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderHasSequenceGapsTest.java | Update generator creation and property-writing APIs. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderGzipInvalidAndTruncatedTest.java | Update generator creation and property-writing APIs. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReadSegmentSequenceTest.java | Update generator creation and property-writing APIs. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalCompressedSummaryCrcValidationTest.java | Update parser/generator creation with contexts and property-name APIs. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalCompressedSegmentRestoreTest.java | Update parser creation with ObjectReadContext and name accessors. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalCompressedNoSummaryTest.java | Update generator creation and property-writing APIs. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWALReadSegmentSequenceEdgeCasesTest.java | Update generator creation and property-writing APIs. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/ValueStoreRandomLookupTest.java | Update parser creation with ObjectReadContext and property-name APIs. |
| core/sail/nativerdf/src/main/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalSearch.java | Update WAL search JSON parsing to Jackson 3 contexts and accessors. |
| core/sail/nativerdf/src/main/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReader.java | Update WAL reader JSON parsing to Jackson 3 contexts and accessors. |
| core/sail/nativerdf/src/main/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWAL.java | Update WAL read/write JSON to Jackson 3 contexts and property-writing APIs. |
| core/sail/nativerdf/pom.xml | Switch nativerdf to tools.jackson.core:jackson-core at ${jackson3.version}. |
| core/sail/memory/src/test/java/org/eclipse/rdf4j/sail/memory/QueryPlanRetrievalTest.java | Switch memory sail test imports to tools.jackson.databind.*. |
| core/rio/rdfjson/src/test/java/org/eclipse/rdf4j/rio/rdfjson/RDFJSONParserCustomTest.java | Update tests to expect tools.jackson.core.JacksonException. |
| core/rio/rdfjson/src/main/java/org/eclipse/rdf4j/rio/rdfjson/RDFJSONWriter.java | Migrate RDF/JSON writer to Jackson 3 generator/property APIs and write-context pretty-printing. |
| core/rio/rdfjson/src/main/java/org/eclipse/rdf4j/rio/rdfjson/RDFJSONParser.java | Migrate RDF/JSON parser to Jackson 3 APIs (location/token/name accessors; JsonFactory builder updates). |
| core/rio/rdfjson/pom.xml | Switch rdfjson module to tools.jackson.core:jackson-core at ${jackson3.version}. |
| core/rio/api/src/main/java/org/eclipse/rdf4j/rio/helpers/SetRioSetting.java | Update JSON parsing exceptions/imports for Jackson 3 (JacksonException, tools.jackson.*). |
| core/rio/api/pom.xml | Switch rio-api Jackson core/databind dependencies to tools.jackson.* at ${jackson3.version}. |
| core/queryresultio/sparqljson/src/test/java/org/eclipse/rdf4j/query/resultio/sparqljson/SPARQLJSONPrettyPrintTest.java | Add tests verifying PRETTY_PRINT behavior for SPARQL/JSON writers. |
| core/queryresultio/sparqljson/src/test/java/org/eclipse/rdf4j/query/resultio/sparqljson/SPARQLJSONParserCustomTest.java | Update tests to expect tools.jackson.core.JacksonException. |
| core/queryresultio/sparqljson/src/main/java/org/eclipse/rdf4j/query/resultio/sparqljson/SPARQLResultsJSONWriter.java | Update SPARQL tuple JSON writer to Jackson 3 generator/property APIs. |
| core/queryresultio/sparqljson/src/main/java/org/eclipse/rdf4j/query/resultio/sparqljson/SPARQLResultsJSONParser.java | Update SPARQL tuple JSON parser for Jackson 3 token/name/location APIs. |
| core/queryresultio/sparqljson/src/main/java/org/eclipse/rdf4j/query/resultio/sparqljson/AbstractSPARQLJSONWriter.java | Migrate base SPARQL/JSON writer to Jackson 3 and configure pretty print via ObjectWriteContext. |
| core/queryresultio/sparqljson/src/main/java/org/eclipse/rdf4j/query/resultio/sparqljson/AbstractSPARQLJSONParser.java | Migrate base SPARQL/JSON parser to Jackson 3 and update exceptions/locations. |
| core/queryresultio/sparqljson/pom.xml | Switch sparqljson module to tools.jackson.core:jackson-core at ${jackson3.version}. |
| core/query/src/main/java/org/eclipse/rdf4j/query/explanation/ExplanationImpl.java | Update query explanation JSON serialization to Jackson 3 JsonMapper.builder() usage. |
| core/query/pom.xml | Switch query module Jackson core/databind dependencies to tools.jackson.* at ${jackson3.version}. |
| core/http/client/src/main/java/org/eclipse/rdf4j/http/client/RDF4JProtocolSession.java | Switch HTTP client JSON imports to tools.jackson.databind.ObjectMapper. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Migrates RDF4J’s JSON handling from Jackson 2.x (com.fasterxml.jackson.*) to Jackson 3.1 LTS (tools.jackson.*) across multiple modules, updating both runtime code and tests to the new Jackson 3 APIs and configuration patterns.
Changes:
- Update Maven dependencies and introduce
jackson3.versionto support Jackson 3.1.2 across relevant modules. - Replace Jackson 2 core/databind APIs (field names, parser/generator APIs, pretty printing) with Jackson 3 equivalents.
- Adjust and add tests to validate behavior (notably pretty printing) under Jackson 3.
Reviewed changes
Copilot reviewed 43 out of 43 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/commands/QueryServlet.java | Switch ObjectMapper/ObjectNode imports to tools.jackson.databind.*. |
| tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/commands/DeleteServlet.java | Switch ObjectMapper/ObjectNode imports to tools.jackson.databind.*. |
| pom.xml | Add jackson3.version property for Jackson 3 dependency versioning. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalTestUtils.java | Update parser usage to Jackson 3 (ObjectReadContext, property-name token). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalSearchEdgeCasesTest.java | Update generator usage to Jackson 3 (ObjectWriteContext, write*Property). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalRecoveryDedupTest.java | Update generator usage to Jackson 3 (ObjectWriteContext, write*Property). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderUnknownValueKindTest.java | Update generator usage to Jackson 3 (ObjectWriteContext, write*Property). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderUncompressedTest.java | Update generator usage to Jackson 3 (ObjectWriteContext, write*Property). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderUncompressedCrcMismatchTest.java | Update generator usage to Jackson 3 (ObjectWriteContext, write*Property). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderTruncatedRecordTest.java | Update generator usage to Jackson 3 (ObjectWriteContext, write*Property). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderParseJsonSkipChildrenTest.java | Update generator API calls to Jackson 3 (writeObjectPropertyStart, writeNumberProperty). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderListSegmentsUnreadableTest.java | Update generator usage to Jackson 3 (ObjectWriteContext, write*Property). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderLastLsnNonMintedTest.java | Update generator usage to Jackson 3 (ObjectWriteContext, write*Property). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderInvalidFrameTest.java | Update generator usage to Jackson 3 (ObjectWriteContext, write*Property). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderHasSequenceGapsTest.java | Update generator usage to Jackson 3 (ObjectWriteContext, write*Property). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderGzipInvalidAndTruncatedTest.java | Update generator usage to Jackson 3 (ObjectWriteContext, write*Property). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReadSegmentSequenceTest.java | Update generator usage to Jackson 3 (ObjectWriteContext, write*Property). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalCompressedSummaryCrcValidationTest.java | Update parser/generator usage to Jackson 3 (ObjectReadContext/ObjectWriteContext, currentName). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalCompressedSegmentRestoreTest.java | Update parser usage to Jackson 3 (ObjectReadContext, currentName). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalCompressedNoSummaryTest.java | Update generator usage to Jackson 3 (ObjectWriteContext, write*Property). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWALReadSegmentSequenceEdgeCasesTest.java | Update generator usage to Jackson 3 (ObjectWriteContext, write*Property). |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/ValueStoreRandomLookupTest.java | Update parser usage to Jackson 3 (ObjectReadContext, property-name token). |
| core/sail/nativerdf/src/main/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalSearch.java | Update parser usage to Jackson 3 (ObjectReadContext, currentName). |
| core/sail/nativerdf/src/main/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReader.java | Update parser usage to Jackson 3 (ObjectReadContext, currentName). |
| core/sail/nativerdf/src/main/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWAL.java | Update parser/generator usage to Jackson 3 (ObjectReadContext/ObjectWriteContext, property-name token, write*Property). |
| core/sail/nativerdf/pom.xml | Switch jackson-core dependency to tools.jackson.core and pin to ${jackson3.version}. |
| core/sail/memory/src/test/java/org/eclipse/rdf4j/sail/memory/QueryPlanRetrievalTest.java | Switch test imports to tools.jackson.databind.*. |
| core/rio/rdfjson/src/test/java/org/eclipse/rdf4j/rio/rdfjson/RDFJSONParserCustomTest.java | Update expected exception types/imports to Jackson 3 (JacksonException). |
| core/rio/rdfjson/src/main/java/org/eclipse/rdf4j/rio/rdfjson/RDFJSONWriter.java | Migrate generator/property APIs and pretty printing to Jackson 3 ObjectWriteContext. |
| core/rio/rdfjson/src/main/java/org/eclipse/rdf4j/rio/rdfjson/RDFJSONParser.java | Migrate parser APIs and location types to Jackson 3 (TokenStreamLocation, ObjectReadContext). |
| core/rio/rdfjson/pom.xml | Switch jackson-core dependency to tools.jackson.core and pin to ${jackson3.version}. |
| core/rio/api/src/main/java/org/eclipse/rdf4j/rio/helpers/SetRioSetting.java | Update parsing exception and Jackson imports to Jackson 3 (JacksonException, tools.jackson.*). |
| core/rio/api/pom.xml | Switch jackson-core/jackson-databind to tools.jackson.core and pin to ${jackson3.version}. |
| core/queryresultio/sparqljson/src/test/java/org/eclipse/rdf4j/query/resultio/sparqljson/SPARQLJSONPrettyPrintTest.java | Add test validating BasicWriterSettings.PRETTY_PRINT behavior for SPARQL JSON writers. |
| core/queryresultio/sparqljson/src/test/java/org/eclipse/rdf4j/query/resultio/sparqljson/SPARQLJSONParserCustomTest.java | Update expected exception types/imports to Jackson 3 (JacksonException). |
| core/queryresultio/sparqljson/src/main/java/org/eclipse/rdf4j/query/resultio/sparqljson/SPARQLResultsJSONWriter.java | Update generator field/property APIs for Jackson 3. |
| core/queryresultio/sparqljson/src/main/java/org/eclipse/rdf4j/query/resultio/sparqljson/SPARQLResultsJSONParser.java | Update parser token/name/location APIs for Jackson 3. |
| core/queryresultio/sparqljson/src/main/java/org/eclipse/rdf4j/query/resultio/sparqljson/AbstractSPARQLJSONWriter.java | Rework writer to build generator with ObjectWriteContext for Jackson 3 pretty-printing behavior. |
| core/queryresultio/sparqljson/src/main/java/org/eclipse/rdf4j/query/resultio/sparqljson/AbstractSPARQLJSONParser.java | Update parser APIs and exception handling to Jackson 3 (JacksonException, property-name token, streamReadContext). |
| core/queryresultio/sparqljson/pom.xml | Switch jackson-core dependency to tools.jackson.core and pin to ${jackson3.version}. |
| core/query/src/main/java/org/eclipse/rdf4j/query/explanation/ExplanationImpl.java | Move to Jackson 3 JsonMapper.builder() and remove checked-exception handling. |
| core/query/pom.xml | Switch jackson-core/jackson-databind to tools.jackson.core and pin to ${jackson3.version}. |
| core/http/client/src/main/java/org/eclipse/rdf4j/http/client/RDF4JProtocolSession.java | Switch ObjectMapper import to tools.jackson.databind.ObjectMapper. |
Comments suppressed due to low confidence (1)
core/queryresultio/sparqljson/src/main/java/org/eclipse/rdf4j/query/resultio/sparqljson/AbstractSPARQLJSONWriter.java:373
startDocument()now creates a newJsonGeneratoreach time, butendDocument()only flushes it and never closes it. If the same writer instance is used for multiple documents/results, this can leak generators and keep buffered state around. Consider closingjginendDocument()(AUTO_CLOSE_TARGET is disabled, so the underlying Writer won’t be closed) and/or reusing a single generator instance.
protected void endDocument() throws JacksonException {
jg.writeEndObject();
if (getWriterConfig().isSet(BasicQueryWriterSettings.JSONP_CALLBACK)) {
jg.writeRaw(");");
}
jg.flush();
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
e810fea to
bbecca6
Compare
There was a problem hiding this comment.
Pull request overview
Migrates multiple RDF4J modules from Jackson 2.x (com.fasterxml.jackson.*) to Jackson 3.1 LTS (tools.jackson.*), updating JSON parsing/writing call sites and Maven dependencies to match Jackson 3 API changes.
Changes:
- Introduces a dedicated
${jackson3.version}property and updates several module POMs to depend ontools.jackson.*Jackson 3 artifacts. - Updates JSON parser/generator usage for Jackson 3 (e.g.,
ObjectReadContext/ObjectWriteContext,PROPERTY_NAME,currentName/currentLocation,write*Property*methods). - Updates and extends test coverage for Jackson 3 behavior (including pretty-print handling for SPARQL/JSON writers).
Reviewed changes
Copilot reviewed 45 out of 45 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/commands/QueryServlet.java | Switches ObjectMapper/ObjectNode imports to tools.jackson.*. |
| tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/commands/DeleteServlet.java | Switches ObjectMapper/ObjectNode imports to tools.jackson.*. |
| pom.xml | Adds ${jackson3.version} property for Jackson 3 dependency pinning. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalTestUtils.java | Updates parser creation/token handling to Jackson 3 APIs. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalSearchEdgeCasesTest.java | Updates generator creation and write*Property methods for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalRecoveryDedupTest.java | Updates generator creation and write*Property methods for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderUnknownValueKindTest.java | Updates generator creation and write*Property methods for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderUncompressedTest.java | Updates generator creation and write*Property methods for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderUncompressedCrcMismatchTest.java | Updates generator creation and write*Property methods for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderTruncatedRecordTest.java | Updates generator creation and write*Property methods for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderParseJsonSkipChildrenTest.java | Updates generator creation and nested object writing APIs for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderListSegmentsUnreadableTest.java | Updates generator creation and write*Property methods for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderLastLsnNonMintedTest.java | Updates generator creation and write*Property methods for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderInvalidFrameTest.java | Updates generator creation and write*Property methods for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderHasSequenceGapsTest.java | Updates generator creation and write*Property methods for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReaderGzipInvalidAndTruncatedTest.java | Updates generator creation and write*Property methods for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReadSegmentSequenceTest.java | Updates generator creation and write*Property methods for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalCompressedSummaryCrcValidationTest.java | Updates generator/parser creation and name/token APIs for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalCompressedSegmentRestoreTest.java | Updates parser creation and currentName usage for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalCompressedNoSummaryTest.java | Updates generator creation and write*Property methods for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWALReadSegmentSequenceEdgeCasesTest.java | Updates generator creation and write*Property methods for Jackson 3. |
| core/sail/nativerdf/src/test/java/org/eclipse/rdf4j/sail/nativerdf/ValueStoreRandomLookupTest.java | Updates parser creation and FIELD_NAME→PROPERTY_NAME handling for Jackson 3. |
| core/sail/nativerdf/src/main/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalSearch.java | Updates WAL JSON parsing for Jackson 3 parser creation/name APIs. |
| core/sail/nativerdf/src/main/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWalReader.java | Updates WAL JSON parsing for Jackson 3 parser creation/name/location APIs. |
| core/sail/nativerdf/src/main/java/org/eclipse/rdf4j/sail/nativerdf/wal/ValueStoreWAL.java | Updates WAL parsing/writing to Jackson 3 generator/parser APIs and contexts. |
| core/sail/nativerdf/pom.xml | Switches to tools.jackson.core:jackson-core with ${jackson3.version}. |
| core/sail/memory/src/test/java/org/eclipse/rdf4j/sail/memory/QueryPlanRetrievalTest.java | Updates test imports to tools.jackson.databind.*. |
| core/sail/elasticsearch/pom.xml | Adds explicit Jackson 2 databind dependency for Elasticsearch client usage. |
| core/sail/elasticsearch-store/pom.xml | Adds explicit Jackson 2 databind dependency for Elasticsearch store usage. |
| core/rio/rdfjson/src/test/java/org/eclipse/rdf4j/rio/rdfjson/RDFJSONParserCustomTest.java | Updates exception type assertions/imports for Jackson 3. |
| core/rio/rdfjson/src/main/java/org/eclipse/rdf4j/rio/rdfjson/RDFJSONWriter.java | Migrates writer to Jackson 3 generator/property APIs and ObjectWriteContext pretty-printing. |
| core/rio/rdfjson/src/main/java/org/eclipse/rdf4j/rio/rdfjson/RDFJSONParser.java | Migrates parser to Jackson 3 parser creation/name/token/location APIs. |
| core/rio/rdfjson/pom.xml | Switches to tools.jackson.core:jackson-core with ${jackson3.version}. |
| core/rio/api/src/main/java/org/eclipse/rdf4j/rio/helpers/SetRioSetting.java | Updates Jackson imports and exception type for Jackson 3. |
| core/rio/api/pom.xml | Switches to tools.jackson.core jackson-core/jackson-databind with ${jackson3.version}. |
| core/queryresultio/sparqljson/src/test/java/org/eclipse/rdf4j/query/resultio/sparqljson/SPARQLJSONPrettyPrintTest.java | Adds tests verifying PRETTY_PRINT behavior still works under Jackson 3. |
| core/queryresultio/sparqljson/src/test/java/org/eclipse/rdf4j/query/resultio/sparqljson/SPARQLJSONParserCustomTest.java | Updates exception type assertions/imports for Jackson 3. |
| core/queryresultio/sparqljson/src/main/java/org/eclipse/rdf4j/query/resultio/sparqljson/SPARQLResultsJSONWriter.java | Updates generator field/property writing APIs and removes checked IO exceptions. |
| core/queryresultio/sparqljson/src/main/java/org/eclipse/rdf4j/query/resultio/sparqljson/SPARQLResultsJSONParser.java | Updates parser token/name/location APIs for Jackson 3. |
| core/queryresultio/sparqljson/src/main/java/org/eclipse/rdf4j/query/resultio/sparqljson/AbstractSPARQLJSONWriter.java | Delays generator creation to startDocument and configures pretty printing via ObjectWriteContext. |
| core/queryresultio/sparqljson/src/main/java/org/eclipse/rdf4j/query/resultio/sparqljson/AbstractSPARQLJSONParser.java | Updates parsing/token APIs and exception typing for Jackson 3. |
| core/queryresultio/sparqljson/pom.xml | Switches to tools.jackson.core:jackson-core with ${jackson3.version}. |
| core/query/src/main/java/org/eclipse/rdf4j/query/explanation/ExplanationImpl.java | Updates explanation JSON serialization to Jackson 3 JsonMapper.builder(). |
| core/query/pom.xml | Switches to tools.jackson.core jackson-core/jackson-databind with ${jackson3.version}. |
| core/http/client/src/main/java/org/eclipse/rdf4j/http/client/RDF4JProtocolSession.java | Switches ObjectMapper import to tools.jackson.databind.ObjectMapper. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
ElasticsearchIndex, ElasticsearchDataStructure and ElasticsearchNamespaceStore use Jackson 2 types (ObjectMapper, JsonNode, ObjectNode, TypeReference) that were previously reaching the compile classpath only transitively via elasticsearch-java. Add an explicit jackson-databind dependency to both rdf4j-sail-elasticsearch and rdf4j-sail-elasticsearch-store so the compile dependency is declared rather than assumed
bbecca6 to
1319410
Compare
|
Smoke testing in our application including RIO (SPARQL JSON / RDF JSON) as well as using the Native Store was working fine. I suggest to merge for 6.0 milestone 1 |
GitHub issue resolved: #5744
Migrates RDF4J modules to Jackson 3.1 for JSON processin, which is the next LTS version
Commit 1: GH-5744: Migrate rdf4j-query to Jackson 3.1.x
unchecked — no longer needed)
immutable JsonMapper.builder() configured via changeDefaultVisibility()
and changeDefaultPropertyInclusion()
Commit 2: GH-5744: Migrate rdf4j-queryresultio-sparqljson to Jackson 3.1.2
Update jackson-core dependency to tools.jackson.core group at version
3.1.2 (managed via jackson3.version property in root pom).
Java code changes following the Jackson 3 migration guide:
(jackson-annotations excluded as per Jackson 3 design)
package
currentToken/Name/Location()
ALLOW_UNQUOTED_PROPERTY_NAMES
ObjectWriteContext
at generator creation time instead of setPrettyPrinter()
Commit 3: GH-5723: migrate rdf4j-rio-rdfjson to Jackson 3.1.2
features with JsonFactory.builder()
currentLocation/Name/Token
writeStringProperty/writeObjectPropertyStart/writeArrayPropertyStart
generator creation time
pretty-printer setup (now configured via ObjectWriteContext in
startRDF)
JacksonException
ContentReference import
Commit 4: GH-5723: migrate rdf4j-rio-api to Jackson 3.1.2
tools.jackson.core groupId; jackson-annotations remains at 2.21
update TypeReference and ObjectMapper imports to tools.jackson.*
Commit 5: GH-5723: fix compile errors in workbench and http-client for Jackson 3
ObjectMapper
and ObjectNode imports to tools.jackson.databind.*
Commit 6: GH-5723: migrate rdf4j-sail-nativerdf to Jackson 3.1.2
tools.jackson.core.json.JsonFactory
writeStringField/writeNumberField/writeObjectFieldStart →
writeStringProperty/writeNumberProperty/writeObjectPropertyStart
createParser(ObjectReadContext.empty(), content)
createGenerator(ObjectWriteContext.empty(), out)
Commit 7: GH-5744: migrate rdf4j-sail-memory to Jackson 3
Update QueryPlanRetrievalTest to use
tools.jackson.databind.{JsonNode,ObjectMapper} instead of
com.fasterxml.jackson.databind. Jackson 3 arrives transitively, so no
pom.xml change is required.
PR Author Checklist (see the contributor guidelines for more details):
mvn process-resourcesto format from the command line)