org.apache.jackrabbit.server.remoting.davex
Class JcrRemotingServlet

java.lang.Object
  extended by javax.servlet.GenericServlet
      extended by javax.servlet.http.HttpServlet
          extended by org.apache.jackrabbit.webdav.server.AbstractWebdavServlet
              extended by org.apache.jackrabbit.webdav.jcr.JCRWebdavServerServlet
                  extended by org.apache.jackrabbit.server.remoting.davex.JcrRemotingServlet
All Implemented Interfaces:
Serializable, javax.servlet.Servlet, javax.servlet.ServletConfig, DavConstants
Direct Known Subclasses:
JcrRemotingServlet

public abstract class JcrRemotingServlet
extends JCRWebdavServerServlet

JcrRemotingServlet is an extended version of the JCR Remoting Servlet that provides improved

functionality and supports cross workspace copy and cloning.

Batch Read

Upon RepositoryService.getItemInfos a JSON object is composed containing the information for the requested node and its child items up to a specified or configuration determined depth.

Batch read is triggered by adding a '.json' extension to the resource href. Optionally the client may explicitely specify the desired batch read depth by appending '.depth.json' extension. If no json extension is present the GET request is processed by the base servlet.

The JSON writer applies the following rules:

 - Nodes are represented as JSON objects.

 - Each Node has its properties included as JSON key/value pairs.

 - Single valued Properties are simple key/value pairs.

 - Multi valued Properties are represented as JSON array.

 - Each Node has its child nodes included as long a maximal depths is not reached.
 
 - Nodes without any child nodes get a special JSON member named
   ::NodeIteratorSize, whose value is zero.

 - If the maximal depth is reached only name, index and unique id of the
   direct child are included (incomplete node info). In order to obtain
   the complete information the client sends another GET with .json extension.
 
Same name sibling nodes and properties whose type cannot be unambiguously be extracted from the JSON on the client side need some special handling:
 - Node with index > 1, get a JSON key consisting of
   Node.getName() + "[" + Node.getIndex() + "]" 

 - Binary Property
   JSON value = length of the JCR value.
   The JCR value must be retrieved separately.

 - Name, Path, Reference and Date Property
   The JSON member representing the Property (name, value) is preceeded by a
   special member consisting of
   JSON key = ":" + Property.getName()
   JSON value = PropertyType.nameFromValue(Property.getType())

 - Multi valued properties with Property.getValues().length == 0 will be
   treated as special property types above (extra property indicating the
   type of the property).

 - Double Property
   JSON value must not have any trailing ".0" removed.
 

Batch Write

The complete SPI Batch is sent to the server in a single request, currently a POST request containing a custom ":diff" parameter.
NOTE that this is targeted to be replaced by a PATCH request.

Diff format

The diff parameter currently consists of JSON-like key-value pairs with the following special requirements:
   diff       ::= members
   members    ::= pair | pairs
   pair       ::= key " : " value
   pairs      ::= pair line-end pair | pair line-end pairs
   line-end   ::= "\r\n" | "\n" | "\r"
   key        ::= diffchar path
   diffchar   ::= "+" | "^" | "-" | ">"
   path       ::= abspath | relpath
   abspath    ::= * absolute path to an item *
   relpath    ::= * relpath from item at request URI to an item *
   value      ::= value+ | value- | value^ | value>
   value+     ::= * a JSON object *
   value-     ::= ""
   value^     ::= * any JSON value except JSON object *
   value>     ::= path | path "#before" | path "#after" | "#first" | "#last"
 
In other words: NOTE the following special handling of JCR properties of type Binary, Name, Path, Date and Reference:

See Also:
www.json.org for the definition of JSON object and JSON value., Serialized Form

Field Summary
static String ATTR_TMP_DIRECTORY
          temp-dir attribute to be set to the servlet-context
static String INIT_PARAM_BATCHREAD_CONFIG
          the 'temp-directory' init parameter
static String INIT_PARAM_HOME
          the home init parameter. other relative filesystem paths are relative to this location.
static String INIT_PARAM_TMP_DIRECTORY
          the 'temp-directory' init parameter
 
Fields inherited from class org.apache.jackrabbit.webdav.jcr.JCRWebdavServerServlet
CTX_ATTR_RESOURCE_PATH_PREFIX, INIT_PARAM_AUTHENTICATE_HEADER, INIT_PARAM_MISSING_AUTH_MAPPING, INIT_PARAM_RESOURCE_PATH_PREFIX, subscriptionMgr, txMgr
 
Fields inherited from class org.apache.jackrabbit.webdav.server.AbstractWebdavServlet
DEFAULT_AUTHENTICATE_HEADER
 
