diff --git a/jre/src/main/java/com/azure/data/cosmos/core/UtfAnyString.java b/jre/src/main/java/com/azure/data/cosmos/core/UtfAnyString.java
new file mode 100644
index 0000000..db2627d
--- /dev/null
+++ b/jre/src/main/java/com/azure/data/cosmos/core/UtfAnyString.java
@@ -0,0 +1,543 @@
+package Microsoft.Azure.Cosmos.Core.Utf8;
+
+// ------------------------------------------------------------
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// ------------------------------------------------------------
+
+//C# TO JAVA CONVERTER TODO TASK: There is no preprocessor in Java:
+///#pragma warning disable CA2225 // Operator overloads have named alternates
+
+// ReSharper disable once UseNameofExpression
+
+/** A string whose memory representation may be either UTF8 or UTF16.
+
+ This type supports polymorphic use of and
+ when equality, hashing, and comparison are needed against either encoding. An API leveraging
+ can avoid separate method overloads while still accepting either
+ encoding without imposing additional allocations.
+
+*/
+//C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to .NET attributes:
+//ORIGINAL LINE: [DebuggerDisplay("{ToString()}")] public readonly struct UtfAnyString : IEquatable, IComparable, IEquatable, IComparable, IEquatable, IComparable
+//C# TO JAVA CONVERTER WARNING: Java does not allow user-defined value types. The behavior of this class may differ from the original:
+//ORIGINAL LINE: [DebuggerDisplay("{ToString()}")] public readonly struct UtfAnyString : IEquatable, IComparable, IEquatable, IComparable, IEquatable, IComparable
+//C# TO JAVA CONVERTER WARNING: Java has no equivalent to the C# readonly struct:
+public final class UtfAnyString implements IEquatable, java.lang.Comparable, IEquatable, java.lang.Comparable, IEquatable, java.lang.Comparable
+{
+ public static UtfAnyString getEmpty()
+ {
+ return "";
+ }
+
+ private Object buffer;
+
+//C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to .NET attributes:
+//ORIGINAL LINE: [MethodImpl(MethodImplOptions.AggressiveInlining)] public UtfAnyString(string utf16String)
+ public UtfAnyString()
+ {
+ }
+
+ public UtfAnyString(String utf16String)
+ {
+ this.buffer = utf16String;
+ }
+
+//C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to .NET attributes:
+//ORIGINAL LINE: [MethodImpl(MethodImplOptions.AggressiveInlining)] public UtfAnyString(Utf8String utf8String)
+ public UtfAnyString(Utf8String utf8String)
+ {
+ this.buffer = utf8String;
+ }
+
+ public boolean getIsUtf8()
+ {
+ return this.buffer instanceof Utf8String;
+ }
+
+ public boolean getIsUtf16()
+ {
+ return this.buffer instanceof String;
+ }
+
+ /** True if the length is empty.
+ */
+ public boolean getIsNull()
+ {
+ return null == this.buffer;
+ }
+
+ /** True if the length is empty.
+ */
+ public boolean getIsEmpty()
+ {
+ if (null == this.buffer)
+ {
+ return false;
+ }
+
+ switch (this.buffer)
+ {
+//C# TO JAVA CONVERTER TODO TASK: Java has no equivalent to C# pattern variables in 'case' statements:
+//ORIGINAL LINE: case string s:
+ case String s:
+ return s.Length == 0;
+ default:
+ return ((Utf8String)this.buffer).getIsEmpty();
+ }
+ }
+
+//C# TO JAVA CONVERTER TODO TASK: The following operator overload is not converted by C# to Java Converter:
+ public static implicit operator UtfAnyString(String utf16String)
+ {
+ return new UtfAnyString(utf16String);
+ }
+
+//C# TO JAVA CONVERTER TODO TASK: The following operator overload is not converted by C# to Java Converter:
+ public static implicit operator string(UtfAnyString str)
+ {
+ return str.buffer == null ? null : str.buffer.toString();
+ }
+
+ @Override
+ public String toString()
+ {
+ // ReSharper disable once AssignNullToNotNullAttribute
+ return this.buffer == null ? null : this.buffer.toString();
+ }
+
+ public Utf8String ToUtf8String()
+ {
+ if (null == this.buffer)
+ {
+ return null;
+ }
+
+ switch (this.buffer)
+ {
+//C# TO JAVA CONVERTER TODO TASK: Java has no equivalent to C# pattern variables in 'case' statements:
+//ORIGINAL LINE: case string s:
+ case String s:
+ return Utf8String.TranscodeUtf16(s);
+ default:
+ return (Utf8String)this.buffer;
+ }
+ }
+
+ public boolean ReferenceEquals(UtfAnyString other)
+ {
+ return this.buffer == other.buffer;
+ }
+
+ public boolean equals(UtfAnyString other)
+ {
+ if (null == this.buffer)
+ {
+ return null == other.buffer;
+ }
+
+ switch (this.buffer)
+ {
+//C# TO JAVA CONVERTER TODO TASK: Java has no equivalent to C# pattern variables in 'case' statements:
+//ORIGINAL LINE: case string s:
+ case String s:
+ return other.equals(s);
+ default:
+ return other.equals((Utf8String)this.buffer);
+ }
+ }
+
+ public boolean equals(Utf8Span other)
+ {
+ return other.equals(this.buffer);
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ switch (obj)
+ {
+//C# TO JAVA CONVERTER TODO TASK: Java has no equivalent to C# pattern variables in 'case' statements:
+//ORIGINAL LINE: case string s:
+ case String s:
+ return this.equals(s);
+//C# TO JAVA CONVERTER TODO TASK: Java has no equivalent to C# pattern variables in 'case' statements:
+//ORIGINAL LINE: case Utf8String s:
+ case Utf8String s:
+ return this.equals(s);
+//C# TO JAVA CONVERTER TODO TASK: Java has no equivalent to C# pattern variables in 'case' statements:
+//ORIGINAL LINE: case UtfAnyString s:
+ case UtfAnyString s:
+ return this.equals(s);
+ }
+
+ return false;
+ }
+
+ public boolean equals(Utf8String other)
+ {
+ if (null == other)
+ {
+ return null == this.buffer;
+ }
+
+ return other.equals(this.buffer);
+ }
+
+ public boolean equals(String other)
+ {
+ if (null == this.buffer)
+ {
+ return null == other;
+ }
+
+ switch (this.buffer)
+ {
+//C# TO JAVA CONVERTER TODO TASK: Java has no equivalent to C# pattern variables in 'case' statements:
+//ORIGINAL LINE: case string s:
+ case String s:
+ return String.equals(s, other);
+ default:
+ return ((Utf8String)this.buffer).equals(other);
+ }
+ }
+
+ public static boolean opEquals(UtfAnyString left, UtfAnyString right)
+ {
+ return left.equals(right.clone());
+ }
+
+ public static boolean opNotEquals(UtfAnyString left, UtfAnyString right)
+ {
+ return !left.equals(right.clone());
+ }
+
+ public static boolean opEquals(UtfAnyString left, String right)
+ {
+ return left.equals(right);
+ }
+
+ public static boolean opNotEquals(UtfAnyString left, String right)
+ {
+ return !left.equals(right);
+ }
+
+ public static boolean opEquals(String left, UtfAnyString right)
+ {
+ return right.equals(left);
+ }
+
+ public static boolean opNotEquals(String left, UtfAnyString right)
+ {
+ return !right.equals(left);
+ }
+
+ public static boolean opEquals(UtfAnyString left, Utf8String right)
+ {
+ return left.equals(right);
+ }
+
+ public static boolean opNotEquals(UtfAnyString left, Utf8String right)
+ {
+ return !left.equals(right);
+ }
+
+ public static boolean opEquals(Utf8String left, UtfAnyString right)
+ {
+ return right.equals(left);
+ }
+
+ public static boolean opNotEquals(Utf8String left, UtfAnyString right)
+ {
+ return !right.equals(left);
+ }
+
+ public static boolean opEquals(UtfAnyString left, Utf8Span right)
+ {
+ return left.equals(right);
+ }
+
+ public static boolean opNotEquals(UtfAnyString left, Utf8Span right)
+ {
+ return !left.equals(right);
+ }
+
+ public static boolean opEquals(Utf8Span left, UtfAnyString right)
+ {
+ return right.equals(left);
+ }
+
+ public static boolean opNotEquals(Utf8Span left, UtfAnyString right)
+ {
+ return !right.equals(left);
+ }
+
+ @Override
+ public int hashCode()
+ {
+//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java:
+//ORIGINAL LINE: uint hash1 = 5381;
+ int hash1 = 5381;
+//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java:
+//ORIGINAL LINE: uint hash2 = hash1;
+ int hash2 = hash1;
+
+ if (null == this.buffer)
+ {
+//C# TO JAVA CONVERTER TODO TASK: There is no Java equivalent to 'unchecked' in this context:
+//ORIGINAL LINE: return unchecked((int)(hash1 + (hash2 * 1566083941)));
+ return (int)(hash1 + (hash2 * 1566083941));
+ }
+
+ switch (this.buffer)
+ {
+//C# TO JAVA CONVERTER TODO TASK: Java has no equivalent to C# pattern variables in 'case' statements:
+//ORIGINAL LINE: case string s:
+ case String s:
+//C# TO JAVA CONVERTER TODO TASK: There is no equivalent to an 'unchecked' block in Java:
+ unchecked
+ {
+ Utf16LittleEndianCodePointEnumerator thisEnumerator = new Utf16LittleEndianCodePointEnumerator(s);
+ for (int i = 0; thisEnumerator.MoveNext(); i++)
+ {
+//C# TO JAVA CONVERTER WARNING: Unsigned integer types have no direct equivalent in Java:
+//ORIGINAL LINE: uint c = thisEnumerator.Current;
+ int c = thisEnumerator.Current;
+ if (i % 2 == 0)
+ {
+ hash1 = ((hash1 << 5) + hash1) ^ c;
+ }
+ else
+ {
+ hash2 = ((hash2 << 5) + hash2) ^ c;
+ }
+ }
+
+ return (int)(hash1 + (hash2 * 1566083941));
+ }
+
+ default:
+ return this.buffer.hashCode();
+ }
+ }
+
+ public static boolean opLessThan(UtfAnyString left, UtfAnyString right)
+ {
+ return left.CompareTo(right.clone()) < 0;
+ }
+
+ public static boolean opLessThanOrEquals(UtfAnyString left, UtfAnyString right)
+ {
+ return left.CompareTo(right.clone()) <= 0;
+ }
+
+ public static boolean opGreaterThan(UtfAnyString left, UtfAnyString right)
+ {
+ return left.CompareTo(right.clone()) > 0;
+ }
+
+ public static boolean opGreaterThanOrEquals(UtfAnyString left, UtfAnyString right)
+ {
+ return left.CompareTo(right.clone()) >= 0;
+ }
+
+ public static boolean opLessThan(UtfAnyString left, String right)
+ {
+ return left.CompareTo(right) < 0;
+ }
+
+ public static boolean opLessThanOrEquals(UtfAnyString left, String right)
+ {
+ return left.CompareTo(right) <= 0;
+ }
+
+ public static boolean opGreaterThan(UtfAnyString left, String right)
+ {
+ return left.CompareTo(right) > 0;
+ }
+
+ public static boolean opGreaterThanOrEquals(UtfAnyString left, String right)
+ {
+ return left.CompareTo(right) >= 0;
+ }
+
+ public static boolean opLessThan(String left, UtfAnyString right)
+ {
+ return right.CompareTo(left) >= 0;
+ }
+
+ public static boolean opLessThanOrEquals(String left, UtfAnyString right)
+ {
+ return right.CompareTo(left) > 0;
+ }
+
+ public static boolean opGreaterThan(String left, UtfAnyString right)
+ {
+ return right.CompareTo(left) <= 0;
+ }
+
+ public static boolean opGreaterThanOrEquals(String left, UtfAnyString right)
+ {
+ return right.CompareTo(left) < 0;
+ }
+
+ public static boolean opLessThan(UtfAnyString left, Utf8String right)
+ {
+ return left.CompareTo(right) < 0;
+ }
+
+ public static boolean opLessThanOrEquals(UtfAnyString left, Utf8String right)
+ {
+ return left.CompareTo(right) <= 0;
+ }
+
+ public static boolean opGreaterThan(UtfAnyString left, Utf8String right)
+ {
+ return left.CompareTo(right) > 0;
+ }
+
+ public static boolean opGreaterThanOrEquals(UtfAnyString left, Utf8String right)
+ {
+ return left.CompareTo(right) >= 0;
+ }
+
+ public static boolean opLessThan(Utf8String left, UtfAnyString right)
+ {
+ return right.CompareTo(left) >= 0;
+ }
+
+ public static boolean opLessThanOrEquals(Utf8String left, UtfAnyString right)
+ {
+ return right.CompareTo(left) > 0;
+ }
+
+ public static boolean opGreaterThan(Utf8String left, UtfAnyString right)
+ {
+ return right.CompareTo(left) <= 0;
+ }
+
+ public static boolean opGreaterThanOrEquals(Utf8String left, UtfAnyString right)
+ {
+ return right.CompareTo(left) < 0;
+ }
+
+ public static boolean opLessThan(UtfAnyString left, Utf8Span right)
+ {
+ return left.CompareTo(right) < 0;
+ }
+
+ public static boolean opLessThanOrEquals(UtfAnyString left, Utf8Span right)
+ {
+ return left.CompareTo(right) <= 0;
+ }
+
+ public static boolean opGreaterThan(UtfAnyString left, Utf8Span right)
+ {
+ return left.CompareTo(right) > 0;
+ }
+
+ public static boolean opGreaterThanOrEquals(UtfAnyString left, Utf8Span right)
+ {
+ return left.CompareTo(right) >= 0;
+ }
+
+ public static boolean opLessThan(Utf8Span left, UtfAnyString right)
+ {
+ return right.CompareTo(left) >= 0;
+ }
+
+ public static boolean opLessThanOrEquals(Utf8Span left, UtfAnyString right)
+ {
+ return right.CompareTo(left) > 0;
+ }
+
+ public static boolean opGreaterThan(Utf8Span left, UtfAnyString right)
+ {
+ return right.CompareTo(left) <= 0;
+ }
+
+ public static boolean opGreaterThanOrEquals(Utf8Span left, UtfAnyString right)
+ {
+ return right.CompareTo(left) < 0;
+ }
+
+ public int CompareTo(UtfAnyString other)
+ {
+ if (null == other.buffer)
+ {
+ return null == this.buffer ? 0 : 1;
+ }
+
+ switch (other.buffer)
+ {
+//C# TO JAVA CONVERTER TODO TASK: Java has no equivalent to C# pattern variables in 'case' statements:
+//ORIGINAL LINE: case string s:
+ case String s:
+ return this.CompareTo(s);
+ default:
+ return this.CompareTo((Utf8String)other.buffer);
+ }
+ }
+
+ public int CompareTo(Utf8String other)
+ {
+ if (null == this.buffer)
+ {
+ return null == other ? 0 : -1;
+ }
+
+ switch (this.buffer)
+ {
+//C# TO JAVA CONVERTER TODO TASK: Java has no equivalent to C# pattern variables in 'case' statements:
+//ORIGINAL LINE: case string s:
+ case String s:
+ return -other.getSpan().CompareTo(s);
+ default:
+ return -other.getSpan().CompareTo((Utf8String)this.buffer);
+ }
+ }
+
+ public int CompareTo(Utf8Span other)
+ {
+ if (null == this.buffer)
+ {
+ return -1;
+ }
+
+ switch (this.buffer)
+ {
+//C# TO JAVA CONVERTER TODO TASK: Java has no equivalent to C# pattern variables in 'case' statements:
+//ORIGINAL LINE: case string s:
+ case String s:
+ return -other.CompareTo(s);
+ default:
+ return -other.CompareTo((Utf8String)this.buffer);
+ }
+ }
+
+ public int CompareTo(String other)
+ {
+ if (null == this.buffer)
+ {
+ return null == other ? 0 : -1;
+ }
+
+ switch (this.buffer)
+ {
+//C# TO JAVA CONVERTER TODO TASK: Java has no equivalent to C# pattern variables in 'case' statements:
+//ORIGINAL LINE: case string s:
+ case String s:
+ return String.Compare(s, other, StringComparison.Ordinal);
+ default:
+ return ((Utf8String)this.buffer).compareTo(other);
+ }
+ }
+
+ public UtfAnyString clone()
+ {
+ UtfAnyString varCopy = new UtfAnyString();
+
+ varCopy.buffer = this.buffer;
+
+ return varCopy;
+ }
+}
\ No newline at end of file