You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@chemistry.apache.org by Slawek Karczewski <sl...@enigma.com.pl> on 2014/05/09 09:23:48 UTC

Question regarding 100 KB limitation, XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH)

Hello,

 

My name is Slawek Karczewski and I'm working with apache chemistry opencmis
version 0.10.0, trying to send the xml representation of a email document.

I have encountered problem which comes from the limitation of text field
length while parsing xml document, when uploading xml document to Nuxeo
repository over cmis.

 

I'm using createDocument method from Session interface from
org.apache.chemistry.opencmis.cleint.api:

 

(Map<String, ?> properties, ObjectId folderId, ContentStream contentStream,

            VersioningState versioningState);

 

The limitation is defined in  XMLConstraints.java class:

public class XMLConstraints {

    

    public static final int MAX_STRING_LENGTH = 100 * 1024;

.

}

 

And the exception is thrown from XMLUtils line (275):

                    if (sb.length() + len > maxLength) {

                        throw new CmisInvalidArgumentException("String limit
exceeded!");

 

from call :

return XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH);

 

and stack trace which I'm getting:

org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException:
Parsing exception!
        at
org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubSer
vice.parse(AbstractAtomPubService.java:590)
        at
org.apache.chemistry.opencmis.client.bindings.spi.atompub.ObjectServiceImpl.
createDocument(ObjectServiceImpl.java:126)
        at
org.apache.chemistry.opencmis.client.runtime.SessionImpl.createDocument(Sess
ionImpl.java:751)
        at
org.apache.chemistry.opencmis.client.runtime.SessionImpl.createDocument(Sess
ionImpl.java:882)
        at
pl.com.enigma.arch.repository.cmis.mailmanagement.MailManagementImpl.createM
ailHandler(MailManagementImpl.java:353)
        at
pl.com.enigma.arch.repository.cmis.mailmanagement.MailManagementImpl.createM
ail(MailManagementImpl.java:157)
        at
pl.com.enigma.arch.repository.cmis.mailmanagement.MailManagementImpl.createM
ail(MailManagementImpl.java:120)
        at
pl.com.enigma.arch.repository.webservices.mailmanagement.MailManagementServi
ceWSImpl.createMail(MailManagementServiceWSImpl.java:79)
        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:601)
        at
org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInv
oker.java:180)
        at
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:9
6)
        at
org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.invoke(AbstractJAXWSMethodIn
voker.java:178)
        at
org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:66)
        at
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:7
5)
        at
org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInt
erceptor.java:58)
        at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at
org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.jav
a:37)
        at
org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceIn
vokerInterceptor.java:107)
        at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain
.java:271)
        at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationOb
server.java:121)
        at
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDes
tination.java:238)
        at
org.apache.cxf.transport.servlet.ServletController.invokeDestination(Servlet
Controller.java:218)
        at
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.
java:198)
        at
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.
java:137)
        at
org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServ
let.java:158)
        at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractH
TTPServlet.java:243)
        at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServ
let.java:163)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
        at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPSer
vlet.java:219)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:305)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:210)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:222)
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:123)
        at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase
.java:472)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171
)
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:118)
        at
org.apache.catalina.ha.tcp.ReplicationValve.invoke(ReplicationValve.java:333
)
        at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
        at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Proce
ssor.java:1004)
        at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(Abstrac
tProtocol.java:589)
        at
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:
310)
        at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:11
10)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:6
03)
        at java.lang.Thread.run(Thread.java:722)
Caused by:
org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentExceptio
n: String limit exceeded!
        at
org.apache.chemistry.opencmis.commons.impl.XMLUtils.readText(XMLUtils.java:2
75)
        at
org.apache.chemistry.opencmis.commons.impl.XMLWalker.readText(XMLWalker.java
:173)
        at
org.apache.chemistry.opencmis.commons.impl.XMLConverter$PropertyStringXMLWal
ker.addValue(XMLConverter.java:2605)
        at
org.apache.chemistry.opencmis.commons.impl.XMLConverter$PropertyXMLWalker.re
ad(XMLConverter.java:2591)
        at
org.apache.chemistry.opencmis.commons.impl.XMLConverter$PropertyXMLWalker.re
ad(XMLConverter.java:2559)
        at
org.apache.chemistry.opencmis.commons.impl.XMLWalker.walk(XMLWalker.java:53)
        at
org.apache.chemistry.opencmis.commons.impl.XMLConverter$19.read(XMLConverter
.java:2237)
        at
org.apache.chemistry.opencmis.commons.impl.XMLConverter$19.read(XMLConverter
.java:2227)
        at
org.apache.chemistry.opencmis.commons.impl.XMLWalker.walk(XMLWalker.java:53)
        at
org.apache.chemistry.opencmis.commons.impl.XMLConverter$18.read(XMLConverter
.java:2183)
        at
