ttideveloper opened a new issue, #7183:
URL: https://github.com/apache/hop/issues/7183

   ### Apache Hop version?
   
   2.17.0
   
   ### Java version?
   
   openjdk version "17.0.19" 2026-04-21 LTS OpenJDK Runtime Environment 
Microsoft-13877129 (build 17.0.19+10-LTS) OpenJDK 64-Bit Server VM 
Microsoft-13877129 (build 17.0.19+10-LTS, mixed mode, sharing)
   
   ### Operating system
   
   Windows
   
   ### What happened?
   
   Component: MongoDB Plugin (hop-transform-mongodb)
   
   Description:
   
   After the upgrade to BSON driver 5.6.1 in Hop 2.17, the MongoDB Output 
transform can no longer use _id (or any ObjectId-typed field) as an update 
match field. This is a regression from Hop 2.16.
   
   Root cause: MongoDbOutputData.setMongoValueFromHopValue() calls 
Document.parse() on the incoming field value when json_field=Y. For ObjectId 
fields, the value is MongoDB extended JSON: {"$oid": 
"6a15efdd0a93aa5ed3b4b947"}. In BSON 4.x, Document.parse() handled this 
correctly. In BSON 5.x, the parser recognizes {"$oid": "..."} as an OBJECT_ID 
type at the top level and throws BsonInvalidOperationException because 
readStartDocument expects DOCUMENT, not OBJECT_ID.
   
   Stack trace:
   
   org.bson.BsonInvalidOperationException: readStartDocument can only be called 
when CurrentBSONType is DOCUMENT, not when CurrentBSONType is OBJECT_ID.
       at 
org.bson.AbstractBsonReader.verifyBSONType(AbstractBsonReader.java:689)
       at 
org.bson.AbstractBsonReader.checkPreconditions(AbstractBsonReader.java:721)
       at 
org.bson.AbstractBsonReader.readStartDocument(AbstractBsonReader.java:449)
       at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:173)
       at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:44)
       at org.bson.Document.parse(Document.java:129)
       at org.bson.Document.parse(Document.java:114)
       at 
org.apache.hop.pipeline.transforms.mongodboutput.MongoDbOutputData.setMongoValueFromHopValue(MongoDbOutputData.java:818)
       at 
org.apache.hop.pipeline.transforms.mongodboutput.MongoDbOutputData.getQueryObject(MongoDbOutputData.java:576)
       at 
org.apache.hop.pipeline.transforms.mongodboutput.MongoDbOutput.processRow(MongoDbOutput.java:171)
   
   Workarounds attempted:
   
   - Setting json_field=N avoids the parse crash, but the _id value is then 
passed as a String, which won't match an ObjectId in MongoDB (different BSON 
types). Updates silently match zero documents.
   - Matching on alternative non-ObjectId fields (e.g., integer fields) works 
but sacrifices the built-in _id index and requires schema-specific workarounds.
   
   Reproduction test (JUnit 5, depends on org.mongodb:bson:5.6.1):
   
   import org.bson.BsonInvalidOperationException;
   import org.bson.Document;
   import org.junit.jupiter.api.Test;
   import static org.junit.jupiter.api.Assertions.*;
   
   class BsonObjectIdParseTest {
   
       @Test
       void parseObjectIdExtendedJson_failsOnBson5() {
           // Reproduces the crash in 
MongoDbOutputData.setMongoValueFromHopValue()
           assertThrows(BsonInvalidOperationException.class, () -> {
               Document.parse("{\"$oid\": \"6a15efdd0a93aa5ed3b4b947\"}");
           });
       }
   
       @Test
       void parseDocumentContainingObjectId_stillWorks() {
           // Wrapping inside a parent document works — suggests a possible fix 
path
           Document doc = Document.parse("{\"_id\": {\"$oid\": 
\"6a15efdd0a93aa5ed3b4b947\"}}");
           assertNotNull(doc.getObjectId("_id"));
       }
   }
   
   ### Issue Priority
   
   Priority: 3
   
   ### Issue Component
   
   Component: Other


-- 
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]

Reply via email to