Fields inherited from interface org.apache.jackrabbit.webdav.DavConstants
creationDateFormat, DEPTH_0, DEPTH_1, DEPTH_INFINITY, DEPTH_INFINITY_S, HEADER_AUTHORIZATION, HEADER_CONTENT_LANGUAGE, HEADER_CONTENT_LENGTH, HEADER_CONTENT_TYPE, HEADER_DAV, HEADER_DEPTH, HEADER_DESTINATION, HEADER_ETAG, HEADER_IF, HEADER_LAST_MODIFIED, HEADER_LOCK_TOKEN, HEADER_OVERWRITE, HEADER_TIMEOUT, INFINITE_TIMEOUT, modificationDateFormat, NAMESPACE, OPAQUE_LOCK_TOKEN_PREFIX, PROPERTY_CREATIONDATE, PROPERTY_DISPLAYNAME, PROPERTY_GETCONTENTLANGUAGE, PROPERTY_GETCONTENTLENGTH, PROPERTY_GETCONTENTTYPE, PROPERTY_GETETAG, PROPERTY_GETLASTMODIFIED, PROPERTY_LOCKDISCOVERY, PROPERTY_RESOURCETYPE, PROPERTY_SOURCE, PROPERTY_SUPPORTEDLOCK, PROPFIND_ALL_PROP, PROPFIND_ALL_PROP_INCLUDE, PROPFIND_BY_PROPERTY, PROPFIND_PROPERTY_NAMES, TIMEOUT_INFINITE, UNDEFINED_TIME, UNDEFINED_TIMEOUT, XML_ACTIVELOCK, XML_ALLPROP, XML_COLLECTION, XML_DEPTH, XML_DST, XML_EXCLUSIVE, XML_HREF, XML_INCLUDE, XML_KEEPALIVE, XML_LINK, XML_LOCKENTRY, XML_LOCKINFO, XML_LOCKROOT, XML_LOCKSCOPE, XML_LOCKTOKEN, XML_LOCKTYPE, XML_MULTISTATUS, XML_OMIT, XML_OWNER, XML_PROP, XML_PROPERTYBEHAVIOR, XML_PROPERTYUPDATE, XML_PROPFIND, XML_PROPNAME, XML_PROPSTAT, XML_REMOVE, XML_RESPONSE, XML_RESPONSEDESCRIPTION, XML_SET, XML_SHARED, XML_SOURCE, XML_STATUS, XML_TIMEOUT, XML_WRITE
 
Constructor Summary
JcrRemotingServlet()
           
 
Method Summary
protected  void doGet(WebdavRequest webdavRequest, WebdavResponse webdavResponse, DavResource davResource)
          The GET method
protected  void doPost(WebdavRequest webdavRequest, WebdavResponse webdavResponse, DavResource davResource)
          The POST method.
 DavResourceFactory getResourceFactory()
          Returns the DavResourceFactory.
 void init()
          Initializes the servlet set reads the following parameter from the servlet configuration: resource-path-prefix: optional prefix for all resources.
 
Methods inherited from class org.apache.jackrabbit.webdav.jcr.JCRWebdavServerServlet
getAuthenticateHeaderValue, getCredentialsProvider, getDavSessionProvider, getLocatorFactory, getPathPrefix, getRepository, getSessionProvider, isPreconditionValid, setDavSessionProvider, setLocatorFactory, setResourceFactory, validateDestination
 
Methods inherited from class org.apache.jackrabbit.webdav.server.AbstractWebdavServlet
doAcl, doBaselineControl, doBind, doCheckin, doCheckout, doCopy, doDelete, doHead, doLabel, doLock, doMerge, doMkActivity, doMkCol, doMkWorkspace, doMove, doOptions, doOrderPatch, doPoll, doPropFind, doPropPatch, doPut, doRebind, doReport, doSearch, doSubscribe, doUnbind, doUncheckout, doUnlock, doUnsubscribe, doUpdate, doVersionControl, execute, getInputContext, getOutputContext, sendUnauthorized, service
 
Methods inherited from class javax.servlet.http.HttpServlet
doDelete, doGet, doHead, doOptions, doPost, doPut, doTrace, getLastModified, service
 
Methods inherited from class javax.servlet.GenericServlet
destroy, getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, log, log
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

INIT_PARAM_HOME

public static final String INIT_PARAM_HOME
the home init parameter. other relative filesystem paths are relative to this location.

See Also:
Constant Field Values

INIT_PARAM_TMP_DIRECTORY

public static final String INIT_PARAM_TMP_DIRECTORY
the 'temp-directory' init parameter

See Also:
Constant Field Values

ATTR_TMP_DIRECTORY

public static final String ATTR_TMP_DIRECTORY
temp-dir attribute to be set to the servlet-context

See Also:
Constant Field Values

INIT_PARAM_BATCHREAD_CONFIG

public static final String INIT_PARAM_BATCHREAD_CONFIG
the 'temp-directory' init parameter

See Also:
Constant Field Values
Constructor Detail

JcrRemotingServlet

public JcrRemotingServlet()
Method Detail

init

public void init()
          throws javax.servlet.ServletException
Description copied from class: JCRWebdavServerServlet
Initializes the servlet set reads the following parameter from the servlet configuration:

Overrides:
init in class JCRWebdavServerServlet
Throws:
javax.servlet.ServletException

getResourceFactory

public DavResourceFactory getResourceFactory()
Description copied from class: JCRWebdavServerServlet
Returns the DavResourceFactory.

Overrides:
getResourceFactory in class JCRWebdavServerServlet
Returns:
the resource factory
See Also:
AbstractWebdavServlet.getResourceFactory()

doGet

protected void doGet(WebdavRequest webdavRequest,
                     WebdavResponse webdavResponse,
                     DavResource davResource)
              throws IOException,
                     DavException
Description copied from class: AbstractWebdavServlet
The GET method

Overrides:
doGet in class AbstractWebdavServlet
Throws:
IOException
DavException

doPost

protected void doPost(WebdavRequest webdavRequest,
                      WebdavResponse webdavResponse,
                      DavResource davResource)
               throws IOException,
                      DavException
Description copied from class: AbstractWebdavServlet
The POST method. Delegate to PUT

Overrides:
doPost in class AbstractWebdavServlet
Throws:
IOException
DavException


Copyright © 2004-2010 The Apache Software Foundation. All Rights Reserved.