|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.modeshape.web.jcr.rest.JcrResources
@Immutable public class JcrResources
RESTEasy handler to provide the JCR resources at the URIs below. Please note that these URIs assume a context of /resources
for the web application.
URI Pattern | Description | Supported Methods |
---|---|---|
/resources | returns a list of accessible repositories | GET |
/resources/{repositoryName} | returns a list of accessible workspaces within that repository | GET |
/resources/{repositoryName}/{workspaceName} | returns a list of operations within the workspace | GET |
/resources/{repositoryName}/{workspaceName}/items/{path} | accesses the item (node or property) at the path | GET, POST, PUT, DELETE |
/resources/{repositoryName}/{workspaceName}/query | executes the query in the body of the request with a language specified by the content type (application/jcr+xpath, application/jcr+sql, application/jcr+sql2, or application/search) | POST |
There are several ways to transfer binary property values, but all involve encoding the binary value into ASCII characters
using a Base64
notation and denoting this by adding annotating the property name with a suffix defining the type of
encoding. Currently, only "base64" encoding is supported.
For example, if the "jcr:data" property contains a single binary value of "propertyValue", then the JSON object representing that property will be:
"jcr:data/base64/" : "cHJvcGVydHlWYWx1ZQ=="Likewise, if the "jcr:data" property contains two binary values each being "propertyValue", then the JSON object representing that property will be:
"jcr:data/base64/" : [ "cHJvcGVydHlWYWx1ZQ==", "cHJvcGVydHlWYWx1ZQ==" ]Note that JCR 1.0.1 does not allow property names to and with a '/' character (among others), while JCR 2.0 does not allow property names to contain an unescaped or unencoded '/' character. Therefore, the "/{encoding}/" suffix can never appear in a valid JCR property name, and will always identify an encoded property.
Here are the details:
GET /resources/{repositoryName}/item/{pathToNode}
obtains the JSON object representing the
node, and each property is represented as a nested JSON object where the name is the property name and the value(s) are
represented as either a single string value or an array of string values. If the property has a binary value, then the property
name is appended with "/base64/" and the string representation of each value is encoded in Base64.GET /resources/{repositoryName}/item/{pathToProperty}
allows only the value(s) for the
one property to be included in the response. If any of the values is a binary value, then all of the values will be
encoded in Base64.PUT /resources/{repositoryName}/item/{pathToProperty}
allows setting the property to a
single value, and only that value needs to be included in the body of the request. If the value is binary, the value
must be encoded
by the client and the "Content-Transfer-Encoding" header must be set to "base64" (case
does not matter). When the request is received, the value is decoded before the property value is updated on the node.POST /resources/{repositoryName}/item/{pathToNode}
requires a request that is structured
in the same way as the response from getting a node: the resulting JSON object represents the node, with nested JSON objects
for the properties and children. If any property of the new node has a binary value, then the name of the property must
be appended with "/base64/" and the string representation of each value are to be encoded in Base64.PUT /resources/{repositoryName}/item/{pathToNode}
requires a request that is structured
in the same way as the response from getting or posting a node: the resulting JSON object represents the node, with nested JSON
objects for the properties and children. If any property of the new node has a binary value, then the name of the property
must be appended with "/base64/" and the string representation of each value are to be encoded in Base64.
Nested Class Summary | |
---|---|
static class |
JcrResources.JSONExceptionMapper
|
static class |
JcrResources.NoSuchRepositoryExceptionMapper
|
static class |
JcrResources.NotFoundExceptionMapper
|
static class |
JcrResources.RepositoryExceptionMapper
|
Field Summary | |
---|---|
protected static String |
BASE64_ENCODING_SUFFIX
|
static String |
EMPTY_REPOSITORY_NAME
Name to be used when the repository name is empty string as "//" is not a valid path. |
static String |
EMPTY_WORKSPACE_NAME
Name to be used when the workspace name is empty string as "//" is not a valid path. |
protected static UrlEncoder |
URL_ENCODER
|
Constructor Summary | |
---|---|
JcrResources()
|
Method Summary | |
---|---|
void |
deleteItem(HttpServletRequest request,
String rawRepositoryName,
String rawWorkspaceName,
String path)
Deletes the item at path . |
String |
getItem(HttpServletRequest request,
String rawRepositoryName,
String rawWorkspaceName,
String path,
int deprecatedDepth,
int depth)
Handles GET requests for an item in a workspace. |
Map<String,RepositoryEntry> |
getRepositories(HttpServletRequest request)
Returns the list of JCR repositories available on this server |
protected Session |
getSession(HttpServletRequest request,
String rawRepositoryName,
String rawWorkspaceName)
Returns an active session for the given workspace name in the named repository. |
Map<String,WorkspaceEntry> |
getWorkspaces(HttpServletRequest request,
String rawRepositoryName)
Returns the list of workspaces available to this user within the named repository. |
protected String |
jsonEncodedStringFor(Value value)
Return the JSON-compatible string representation of the given property value. |
javax.ws.rs.core.Response |
postItem(HttpServletRequest request,
String rawRepositoryName,
String rawWorkspaceName,
String path,
String requestContent)
Adds the content of the request as a node (or subtree of nodes) at the location specified by path . |
String |
postJcrSearchQuery(HttpServletRequest request,
String rawRepositoryName,
String rawWorkspaceName,
long offset,
long limit,
String requestContent)
Executes the JCR-SQL query contained in the body of the request against the give repository and workspace. |
String |
postJcrSql2Query(HttpServletRequest request,
String rawRepositoryName,
String rawWorkspaceName,
long offset,
long limit,
String requestContent)
Executes the JCR-SQL2 query contained in the body of the request against the give repository and workspace. |
String |
postJcrSqlQuery(HttpServletRequest request,
String rawRepositoryName,
String rawWorkspaceName,
long offset,
long limit,
String requestContent)
Executes the JCR-SQL query contained in the body of the request against the give repository and workspace. |
String |
postXPathQuery(HttpServletRequest request,
String rawRepositoryName,
String rawWorkspaceName,
long offset,
long limit,
String requestContent)
Executes the XPath query contained in the body of the request against the give repository and workspace. |
String |
putItem(HttpServletRequest request,
String rawRepositoryName,
String rawWorkspaceName,
String path,
String requestContent)
Updates the properties at the path. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected static final String BASE64_ENCODING_SUFFIX
protected static final UrlEncoder URL_ENCODER
public static final String EMPTY_REPOSITORY_NAME
"//"
is not a valid path.
public static final String EMPTY_WORKSPACE_NAME
"//"
is not a valid path.
Constructor Detail |
---|
public JcrResources()
Method Detail |
---|
public Map<String,RepositoryEntry> getRepositories(@Context HttpServletRequest request)
request
- the servlet request; may not be null
public Map<String,WorkspaceEntry> getWorkspaces(@Context HttpServletRequest request, String rawRepositoryName) throws RepositoryException, IOException
rawRepositoryName
- the name of the repository; may not be nullrequest
- the servlet request; may not be null
IOException
- if the given repository name does not map to any repositories and there is an error writing the error
code to the response.
RepositoryException
- if there is any other error accessing the list of available workspaces for the repositorypublic String getItem(@Context HttpServletRequest request, String rawRepositoryName, String rawWorkspaceName, String path, int deprecatedDepth, int depth) throws org.codehaus.jettison.json.JSONException, org.jboss.resteasy.spi.UnauthorizedException, RepositoryException
request
- the servlet request; may not be null or unauthenticatedrawRepositoryName
- the URL-encoded repository namerawWorkspaceName
- the URL-encoded workspace namepath
- the path to the itemdeprecatedDepth
- the old depth parameter ("mode:depth"). This version is deprecated and should use the "depth" query
parameter instead.depth
- the depth of the node graph that should be returned if path
refers to a node. @{code 0} means return
the requested node only. A negative value indicates that the full subgraph under the node should be returned. This
parameter defaults to 0
and is ignored if path
refers to a property.
depth
)
org.jboss.resteasy.spi.NotFoundException
- if the named repository does not exists, the named workspace does not exist, or the user does not
have access to the named workspace
org.codehaus.jettison.json.JSONException
- if there is an error encoding the node
org.jboss.resteasy.spi.UnauthorizedException
- if the given login information is invalid
RepositoryException
- if any other error occursEMPTY_REPOSITORY_NAME
,
EMPTY_WORKSPACE_NAME
,
Session.getItem(String)
public javax.ws.rs.core.Response postItem(@Context HttpServletRequest request, String rawRepositoryName, String rawWorkspaceName, String path, String requestContent) throws org.jboss.resteasy.spi.NotFoundException, org.jboss.resteasy.spi.UnauthorizedException, RepositoryException, org.codehaus.jettison.json.JSONException
path
.
The primary type and mixin type(s) may optionally be specified through the jcr:primaryType
and jcr:mixinTypes
properties.
request
- the servlet request; may not be null or unauthenticatedrawRepositoryName
- the URL-encoded repository namerawWorkspaceName
- the URL-encoded workspace namepath
- the path to the itemrequestContent
- the JSON-encoded representation of the node or nodes to be added
requestContent
in that auto-created and protected properties (e.g., jcr:uuid) will be populated.
org.jboss.resteasy.spi.NotFoundException
- if the parent of the item to be added does not exist
org.jboss.resteasy.spi.UnauthorizedException
- if the user does not have the access required to create the node at this path
org.codehaus.jettison.json.JSONException
- if there is an error encoding the node
RepositoryException
- if any other error occurspublic void deleteItem(@Context HttpServletRequest request, String rawRepositoryName, String rawWorkspaceName, String path) throws org.jboss.resteasy.spi.NotFoundException, org.jboss.resteasy.spi.UnauthorizedException, RepositoryException
path
.
request
- the servlet request; may not be null or unauthenticatedrawRepositoryName
- the URL-encoded repository namerawWorkspaceName
- the URL-encoded workspace namepath
- the path to the item
org.jboss.resteasy.spi.NotFoundException
- if no item exists at path
org.jboss.resteasy.spi.UnauthorizedException
- if the user does not have the access required to delete the item at this path
RepositoryException
- if any other error occurspublic String putItem(@Context HttpServletRequest request, String rawRepositoryName, String rawWorkspaceName, String path, String requestContent) throws org.jboss.resteasy.spi.UnauthorizedException, org.codehaus.jettison.json.JSONException, RepositoryException, IOException
If path points to a property, this method expects the request content to be either a JSON array or a JSON string. The array or string will become the values or value of the property. If path points to a node, this method expects the request content to be a JSON object. The keys of the objects correspond to property names that will be set and the values for the keys correspond to the values that will be set on the properties.
request
- the servlet request; may not be null or unauthenticatedrawRepositoryName
- the URL-encoded repository namerawWorkspaceName
- the URL-encoded workspace namepath
- the path to the itemrequestContent
- the JSON-encoded representation of the values and, possibly, properties to be set
org.jboss.resteasy.spi.NotFoundException
- if the parent of the item to be added does not exist
org.jboss.resteasy.spi.UnauthorizedException
- if the user does not have the access required to create the node at this path
org.codehaus.jettison.json.JSONException
- if there is an error encoding the node
RepositoryException
- if any other error occurs
IOException
- if there is a problem reading the valuepublic String postXPathQuery(@Context HttpServletRequest request, String rawRepositoryName, String rawWorkspaceName, long offset, long limit, String requestContent) throws RepositoryException, org.codehaus.jettison.json.JSONException
The query results will be JSON-encoded in the response body.
request
- the servlet request; may not be null or unauthenticatedrawRepositoryName
- the URL-encoded repository namerawWorkspaceName
- the URL-encoded workspace namerequestContent
- the JSON-encoded representation of the node or nodes to be addedoffset
- the offset to the first row to be returned. If this value is greater than the size of the result set, no
records will be returned. If this value is less than 0, results will be returned starting from the first record in
the result set.limit
- the maximum number of rows to be returned. If this value is greater than the size of the result set, the
entire result set will be returned. If this value is less than zero, the entire result set will be returned. The
results are counted from the record specified in the offset parameter.
requestContent
in that auto-created and protected properties (e.g., jcr:uuid) will be populated.
org.codehaus.jettison.json.JSONException
- if there is an error encoding the node
RepositoryException
- if any other error occurspublic String postJcrSqlQuery(@Context HttpServletRequest request, String rawRepositoryName, String rawWorkspaceName, long offset, long limit, String requestContent) throws RepositoryException, org.codehaus.jettison.json.JSONException
The query results will be JSON-encoded in the response body.
request
- the servlet request; may not be null or unauthenticatedrawRepositoryName
- the URL-encoded repository namerawWorkspaceName
- the URL-encoded workspace namerequestContent
- the JSON-encoded representation of the node or nodes to be addedoffset
- the offset to the first row to be returned. If this value is greater than the size of the result set, no
records will be returned. If this value is less than 0, results will be returned starting from the first record in
the result set.limit
- the maximum number of rows to be returned. If this value is greater than the size of the result set, the
entire result set will be returned. If this value is less than zero, the entire result set will be returned. The
results are counted from the record specified in the offset parameter.
requestContent
in that auto-created and protected properties (e.g., jcr:uuid) will be populated.
org.codehaus.jettison.json.JSONException
- if there is an error encoding the node
RepositoryException
- if any other error occurspublic String postJcrSql2Query(@Context HttpServletRequest request, String rawRepositoryName, String rawWorkspaceName, long offset, long limit, String requestContent) throws RepositoryException, org.codehaus.jettison.json.JSONException
The query results will be JSON-encoded in the response body.
request
- the servlet request; may not be null or unauthenticatedrawRepositoryName
- the URL-encoded repository namerawWorkspaceName
- the URL-encoded workspace namerequestContent
- the JSON-encoded representation of the node or nodes to be addedoffset
- the offset to the first row to be returned. If this value is greater than the size of the result set, no
records will be returned. If this value is less than 0, results will be returned starting from the first record in
the result set.limit
- the maximum number of rows to be returned. If this value is greater than the size of the result set, the
entire result set will be returned. If this value is less than zero, the entire result set will be returned. The
results are counted from the record specified in the offset parameter.
requestContent
in that auto-created and protected properties (e.g., jcr:uuid) will be populated.
org.codehaus.jettison.json.JSONException
- if there is an error encoding the node
RepositoryException
- if any other error occurspublic String postJcrSearchQuery(@Context HttpServletRequest request, String rawRepositoryName, String rawWorkspaceName, long offset, long limit, String requestContent) throws RepositoryException, org.codehaus.jettison.json.JSONException
The query results will be JSON-encoded in the response body.
request
- the servlet request; may not be null or unauthenticatedrawRepositoryName
- the URL-encoded repository namerawWorkspaceName
- the URL-encoded workspace namerequestContent
- the JSON-encoded representation of the node or nodes to be addedoffset
- the offset to the first row to be returned. If this value is greater than the size of the result set, no
records will be returned. If this value is less than 0, results will be returned starting from the first record in
the result set.limit
- the maximum number of rows to be returned. If this value is greater than the size of the result set, the
entire result set will be returned. If this value is less than zero, the entire result set will be returned. The
results are counted from the record specified in the offset parameter.
requestContent
in that auto-created and protected properties (e.g., jcr:uuid) will be populated.
org.codehaus.jettison.json.JSONException
- if there is an error encoding the node
RepositoryException
- if any other error occursprotected Session getSession(HttpServletRequest request, String rawRepositoryName, String rawWorkspaceName) throws RepositoryException
request
- the servlet request; may not be null or unauthenticatedrawRepositoryName
- the URL-encoded name of the repository in which the session is createdrawWorkspaceName
- the URL-encoded name of the workspace to which the session should be connected
RepositoryException
- if any other error occursprotected String jsonEncodedStringFor(Value value) throws RepositoryException
binary
value, then this method returns the Base-64 encoding of that value. Otherwise, it just returns the string
representation of the value.
value
- the property value; may not be null
RepositoryException
- if there is a problem accessing the value
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |