Yes, please try to use the QueryUtilStrict class. We did at some point a certain refactoring for those cases where server implementations want to to enhancements to the grammar. The sample is the most up-to-date code we have. This should be a good starting point.
The error message indicates that your query string has some characters at the end after the query string ends. Jens On 25/07/14 15:34, "robert.willia...@wellsfargo.com" <robert.willia...@wellsfargo.com> wrote: >Hello, > >I am new to CMIS and I am presently looking at handling query >functionality in our CMIS Server,. To this end, I am attempting to >implement the code specified in section 1.7 entitled "Parsing a CMIS >Query" in chapter 14 of the text CMIS and Apache Chemistry in Action. >While this example code seems very straight forward, I am getting the >following error when invoking it for the CMIS SQL statement: Select * >from cmis:document where cmis:name = 'My_Document-0-0'. I have tried >variations such as ending the SQL statement with a semicolon and others, >but the result has been the same. > > <faultstring>Query String has illegal tokens after end of >statement: [@15,63:63='<EOF>',<-1>,1:63]</faultstring> > <detail> > <cmisFault:cmisFault >xmlns:ns2="http://docs.oasis-open.org/ns/cmis/core/200908/" >xmlns="http://docs.oasis-open.org/ns/cmis/messaging/200908/" >xmlns:cmisFault="http://docs.oasis-open.org/ns/cmis/messaging/200908/"> > <type>invalidArgument</type> > <code>0</code> > <message>Query String has illegal tokens after end of >statement: [@15,63:63='<EOF>',<-1>,1:63]</message> > <stacktrace:stacktrace >xmlns="http://chemistry.apache.org/opencmis/exception" >xmlns:stacktrace="http://chemistry.apache.org/opencmis/exception">org.apac >he.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException: >Query String has illegal tokens after end of statement: >[@15,63:63='<EOF>',<-1>,1:63] > at >org.apache.chemistry.opencmis.server.support.query.QueryUtil.getWalker(Que >ryUtil.java:83) > at >org.apache.chemistry.opencmis.server.support.query.QueryUtil.traverseState >ment(QueryUtil.java:112) > >Based on debugging that I've performed, the CMIS SQL statement looks like >it is getting into the code unaltered, but it goes off the rails >somewhere. > >The following is the QueryUtil::getWalker() method that is failing, >specifically the highlighted code: > > public static CmisQueryWalker getWalker(String statement) throws >RecognitionException { > CharStream input = new ANTLRStringStream(statement); > TokenSource lexer = new CmisQlStrictLexer(input); > TokenStream tokens = new CommonTokenStream(lexer); > CmisQlStrictParser parser = new CmisQlStrictParser(tokens); > CommonTree parserTree; // the ANTLR tree after parsing phase > > query_return parsedStatement = parser.query(); > if (parser.hasErrors()) { > throw new >CmisInvalidArgumentException(parser.getErrorMessages()); > } else if ( tokens.index()!=tokens.size() ) { > throw new CmisInvalidArgumentException("Query String has >illegal tokens after end of statement: " + tokens.get(tokens.index())); > } > > parserTree = (CommonTree) parsedStatement.getTree(); > > CommonTreeNodeStream nodes = new CommonTreeNodeStream(parserTree); > nodes.setTokenStream(tokens); > CmisQueryWalker walker = new CmisQueryWalker(nodes); > return walker; > } > >I did notice that the QueryUtil class is deprecated. Further, as a >result of digging around, I have discovered an OpenCMIS Query Parser >Example directory. The parsing done in these files uses the >QueryUtilStrict class and seems to be done a little differently. Should >I use this example code for CMIS SQL parsing instead of the example in >the text? > >Thanks in advance for any and all assistance! > >