QueryUtil converts the query statement to a UTF-8 encoded byte array which is used as input to the lexer instead of using the string directly.
CharStream input = new ANTLRInputStream(new ByteArrayInputStream(statement.getBytes("UTF-8")));
the input stream should be obtained like this:
CharStream input = new ANTLRStringStream(statement);
The former method transforms the characters in the contains clause of the query
SELECT * FROM cmis:document WHERE CONTAINS ('\u4E2D\u6587')
in an incorrect way.