org.apache.chemistry.opencmis.commons.impl.XMLConverter$18.read(XMLConverter
.java:2173)
        at
org.apache.chemistry.opencmis.commons.impl.XMLWalker.walk(XMLWalker.java:53)
        at
org.apache.chemistry.opencmis.commons.impl.XMLConverter.convertObject(XMLCon
verter.java:1099)
        at
org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.pars
eElement(AtomPubParser.java:324)
        at
org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.pars
eEntry(AtomPubParser.java:276)
        at
org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.pars
e(AtomPubParser.java:111)
        at
org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubSer
vice.parse(AbstractAtomPubService.java:588)



 

I've recompiled yours library changing the value to 50 MB. Could you please,
explain me, what is the reason of the 100 kB boundary of text field in xml
file ?

 

Kind regards,

Slawek Karczewski

Senior Software Developer


ENIGMA Systemy Ochrony Informacji Sp. z o. o., ul. Jutrzenki 116, 02-230
Warszawa, tel. 22 570 57 10,  <http://www.enigma.com.pl/> www.enigma.com.pl,
<ma...@enigma.com.pl> slawomir.karczewski@enigma.com.pl
Sąd Rejonowy dla m. st. Warszawy XIII Wydział Gospodarczy KRS 0000160395,
NIP 526 10 29 614, REGON 011149535, kapitał zakładowy i wpłacony 25.718.500
PLN

 

 


Re: Question regarding 100 KB limitation, XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH)

Posted by Florian Müller <fm...@apache.org>.
 Hi Slawek,

 The same code is used on the server side and protects servers from DoS 
 attacks. Clients shouldn't be allowed to send an infinite long property 
 value and with that consuming all resources of the server.
 On the client side, you could argue that you are only connecting to 
 trusted servers. But server bugs happen and so it also protects the 
 client (which could also be a server).
 The size of 100kb is an arbitrary choice and actually pretty generous. 
 Most ECM repository cannot store a property value of that size. Also, a 
 string of that size would be better managed as content, not as a 
 property value.


 - Florian


