hi ingomar

I am implementing a primitive replication based on XMLImport/Export on 2.2.10.

Having written nodes into a Repo using Session.importXML I get the following 
exception when

accessing any document through WebDav:

java.io.IOException: not a long: 2011-12-20T09:24:30.608+01:00
         
org.apache.jackrabbit.server.io.DefaultHandler.exportProperties(DefaultHandler.java:497)
         
org.apache.jackrabbit.server.io.DefaultHandler.exportContent(DefaultHandler.java:399)
         
org.apache.jackrabbit.server.io.DefaultHandler.exportContent(DefaultHandler.java:421)
         
org.apache.jackrabbit.server.io.IOManagerImpl.exportContent(IOManagerImpl.java:177)
         
org.apache.jackrabbit.webdav.simple.DavResourceImpl.spool(DavResourceImpl.java:282)
         
org.apache.jackrabbit.webdav.server.AbstractWebdavServlet.spoolResource(AbstractWebdavServlet.java:507)
         
org.apache.jackrabbit.webdav.server.AbstractWebdavServlet.doGet(AbstractWebdavServlet.java:473)
         
org.apache.jackrabbit.webdav.server.AbstractWebdavServlet.execute(AbstractWebdavServlet.java:314)
         
org.apache.jackrabbit.webdav.server.AbstractWebdavServlet.service(AbstractWebdavServlet.java:263)
         javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

I looked at DefaultHandler, this seems to try to interpret "jcr:created" as 
Long:

protected void exportProperties(ExportContext context, boolean isCollection, 
Node contentNode) throws IOException {
         try {
             // only non-collections: 'jcr:created' is present on the parent 
'fileNode' only
             if (!isCollection&&  contentNode.getDepth()>  0&&  
contentNode.getParent().hasProperty(JcrConstants.JCR_CREATED)) {
                 long cTime = 
contentNode.getParent().getProperty(JcrConstants.JCR_CREATED).getValue().getLong();

jcr:created is defined as date.

properties of type DATE should be converted to long. but the conversion
might fail. JCR specification section "3.6.4.3 From DATE To" states for
conversion to LONG:

  "LONG: The date is converted to the number of milliseconds since
   00:00 (UTC) 1 January 1970 (1970-01-01T00:00:00.000Z). If this
   number is out-of-range for a long, a ValueFormatException is
   thrown."

Where is the problem? Parsing the value? The value itself?

so, either the property is of some other type that cannot be
converted to LONG here (that might happen if it gets set to an
unstructured node without specifying the desired type) or
the value is out-of-range as stated above.

however, i would argue that defaulthandler should be prepared
for that and either omit the jcr:created property or add some
default value instead of throwing an exception... the same
is btw true for the jcr:lastmodified.

can you please create a issue in JIRA for that? thanks.
angela


Cheers,
  Ingomar

Reply via email to