Copilot commented on code in PR #3353:
URL: https://github.com/apache/tika/pull/3353#discussion_r4308409878
##########
tika-detectors/tika-detector-magika/pom.xml:
##########
@@ -51,7 +51,7 @@
<groupId>${project.groupId}</groupId>
<artifactId>tika-serialization</artifactId>
<version>${project.version}</version>
- <scope>test</scope>
+ <scope>provided</scope>
Review Comment:
`MagikaDetector` now invokes `TikaObjectMapperFactory` during static
initialization, including for default/programmatic construction. `provided`
does not supply serialization to downstream applications, so consumers using
this detector and `tika-core` without separately adding serialization fail with
`NoClassDefFoundError` before detection starts. Use compile scope.
##########
tika-detectors/tika-detector-siegfried/pom.xml:
##########
@@ -39,7 +39,7 @@
<groupId>${project.groupId}</groupId>
<artifactId>tika-serialization</artifactId>
<version>${project.version}</version>
- <scope>test</scope>
+ <scope>provided</scope>
Review Comment:
`SiegfriedDetector` now invokes `TikaObjectMapperFactory` during static
initialization, including for default/programmatic construction. `provided`
does not supply serialization to downstream applications, so consumers using
this detector and `tika-core` without separately adding serialization fail with
`NoClassDefFoundError` before detection starts. Use compile scope.
##########
tika-grpc/src/main/java/org/apache/tika/pipes/grpc/TikaGrpcServerImpl.java:
##########
@@ -83,9 +83,8 @@
class TikaGrpcServerImpl extends TikaGrpc.TikaImplBase {
private static final Logger LOG =
LoggerFactory.getLogger(TikaGrpcServerImpl.class);
- private static final ObjectMapper OBJECT_MAPPER = JsonMapper.builder()
-
.defaultPropertyInclusion(JsonInclude.Value.construct(JsonInclude.Include.NON_NULL,
JsonInclude.Include.NON_NULL))
- .build();
+ private static final ObjectMapper OBJECT_MAPPER =
TikaObjectMapperFactory.createPlainMapper()
Review Comment:
`buildRequestParseContext` uses this mapper to read `parse_context_json`.
The plain mapper silently collapses duplicate configuration keys during
`readTree`, before `resolveAll` can validate them. Use a strict mapper for that
initial read so gRPC requests follow the new duplicate-key policy, and add a
regression test for this entry point.
##########
tika-langdetect/tika-langdetect-lingo24/pom.xml:
##########
@@ -46,6 +46,12 @@
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tika-serialization</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
Review Comment:
`Lingo24LangDetector` now calls `TikaObjectMapperFactory` to read service
responses, even without JSON component configuration. `provided` leaves this
dependency out of downstream runtime classpaths, so consumers using this module
and `tika-core` without separately adding serialization encounter
`NoClassDefFoundError`. Use compile scope.
##########
tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/TikaResource.java:
##########
@@ -246,7 +247,7 @@ public static String detectFilename(MultivaluedMap<String,
String> httpHeaders)
* @throws IOException if parsing fails
*/
public static void mergeParseContextFromConfig(String configJson,
ParseContext context) throws IOException, TikaConfigException {
- ObjectMapper mapper = new ObjectMapper();
+ ObjectMapper mapper = TikaObjectMapperFactory.createPlainMapper();
Review Comment:
This reads component configuration with a plain data mapper. Duplicate keys
in a multipart `config` part are silently collapsed by `readTree` before
`readParseContext` or the strict configuration readers can reject them,
contrary to the new duplicate-key policy. Use a strict mapper for this initial
read and add a request-level regression test.
##########
tika-parsers/tika-parsers-ml/tika-vlm/pom.xml:
##########
@@ -81,7 +81,7 @@
<groupId>${project.groupId}</groupId>
<artifactId>tika-serialization</artifactId>
<version>${project.version}</version>
- <scope>test</scope>
+ <scope>provided</scope>
Review Comment:
All three VLM parsers now initialize static mappers through
`TikaObjectMapperFactory`, even when constructed with Java config objects. This
`provided` declaration overrides the ML parent's compile-scoped serialization
dependency, leaving standalone consumers without the required class and causing
`NoClassDefFoundError` during parser initialization. Use compile scope.
##########
tika-translate/pom.xml:
##########
@@ -41,6 +41,12 @@
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tika-serialization</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
Review Comment:
The translators now call `TikaObjectMapperFactory` when reading ordinary API
responses. `provided` does not propagate this dependency to downstream
applications, so consumers using `tika-core` and `tika-translate` without
separately adding `tika-serialization` now encounter `NoClassDefFoundError`.
Use compile scope for this new runtime requirement.
##########
tika-langdetect/tika-langdetect-mitll-text/pom.xml:
##########
@@ -41,6 +41,12 @@
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>tika-serialization</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
Review Comment:
`TextLangDetector` now calls `TikaObjectMapperFactory` when reading language
lists and detection responses. With `provided` scope, consumers using this
module and `tika-core` without separately adding `tika-serialization` encounter
`NoClassDefFoundError` on those paths. Use compile scope to propagate the
required runtime dependency.
##########
tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/serialization/JsonFetchEmitTupleList.java:
##########
@@ -40,7 +41,7 @@ public class JsonFetchEmitTupleList {
/** Envelope key: the body must be {"tuples":[...]}; a bare array is
rejected. */
public static final String TUPLES = "tuples";
- private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+ private static final ObjectMapper OBJECT_MAPPER =
TikaObjectMapperFactory.createPlainMapper();
Review Comment:
`fromJson` reads the entire tuple envelope, including `parseContext`, into a
tree with this plain mapper. Duplicate configuration keys are already collapsed
when the restricted deserializer receives that tree, so later strict readers
cannot reject them. Use a strict mapper at the initial read and cover duplicate
keys inside a tuple's `parseContext`.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]