> Hello,
>
>
>
> My name is Slawek Karczewski and I'm working with apache chemistry 
> opencmis
> version 0.10.0, trying to send the xml representation of a email 
> document.
>
> I have encountered problem which comes from the limitation of text 
> field
> length while parsing xml document, when uploading xml document to 
> Nuxeo
> repository over cmis.
>
>
>
> I'm using createDocument method from Session interface from
> org.apache.chemistry.opencmis.cleint.api:
>
>
>
> (Map<String, ?> properties, ObjectId folderId, ContentStream 
> contentStream,
>
>             VersioningState versioningState);
>
>
>
> The limitation is defined in  XMLConstraints.java class:
>
> public class XMLConstraints {
>
>
>
>     public static final int MAX_STRING_LENGTH = 100 * 1024;
>
> .
>
> }
>
>
>
> And the exception is thrown from XMLUtils line (275):
>
>                     if (sb.length() + len > maxLength) {
>
>                         throw new 
> CmisInvalidArgumentException("String limit
> exceeded!");
>
>
>
> from call :
>
> return XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH);
>
>
>
> and stack trace which I'm getting:
>
> 
> org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException:
> Parsing exception!
>         at
> 
> org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubSer
> vice.parse(AbstractAtomPubService.java:590)
>         at
> 
> org.apache.chemistry.opencmis.client.bindings.spi.atompub.ObjectServiceImpl.
> createDocument(ObjectServiceImpl.java:126)
>         at
> 
> org.apache.chemistry.opencmis.client.runtime.SessionImpl.createDocument(Sess
> ionImpl.java:751)
>         at
> 
> org.apache.chemistry.opencmis.client.runtime.SessionImpl.createDocument(Sess
> ionImpl.java:882)
>         at
> 
> pl.com.enigma.arch.repository.cmis.mailmanagement.MailManagementImpl.createM
> ailHandler(MailManagementImpl.java:353)
>         at
> 
> pl.com.enigma.arch.repository.cmis.mailmanagement.MailManagementImpl.createM
> ail(MailManagementImpl.java:157)
>         at
> 
> pl.com.enigma.arch.repository.cmis.mailmanagement.MailManagementImpl.createM
> ail(MailManagementImpl.java:120)
>         at
> 
> pl.com.enigma.arch.repository.webservices.mailmanagement.MailManagementServi
> ceWSImpl.createMail(MailManagementServiceWSImpl.java:79)
>         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:601)
>         at
> 
> org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInv
> oker.java:180)
>         at
> 
> org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:9
> 6)
>         at
> 
> org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.invoke(AbstractJAXWSMethodIn
> voker.java:178)
>         at
> 
> org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:66)
>         at
> 
> org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:7
> 5)
>         at
> 
> org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInt
> erceptor.java:58)
>         at
> 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
>         at
> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:166)
>         at
> 
> org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.jav
> a:37)
>         at
> 
> org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceIn
> vokerInterceptor.java:107)
>         at
> 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain
> .java:271)
>         at
> 
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationOb
> server.java:121)
>         at
> 
> org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDes
> tination.java:238)
>         at
> 
> org.apache.cxf.transport.servlet.ServletController.invokeDestination(Servlet
> Controller.java:218)
>         at
> 
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.
> java:198)
>         at
> 
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.
> java:137)
>         at
> 
> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServ
> let.java:158)
>         at
> 
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractH
> TTPServlet.java:243)
>         at
> 
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServ
> let.java:163)
>         at 
> javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
>         at
> 
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPSer
> vlet.java:219)
>         at
> 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
> FilterChain.java:305)
>         at
> 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
> ain.java:210)
>         at
> 
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
> va:222)
>         at
> 
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
> va:123)
>         at
> 
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase
> .java:472)
>         at
> 
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171
> )
>         at
> 
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
>         at
> 
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
>         at
> 
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
> :118)
>         at
> 
> org.apache.catalina.ha.tcp.ReplicationValve.invoke(ReplicationValve.java:333
> )
>         at
> 
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
>         at
> 
> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Proce
> ssor.java:1004)
>         at
> 
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(Abstrac
> tProtocol.java:589)
>         at
> 
> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:
> 310)
>         at
> 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:11
> 10)
>         at
> 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:6
> 03)
>         at java.lang.Thread.run(Thread.java:722)
> Caused by:
> 
> org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentExceptio
> n: String limit exceeded!
>         at
> 
> org.apache.chemistry.opencmis.commons.impl.XMLUtils.readText(XMLUtils.java:2
> 75)
>         at
> 
> org.apache.chemistry.opencmis.commons.impl.XMLWalker.readText(XMLWalker.java
> :173)
>         at
> 
> org.apache.chemistry.opencmis.commons.impl.XMLConverter$PropertyStringXMLWal
> ker.addValue(XMLConverter.java:2605)
>         at
> 
> org.apache.chemistry.opencmis.commons.impl.XMLConverter$PropertyXMLWalker.re
> ad(XMLConverter.java:2591)
>         at
> 
> org.apache.chemistry.opencmis.commons.impl.XMLConverter$PropertyXMLWalker.re
> ad(XMLConverter.java:2559)
>         at
> 
> org.apache.chemistry.opencmis.commons.impl.XMLWalker.walk(XMLWalker.java:53)
>         at
> 
> org.apache.chemistry.opencmis.commons.impl.XMLConverter$19.read(XMLConverter
> .java:2237)
>         at
> 
> org.apache.chemistry.opencmis.commons.impl.XMLConverter$19.read(XMLConverter
> .java:2227)
>         at
> 
> org.apache.chemistry.opencmis.commons.impl.XMLWalker.walk(XMLWalker.java:53)
>         at
> 
> org.apache.chemistry.opencmis.commons.impl.XMLConverter$18.read(XMLConverter
> .java:2183)
>         at
> 
> org.apache.chemistry.opencmis.commons.impl.XMLConverter$18.read(XMLConverter
> .java:2173)
>         at
> 
> org.apache.chemistry.opencmis.commons.impl.XMLWalker.walk(XMLWalker.java:53)
>         at
> 
> org.apache.chemistry.opencmis.commons.impl.XMLConverter.convertObject(XMLCon
> verter.java:1099)
>         at
> 
> org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.pars
> eElement(AtomPubParser.java:324)
>         at
> 
> org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.pars
> eEntry(AtomPubParser.java:276)
>         at
> 
> org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.pars
> e(AtomPubParser.java:111)
>         at
> 
> org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubSer
> vice.parse(AbstractAtomPubService.java:588)
>
>
>
>
>
> I've recompiled yours library changing the value to 50 MB. Could you 
> please,
> explain me, what is the reason of the 100 kB boundary of text field 
> in xml
> file ?
>
>
>
> Kind regards,
>
> Slawek Karczewski
>
> Senior Software Developer
>
>
> ENIGMA Systemy Ochrony Informacji Sp. z o. o., ul. Jutrzenki 116, 
> 02-230
> Warszawa, tel. 22 570 57 10,  <http://www.enigma.com.pl/> 
> www.enigma.com.pl,
> <ma...@enigma.com.pl> 
> slawomir.karczewski@enigma.com.pl
> Sąd Rejonowy dla m. st. Warszawy XIII Wydział Gospodarczy KRS 
> 0000160395,
> NIP 526 10 29 614, REGON 011149535, kapitał zakładowy i wpłacony 
> 25.718.500
> PLN