2016-01-22 24 views
3

这是我的问题:当我尝试在包含单引号或双引号的CMIS查询中传递查询字符串时,它不会执行并给出如下错误:错误调用CMIS查询如果字符串包含单引号或双引号

06:19:23,306 ERROR [DispatcherPortlet:561] Could not complete request 
org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException: Internal Server Error 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubService.convertStatusCode(AbstractAtomPubService.java:506) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubService.post(AbstractAtomPubService.java:661) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.DiscoveryServiceImpl.query(DiscoveryServiceImpl.java:179) 
at org.apache.chemistry.opencmis.client.runtime.SessionImpl$6.fetchPage(SessionImpl.java:935) 
at org.apache.chemistry.opencmis.client.runtime.util.AbstractIterator.getCurrentPage(AbstractIterator.java:132) 
at org.apache.chemistry.opencmis.client.runtime.util.AbstractIterator.getPageNumItems(AbstractIterator.java:57) 
at org.apache.chemistry.opencmis.client.runtime.util.AbstractIterable.getPageNumItems(AbstractIterable.java:86) 
at com.zeetv.util.UtilMethods.getQueryResults(UtilMethods.java:349) 
at com.zeetv.action.twitter.TwitterController.checkTitle(TwitterController.java:121) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175) 
at org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:369) 
at org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter.doHandle(AnnotationMethodHandlerAdapter.java:356) 
at org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter.handleResource(AnnotationMethodHandlerAdapter.java:302) 
at org.springframework.web.portlet.DispatcherPortlet.doResourceService(DispatcherPortlet.java:859) 
at org.springframework.web.portlet.FrameworkPortlet.processRequest(FrameworkPortlet.java:527) 
at org.springframework.web.portlet.FrameworkPortlet.serveResource(FrameworkPortlet.java:479) 

这里是我的查询字符串:

select * from my:content where cmis:name Like 'test's new content1' 

我也试过这样:

select * from my:content where cmis:name Like '"test's new content1"' 

提前致谢。

+3

您可能想要使用OpenCMIS QueryStatement类(https://chemistry.apache.org/java/0.13.0/maven/apidocs/org/apache/chemistry/opencmis/client/api/QueryStatement.html) 。它为你逃脱了一切。 –

+0

当你用“Liferay”标记这个:这是与Liferay的CMIS商店相关吗?还是你对Alfresco执行的查询恰好在Liferay应用程序中? –

+0

@OlafKock是的,我从liferay打电话给露天。 – User14141111

回答

3

请考虑审查this

字符串文字单引号括起来。转义不遵循SQL-92转义。字符串文字中的两个单引号不代表引号字符:''''不是单引号字面量。

CMIS使用上下文确定的可用转义字符定义基于反斜杠的转义。

'bob\'s' is used in place of 'bob''s'

SELECT * from cmis:document WHERE cmis:name = 'bob\'s'

基本转义:

  • \\ represents \
  • \' represents '

...

相关问题