[JAVA-1772] Make it easier to change JsonWriter behaviour Created: 20/Apr/15  Updated: 03/Jun/22  Resolved: 11/Jan/17

Status: Closed
Project: Java Driver
Component/s: JSON
Affects Version/s: 3.0.0
Fix Version/s: 3.5.0

Type: New Feature Priority: Major - P3
Reporter: Francisco Alejandro Lozano López Assignee: Jeffrey Yemin
Resolution: Done Votes: 2
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Depends
Related
is related to JAVA-1280 In JsonWriter, support writing BSON I... Closed
is related to JAVA-2173 add new Enum value for org.bson.json.... Closed
is related to JAVA-2489 Add to Enum<JsonMode> Closed
Backwards Compatibility: Fully Compatible

 Description   

I'm trying to override JsonWriter's doWriteInt64 so that it writes values with just Long.toString() representation.

In the code, there's:

    @Override
    protected void doWriteInt64(final long value) {
        try {
            switch (settings.getOutputMode()) {
                case STRICT:
                    writeStartDocument();
                    writeNameHelper("$numberLong");
                    writer.write(format("\"%d\"", value));
                    writeEndDocument();
                    break;
                case SHELL:
                    writeNameHelper(getName());
                    if (value >= Integer.MIN_VALUE && value <= Integer.MAX_VALUE) {
                        writer.write(format("NumberLong(%d)", value));
                    } else {
                        writer.write(format("NumberLong(\"%d\")", value));
                    }
                    break;
                default:
                    writeNameHelper(getName());
                    writer.write(Long.toString(value));
                    break;
            }
        } catch (IOException e) {
            throwBSONException(e);
        }
    }

but, if I've understood correctly the code, the "default" never gets called, because outputMode will always be either STRICT or SHELL.

I've tried to override and write my own version (just copy the "default:" code), but writeNameHelper is private and I can't access it.

Can you make it at least protected?



 Comments   
Comment by Githook User [ 02/Feb/17 ]

Author:

{u'username': u'rozza', u'name': u'Ross Lawley', u'email': u'ross.lawley@gmail.com'}

Message: Javadoc: Corrected @since values

JAVA-1772
Branch: master
https://github.com/mongodb/mongo-java-driver/commit/56424111c519d391fac4aa6572d686057712b57e

Comment by Githook User [ 11/Jan/17 ]

Author:

{u'username': u'jyemin', u'name': u'Jeff Yemin', u'email': u'jeff.yemin@10gen.com'}

Message: JAVA-1772: Allow registration of a custom Converter for each BSON type in JsonWriterSettings
Branch: master
https://github.com/mongodb/mongo-java-driver/commit/fc1ce68ef7dde2c5d8cf2913b5a7758a785a7bfc

Comment by Jeffrey Yemin [ 20/Apr/15 ]

We'll definitely look into it. At first glance, I'd prefer instead to extract a protected doWriteInt64Strict method.

Generated at Thu Feb 08 08:55:27 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.