27
27
import java .util .Locale ;
28
28
import java .util .Map ;
29
29
import java .util .TimeZone ;
30
+ import java .util .UUID ;
30
31
import java .util .function .Supplier ;
31
32
import java .util .regex .Matcher ;
32
33
import java .util .regex .Pattern ;
@@ -289,10 +290,9 @@ public BsonType readBsonType() {
289
290
} else if ("DBPointer" .equals (value )) {
290
291
setCurrentBsonType (BsonType .DB_POINTER );
291
292
currentValue = visitDBPointerConstructor ();
292
- } else if ("UUID" .equals (value ) || "GUID" .equals (value ) || "CSUUID" .equals (value ) || "CSGUID" .equals (value )
293
- || "JUUID" .equals (value ) || "JGUID" .equals (value ) || "PYUUID" .equals (value ) || "PYGUID" .equals (value )) {
293
+ } else if ("UUID" .equals (value )) {
294
294
setCurrentBsonType (BsonType .BINARY );
295
- currentValue = visitUUIDConstructor (value );
295
+ currentValue = visitUUIDConstructor ();
296
296
} else if ("new" .equals (value )) {
297
297
visitNew ();
298
298
} else {
@@ -840,9 +840,8 @@ private void visitNew() {
840
840
} else if ("DBPointer" .equals (value )) {
841
841
currentValue = visitDBPointerConstructor ();
842
842
setCurrentBsonType (BsonType .DB_POINTER );
843
- } else if ("UUID" .equals (value ) || "GUID" .equals (value ) || "CSUUID" .equals (value ) || "CSGUID" .equals (value )
844
- || "JUUID" .equals (value ) || "JGUID" .equals (value ) || "PYUUID" .equals (value ) || "PYGUID" .equals (value )) {
845
- currentValue = visitUUIDConstructor (value );
843
+ } else if ("UUID" .equals (value )) {
844
+ currentValue = visitUUIDConstructor ();
846
845
setCurrentBsonType (BsonType .BINARY );
847
846
} else {
848
847
throw new JsonParseException ("JSON reader expected a type name but found '%s'." , value );
@@ -862,7 +861,13 @@ private void visitExtendedJSON() {
862
861
setCurrentBsonType (BsonType .BINARY );
863
862
return ;
864
863
}
865
- } else if ("$regex" .equals (value ) || "$options" .equals (value )) {
864
+ }
865
+ if ("$uuid" .equals (value )) {
866
+ currentValue = visitUuidExtendedJson ();
867
+ setCurrentBsonType (BsonType .BINARY );
868
+ return ;
869
+ }
870
+ else if ("$regex" .equals (value ) || "$options" .equals (value )) {
866
871
currentValue = visitRegularExpressionExtendedJson (value );
867
872
if (currentValue != null ) {
868
873
setCurrentBsonType (BsonType .REGULAR_EXPRESSION );
@@ -956,16 +961,12 @@ private BsonBinary visitBinDataConstructor() {
956
961
return new BsonBinary (subTypeToken .getValue (Integer .class ).byteValue (), bytes );
957
962
}
958
963
959
- private BsonBinary visitUUIDConstructor (final String uuidConstructorName ) {
960
- verifyToken (JsonTokenType .LEFT_PAREN );
961
- String hexString = readStringFromExtendedJson ().replaceAll ("\\ {" , "" ).replaceAll ("}" , "" ).replaceAll ("-" , "" );
962
- verifyToken (JsonTokenType .RIGHT_PAREN );
963
- byte [] bytes = decodeHex (hexString );
964
- BsonBinarySubType subType = BsonBinarySubType .UUID_STANDARD ;
965
- if (!"UUID" .equals (uuidConstructorName ) || !"GUID" .equals (uuidConstructorName )) {
966
- subType = BsonBinarySubType .UUID_LEGACY ;
967
- }
968
- return new BsonBinary (subType , bytes );
964
+ private BsonBinary visitUUIDConstructor () {
965
+ this .verifyToken (JsonTokenType .LEFT_PAREN );
966
+ String hexString = this .readStringFromExtendedJson ().replace ("-" , "" );
967
+
968
+ this .verifyToken (JsonTokenType .RIGHT_PAREN );
969
+ return new BsonBinary (BsonBinarySubType .UUID_STANDARD , decodeHex (hexString ));
969
970
}
970
971
971
972
private BsonRegularExpression visitRegularExpressionConstructor () {
@@ -1484,6 +1485,17 @@ private int readIntFromExtendedJson() {
1484
1485
return value ;
1485
1486
}
1486
1487
1488
+ private BsonBinary visitUuidExtendedJson () {
1489
+ verifyToken (JsonTokenType .COLON );
1490
+ String hexString = this .readStringFromExtendedJson ().replace ("-" , "" );
1491
+ verifyToken (JsonTokenType .END_OBJECT );
1492
+ try {
1493
+ return new BsonBinary (BsonBinarySubType .UUID_STANDARD , decodeHex (hexString ));
1494
+ } catch (IllegalArgumentException e ) {
1495
+ throw new JsonParseException (e );
1496
+ }
1497
+ }
1498
+
1487
1499
private void visitJavaScriptExtendedJson () {
1488
1500
verifyToken (JsonTokenType .COLON );
1489
1501
String code = readStringFromExtendedJson ();
0 commit comments