org.apache.jackrabbit.server.remoting.davex
Class JcrRemotingServlet
java.lang.Object
javax.servlet.GenericServlet
javax.servlet.http.HttpServlet
org.apache.jackrabbit.webdav.server.AbstractWebdavServlet
org.apache.jackrabbit.webdav.jcr.JCRWebdavServerServlet
org.apache.jackrabbit.server.remoting.davex.JcrRemotingServlet
- All Implemented Interfaces:
- Serializable, javax.servlet.Servlet, javax.servlet.ServletConfig, DavConstants
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.
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.
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:
- the JSON value must be missing
- the POST request is expected to contain extra multipart(s) or request
parameter(s) for the property value(s)
- the content type of the extra parts/params must reflect the property
type:"jcr-value/" + PropertyType.nameFromValue(Property.getType).toLowerCase()
- See Also:
- www.json.org for the definition of
JSON object and JSON value.,
Serialized Form
| 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 |
| Methods inherited from class org.apache.jackrabbit.webdav.server.AbstractWebdavServlet |
doAcl, doBaselineControl, doBind, doCopy, doDelete, doHead, doCheckin, doCheckout, 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, 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 |
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
JcrRemotingServlet
public JcrRemotingServlet()
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:
- resource-path-prefix: optional prefix for all resources.
- 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
- See Also:
AbstractWebdavServlet.getResourceFactory()
doGet
protected void doGet(WebdavRequest webdavRequest,
WebdavResponse webdavResponse,
DavResource davResource)
throws IOException,
DavException
- Overrides:
doGet in class AbstractWebdavServlet
- Throws:
IOException
DavException
doPost
protected void doPost(WebdavRequest webdavRequest,
WebdavResponse webdavResponse,
DavResource davResource)
throws IOException,
DavException
- Overrides:
doPost in class AbstractWebdavServlet
- Throws:
IOException
DavException
Copyright © 2004-2013 The Apache Software Foundation. All Rights Reserved.