You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by an...@apache.org on 2005/11/30 08:52:44 UTC
svn commit: r349905 - in /incubator/jackrabbit/trunk/contrib/jcr-server:
server/src/java/org/apache/jackrabbit/server/
server/src/java/org/apache/jackrabbit/server/io/
server/src/java/org/apache/jackrabbit/webdav/jcr/
server/src/java/org/apache/jackrab...
Author: angela
Date: Tue Nov 29 23:52:30 2005
New Revision: 349905
URL: http://svn.apache.org/viewcvs?rev=349905&view=rev
Log:
webapp: adding some better error reporting (tobi)
webapp: adding support for late repository retrieval (tobi)
server: workspace not passed to Repository.login in webdav/simple/DavSessionProviderImpl
JCR-280 - IllegalArgumentException when retrieving DateHeader
JCR-282 - respect maximal value for timeout
JCR-276 - SimpleWebdavServlet: avoid 404 on the root collection after successful connection to it.
Added:
incubator/jackrabbit/trunk/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/HttpDateFormat.java (with props)
Modified:
incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/AbstractWebdavServlet.java
incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/DefaultHandler.java
incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java
incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java
incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavSessionProviderImpl.java
incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/ResourceFactoryImpl.java
incubator/jackrabbit/trunk/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/JCRWebdavServerServlet.java
incubator/jackrabbit/trunk/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/RepositoryAccessServlet.java
incubator/jackrabbit/trunk/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/SimpleWebdavServlet.java
incubator/jackrabbit/trunk/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavConstants.java
incubator/jackrabbit/trunk/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/XmlUtil.java
Modified: incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/AbstractWebdavServlet.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/AbstractWebdavServlet.java?rev=349905&r1=349904&r2=349905&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/AbstractWebdavServlet.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/AbstractWebdavServlet.java Tue Nov 29 23:52:30 2005
@@ -362,9 +362,10 @@
long modSince = request.getDateHeader("If-Modified-Since");
if (modSince > IOUtil.UNDEFINED_TIME) {
- // test if resource has been modified
long modTime = resource.getModificationTime();
- if (modTime != IOUtil.UNDEFINED_TIME && modTime <= modSince) {
+ // test if resource has been modified. note that formatted modification
+ // time lost the milli-second precision
+ if (modTime != IOUtil.UNDEFINED_TIME && (modTime / 1000 * 1000) <= modSince) {
// resource has not been modified since the time indicated in the
// 'If-Modified-Since' header.
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
Modified: incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/DefaultHandler.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/DefaultHandler.java?rev=349905&r1=349904&r2=349905&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/DefaultHandler.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/DefaultHandler.java Tue Nov 29 23:52:30 2005
@@ -181,9 +181,12 @@
protected boolean importData(ImportContext context, boolean isCollection, Node contentNode) throws IOException, RepositoryException {
InputStream in = context.getInputStream();
if (in != null) {
+ // NOTE: with the default folder-nodetype (nt:folder) no inputstream
+ // is allowed. setting the property would therefore fail.
+ if (isCollection) {
+ return false;
+ }
try {
- // NOTE: with the default folder-nodetype (nt:folder) no inputstream
- // is allowed. setting the property will therefore fail.
contentNode.setProperty(JcrConstants.JCR_DATA, in);
} finally {
in.close();
Modified: incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java?rev=349905&r1=349904&r2=349905&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java Tue Nov 29 23:52:30 2005
@@ -63,7 +63,7 @@
private TxLockManagerImpl txMgr;
private String transactionId;
- private long modificationTime = new Date().getTime();
+ private long modificationTime = IOUtil.UNDEFINED_TIME;
protected boolean initedProps;
protected DavPropertySet properties = new DavPropertySet();
@@ -122,15 +122,16 @@
}
/**
- * Set the modificationTime field and adds the {@link DavPropertyName.GETLASTMODIFIED}
+ * Set the modificationTime field and adds the {@link DavPropertyName#GETLASTMODIFIED}
* property to the set of properties.
+ *
* @param modificationTime
*/
void setModificationTime(long modificationTime) {
+ if (modificationTime > IOUtil.UNDEFINED_TIME) {
this.modificationTime = modificationTime;
- if (this.modificationTime >= 0) {
- properties.add(new DefaultDavProperty(DavPropertyName.GETLASTMODIFIED,
- DavConstants.modificationDateFormat.format(new Date(modificationTime))));
+ String lastModified = IOUtil.getLastModified(modificationTime);
+ properties.add(new DefaultDavProperty(DavPropertyName.GETLASTMODIFIED, lastModified));
}
}
Modified: incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java?rev=349905&r1=349904&r2=349905&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java Tue Nov 29 23:52:30 2005
@@ -70,11 +70,12 @@
private DavPropertySet properties = new DavPropertySet();
private boolean inited = false;
private boolean isCollection = true;
- private long modificationTime = IOUtil.UNDEFINED_TIME;
private ResourceFilter filter;
private IOManager ioManager;
+ private long modificationTime = IOUtil.UNDEFINED_TIME;
+
/**
* Create a new {@link DavResource}.
*
@@ -83,7 +84,7 @@
* @param session
*/
public DavResourceImpl(DavResourceLocator locator, DavResourceFactory factory,
- DavSession session, ResourceConfig config) throws RepositoryException {
+ DavSession session, ResourceConfig config) throws RepositoryException, DavException {
this.session = session;
this.factory = factory;
this.locator = locator;
@@ -101,6 +102,8 @@
} catch (PathNotFoundException e) {
// ignore: exists field evaluates to false
}
+ } else {
+ throw new DavException(DavServletResponse.SC_NOT_FOUND);
}
}
@@ -490,11 +493,9 @@
try {
ImportContext ctx = getImportContext(inputContext, Text.getName(member.getLocator().getJcrPath()));
if (!ioManager.importContent(ctx, member)) {
- // undo all changes
- node.refresh(false);
+ // any changes should have been reverted in the importer
throw new DavException(DavServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);
}
-
// persist changes after successful import
node.save();
} catch (RepositoryException e) {
@@ -953,7 +954,7 @@
}
public void setModificationTime(long modTime) {
- if (modificationTime <= IOUtil.UNDEFINED_TIME) {
+ if (modTime <= IOUtil.UNDEFINED_TIME) {
modificationTime = new Date().getTime();
} else {
modificationTime = modTime;
Modified: incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavSessionProviderImpl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavSessionProviderImpl.java?rev=349905&r1=349904&r2=349905&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavSessionProviderImpl.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavSessionProviderImpl.java Tue Nov 29 23:52:30 2005
@@ -66,8 +66,14 @@
*/
public boolean attachSession(WebdavRequest request) throws DavException {
try {
+ // retrieve the workspace name
+ String workspaceName = request.getRequestLocator().getWorkspaceName();
+ // empty workspaceName rather means default -> must be 'null'
+ if (workspaceName != null && "".equals(workspaceName)) {
+ workspaceName = null;
+ }
// login to repository
- Session repSession = sesProvider.getSession(request, repository, null);
+ Session repSession = sesProvider.getSession(request, repository, workspaceName);
if (repSession == null) {
log.debug("Could not to retrieve a repository session.");
return false;
@@ -76,8 +82,10 @@
log.debug("Attaching session '"+ ds + "' to request '" + request + "'");
request.setDavSession(ds);
return true;
- } catch (LoginException e) {
- throw new JcrDavException(e);
+ } catch (NoSuchWorkspaceException e) {
+ // the default error-code for NoSuchWorkspaceException is 409 conflict
+ // which seems not appropriate here
+ throw new JcrDavException(e, DavServletResponse.SC_NOT_FOUND);
} catch (RepositoryException e) {
throw new JcrDavException(e);
} catch (ServletException e) {
Modified: incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/ResourceFactoryImpl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/ResourceFactoryImpl.java?rev=349905&r1=349904&r2=349905&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/ResourceFactoryImpl.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/ResourceFactoryImpl.java Tue Nov 29 23:52:30 2005
@@ -16,9 +16,16 @@
package org.apache.jackrabbit.webdav.simple;
-import org.apache.jackrabbit.webdav.*;
import org.apache.jackrabbit.webdav.jcr.JcrDavException;
import org.apache.jackrabbit.webdav.lock.LockManager;
+import org.apache.jackrabbit.webdav.DavResourceFactory;
+import org.apache.jackrabbit.webdav.DavResource;
+import org.apache.jackrabbit.webdav.DavMethods;
+import org.apache.jackrabbit.webdav.DavException;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.DavServletRequest;
+import org.apache.jackrabbit.webdav.DavResourceLocator;
+import org.apache.jackrabbit.webdav.DavSession;
import javax.jcr.RepositoryException;
@@ -31,8 +38,8 @@
private final ResourceConfig resourceConfig;
/**
- * Create a new <code>ResourceFactory</code> that uses the given lock manager
- * and the default {@link DefaultResourceFilter resource filter}.
+ * Create a new <code>ResourceFactory</code> that uses the given lock
+ * manager and the default {@link DefaultResourceFilter resource filter}.
*
* @param lockMgr
*/
@@ -42,8 +49,8 @@
}
/**
- * Create a new <code>ResourceFactory</code> that uses the given lock manager
- * and resource filter.
+ * Create a new <code>ResourceFactory</code> that uses the given lock
+ * manager and resource filter.
*
* @param lockMgr
* @param resourceConfig
@@ -54,14 +61,16 @@
}
/**
- * Create a new <code>DavResource</code> from the given locator and request.
+ * Create a new <code>DavResource</code> from the given locator and
+ * request.
*
* @param locator
* @param request
* @param response
* @return
* @throws DavException
- * @see DavResourceFactory#createResource(DavResourceLocator, DavServletRequest, DavServletResponse)
+ * @see DavResourceFactory#createResource(DavResourceLocator,
+ * DavServletRequest, DavServletResponse)
*/
public DavResource createResource(DavResourceLocator locator, DavServletRequest request,
DavServletResponse response) throws DavException {
Modified: incubator/jackrabbit/trunk/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/JCRWebdavServerServlet.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/JCRWebdavServerServlet.java?rev=349905&r1=349904&r2=349905&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/JCRWebdavServerServlet.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/JCRWebdavServerServlet.java Tue Nov 29 23:52:30 2005
@@ -15,20 +15,25 @@
*/
package org.apache.jackrabbit.j2ee;
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.*;
-import org.apache.jackrabbit.webdav.observation.*;
-import org.apache.jackrabbit.webdav.jcr.*;
-import org.apache.jackrabbit.webdav.jcr.observation.SubscriptionManagerImpl;
-import org.apache.jackrabbit.webdav.jcr.transaction.TxLockManagerImpl;
-import org.apache.jackrabbit.server.jcr.JCRWebdavServer;
-import org.apache.jackrabbit.server.SessionProviderImpl;
import org.apache.jackrabbit.server.AbstractWebdavServlet;
import org.apache.jackrabbit.server.BasicCredentialsProvider;
+import org.apache.jackrabbit.server.SessionProviderImpl;
+import org.apache.jackrabbit.server.jcr.JCRWebdavServer;
+import org.apache.jackrabbit.webdav.DavConstants;
+import org.apache.jackrabbit.webdav.DavLocatorFactory;
+import org.apache.jackrabbit.webdav.DavResource;
+import org.apache.jackrabbit.webdav.DavResourceFactory;
+import org.apache.jackrabbit.webdav.DavSessionProvider;
+import org.apache.jackrabbit.webdav.WebdavRequest;
+import org.apache.jackrabbit.webdav.jcr.DavLocatorFactoryImpl;
+import org.apache.jackrabbit.webdav.jcr.DavResourceFactoryImpl;
+import org.apache.jackrabbit.webdav.jcr.observation.SubscriptionManagerImpl;
+import org.apache.jackrabbit.webdav.jcr.transaction.TxLockManagerImpl;
+import org.apache.jackrabbit.webdav.observation.SubscriptionManager;
+import org.apache.log4j.Logger;
-import javax.servlet.ServletException;
-import javax.servlet.ServletContext;
import javax.jcr.Repository;
+import javax.servlet.ServletException;
/**
* JCRWebdavServerServlet provides request/response handling for the JCRWebdavServer.
@@ -71,16 +76,6 @@
pathPrefix = getInitParameter(INIT_PARAM_PREFIX);
log.debug(INIT_PARAM_PREFIX + " = " + pathPrefix);
- final ServletContext ctx = getServletContext();
-
- Repository repository = RepositoryAccessServlet.getRepository(ctx);
- if (repository == null) {
- throw new ServletException("Repository could not be retrieved. Check config of 'RepositoryAccessServlet'.");
- }
- server = new JCRWebdavServer(repository, new SessionProviderImpl(
- new BasicCredentialsProvider(
- getInitParameter(INIT_PARAM_MISSING_AUTH_MAPPING)))
- );
txMgr = new TxLockManagerImpl();
subscriptionMgr = new SubscriptionManagerImpl();
@@ -114,11 +109,7 @@
// make sure, the TransactionId header is valid
String txId = request.getTransactionId();
- if (txId != null && !txMgr.hasLock(txId, resource)) {
- return false;
- }
-
- return true;
+ return txId == null || txMgr.hasLock(txId, resource);
}
/**
@@ -128,6 +119,13 @@
* @see AbstractWebdavServlet#getDavSessionProvider()
*/
public DavSessionProvider getDavSessionProvider() {
+ if (server == null) {
+ Repository repository = RepositoryAccessServlet.getRepository(getServletContext());
+ server = new JCRWebdavServer(repository, new SessionProviderImpl(
+ new BasicCredentialsProvider(
+ getInitParameter(INIT_PARAM_MISSING_AUTH_MAPPING)))
+ );
+ }
return server;
}
Modified: incubator/jackrabbit/trunk/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/RepositoryAccessServlet.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/RepositoryAccessServlet.java?rev=349905&r1=349904&r2=349905&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/RepositoryAccessServlet.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/RepositoryAccessServlet.java Tue Nov 29 23:52:30 2005
@@ -40,9 +40,6 @@
/** default logger */
private static final Logger log = Logger.getLogger(RepositoryAccessServlet.class);
- // todo: implement correctly
- public final static String INIT_PARAM_LOG4J_CONFIG = "log4j-config";
-
/** the 'repository-name' init parameter */
public final static String INIT_PARAM_REPOSITORY_NAME = "repository-name";
@@ -50,11 +47,15 @@
public final static String INIT_PARAM_RMI_URI = "rmi-uri";
/** the 'missing-auth-mapping' init parameter */
- public final static String INIT_PARAM_MISSING_AUTH_MAPPING = "missing-auth-mapping";
+ //public final static String INIT_PARAM_MISSING_AUTH_MAPPING = "missing-auth-mapping";
private static final String CTX_ATTR_REPOSITORY = "jcr.repository";
- private String repositoryName;
+ private static final String CTX_ATTR_REPOSITORY_NAME = "jcr.repository.name";
+
+ private static final String CTX_ATTR_REPOSITORY_RMI_URI = "jcr.repository.rmiURI";
+
+ private static final String CTX_ATTR_REPOSITORY_JNDI_CONTEXT = "jcr.repository.jndiContext";
/**
* Initializes this servlet
@@ -63,38 +64,23 @@
*/
public void init() throws ServletException {
log.info("RepositoryAccessServlet initializing...");
- repositoryName = getServletConfig().getInitParameter(INIT_PARAM_REPOSITORY_NAME);
+ // fetching the name
+ String repositoryName = getServletConfig().getInitParameter(INIT_PARAM_REPOSITORY_NAME);
if (repositoryName==null) {
repositoryName="default";
}
- Repository repository = null;
+ getServletContext().setAttribute(CTX_ATTR_REPOSITORY_NAME, repositoryName);
- // try to retrieve via rmi
- if (repository == null) {
- String rmiURI = getRMIUri();
- if (rmiURI != null) {
- repository = getRepositoryByRMI(rmiURI);
- }
- }
- // try to retrieve via jndi
- if (repository == null) {
- InitialContext context = getInitialContext();
- if (context != null) {
- repository = getRepositoryByJNDI(context);
- }
- }
- // error
- if (repository == null) {
- log.error("Unable to retrieve repository");
- throw new ServletException("Unable to retrieve repository");
- }
- getServletContext().setAttribute(CTX_ATTR_REPOSITORY, repository);
- log.info(repository.getDescriptor(Repository.REP_NAME_DESC) + " v" + repository.getDescriptor(Repository.REP_VERSION_DESC));
+ // fetching the rmiuri
+ getServletContext().setAttribute(CTX_ATTR_REPOSITORY_RMI_URI, getRMIUri());
+
+ // setup initial context
+ getServletContext().setAttribute(CTX_ATTR_REPOSITORY_JNDI_CONTEXT, getInitialContext());
log.info("RepositoryAccessServlet initialized.");
}
- private InitialContext getInitialContext() throws ServletException {
+ private InitialContext getInitialContext() {
// retrieve JNDI Context environment
try {
Properties env = new Properties();
@@ -109,7 +95,7 @@
return new InitialContext(env);
} catch (NamingException e) {
log.error("Create initial context: " + e.toString());
- throw new ServletException(e);
+ return null;
}
}
@@ -121,8 +107,13 @@
/**
* tries to retrieve the repository using RMI
*/
- private Repository getRepositoryByJNDI(InitialContext jndiContext) {
+ private static Repository getRepositoryByJNDI(ServletContext ctx) {
// acquire via JNDI
+ String repositoryName = (String) ctx.getAttribute(CTX_ATTR_REPOSITORY_NAME);
+ InitialContext jndiContext = (InitialContext) ctx.getAttribute(CTX_ATTR_REPOSITORY_JNDI_CONTEXT);
+ if (jndiContext == null) {
+ return null;
+ }
try {
Repository r = (Repository) jndiContext.lookup(repositoryName);
log.info("Acquired repository via JNDI.");
@@ -136,8 +127,12 @@
/**
* tries to retrieve the repository using RMI
*/
- private Repository getRepositoryByRMI(String rmiURI) {
+ private static Repository getRepositoryByRMI(ServletContext ctx) {
// acquire via RMI
+ String rmiURI = (String) ctx.getAttribute(CTX_ATTR_REPOSITORY_RMI_URI);
+ if (rmiURI == null) {
+ return null;
+ }
log.info(" trying to retrieve repository using rmi. uri=" + rmiURI);
ClientFactoryDelegater cfd;
try {
@@ -165,9 +160,28 @@
* Returns the JSR170 repository
*
* @return a jsr170 repository
+ * @throws IllegalStateException if the repository is not available in the context.
*/
public static Repository getRepository(ServletContext ctx) {
- return (Repository) ctx.getAttribute(CTX_ATTR_REPOSITORY);
+ Repository repository = (Repository) ctx.getAttribute(CTX_ATTR_REPOSITORY);
+ if (repository != null) {
+ return repository;
+ } else {
+ repository = getRepositoryByRMI(ctx);
+ }
+ // try to retrieve via jndi
+ if (repository == null) {
+ repository = getRepositoryByJNDI(ctx);
+ }
+ // error
+ if (repository == null) {
+ log.fatal("The repository is not available. Check config of 'RepositoryAccessServlet'.");
+ throw new IllegalStateException("The repository is not available.");
+ } else {
+ ctx.setAttribute(CTX_ATTR_REPOSITORY, repository);
+ log.info(repository.getDescriptor(Repository.REP_NAME_DESC) + " v" + repository.getDescriptor(Repository.REP_VERSION_DESC));
+ return repository;
+ }
}
}
Modified: incubator/jackrabbit/trunk/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/SimpleWebdavServlet.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/SimpleWebdavServlet.java?rev=349905&r1=349904&r2=349905&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/SimpleWebdavServlet.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/SimpleWebdavServlet.java Tue Nov 29 23:52:30 2005
@@ -400,7 +400,7 @@
/**
* Returns the resource configuration to be applied
*
- * @return
+ * @return the resource configuration.
*/
public ResourceConfig getResourceConfig() {
// fallback if no config present
@@ -430,9 +430,6 @@
public Repository getRepository() {
if (repository == null) {
repository = RepositoryAccessServlet.getRepository(getServletContext());
- if (repository == null) {
- throw new IllegalStateException("Repository could not be retrieved. Check config of 'RepositoryAccessServlet'.");
- }
}
return repository;
}
Modified: incubator/jackrabbit/trunk/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavConstants.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavConstants.java?rev=349905&r1=349904&r2=349905&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavConstants.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavConstants.java Tue Nov 29 23:52:30 2005
@@ -16,8 +16,9 @@
package org.apache.jackrabbit.webdav;
import org.jdom.Namespace;
+import org.apache.jackrabbit.webdav.util.HttpDateFormat;
-import java.text.SimpleDateFormat;
+import java.text.DateFormat;
/**
* <code>DavConstants</code> provide constants for request and response
@@ -48,8 +49,9 @@
//------------------------------------------------------- Timeout header ---
public static final String HEADER_TIMEOUT = "Timeout";
public static final String TIMEOUT_INFINITE = "Infinite";
- public static final long INFINITE_TIMEOUT = Long.MAX_VALUE;
- public static final long UNDEFINED_TIMEOUT = Long.MIN_VALUE;
+ // RFC 2518: timeout value for TimeType "Second" MUST NOT be greater than 2^32-1
+ public static final long INFINITE_TIMEOUT = Integer.MAX_VALUE;
+ public static final long UNDEFINED_TIMEOUT = Integer.MIN_VALUE;
//----------------------------------------------------- Overwrite header ---
public static final String HEADER_OVERWRITE = "Overwrite";
@@ -135,10 +137,10 @@
/**
* modificationDate date format per RFC 1123
*/
- public static SimpleDateFormat modificationDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");
+ public static DateFormat modificationDateFormat = new HttpDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
/**
* Simple date format for the creation date ISO representation (partial).
*/
- public static SimpleDateFormat creationDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+ public static DateFormat creationDateFormat = new HttpDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
}
Added: incubator/jackrabbit/trunk/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/HttpDateFormat.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/HttpDateFormat.java?rev=349905&view=auto
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/HttpDateFormat.java (added)
+++ incubator/jackrabbit/trunk/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/HttpDateFormat.java Tue Nov 29 23:52:30 2005
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.webdav.util;
+
+import org.apache.log4j.Logger;
+
+import java.text.SimpleDateFormat;
+import java.text.DateFormatSymbols;
+import java.util.Locale;
+import java.util.TimeZone;
+
+/**
+ * <code>HttpDateFormat</code>...
+ */
+public class HttpDateFormat extends SimpleDateFormat {
+
+ private static Logger log = Logger.getLogger(HttpDateFormat.class);
+ private static final TimeZone GMT_TIMEZONE = TimeZone.getTimeZone("GMT");
+
+ public HttpDateFormat() {
+ super();
+ super.setTimeZone(GMT_TIMEZONE);
+ }
+
+ public HttpDateFormat(String pattern) {
+ super(pattern);
+ super.setTimeZone(GMT_TIMEZONE);
+ }
+
+ public HttpDateFormat(String pattern, DateFormatSymbols formatSymbols) {
+ super(pattern, formatSymbols);
+ super.setTimeZone(GMT_TIMEZONE);
+ }
+
+ public HttpDateFormat(String pattern, Locale locale) {
+ super(pattern, locale);
+ super.setTimeZone(GMT_TIMEZONE);
+ }
+}
\ No newline at end of file
Propchange: incubator/jackrabbit/trunk/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/HttpDateFormat.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/jackrabbit/trunk/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/HttpDateFormat.java
------------------------------------------------------------------------------
svn:keywords = author date id revision url
Modified: incubator/jackrabbit/trunk/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/XmlUtil.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/XmlUtil.java?rev=349905&r1=349904&r2=349905&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/XmlUtil.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/XmlUtil.java Tue Nov 29 23:52:30 2005
@@ -30,17 +30,19 @@
/**
* Converts the given timeout (long value defining the number of milli-
* second until timeout is reached) to its Xml representation as defined
- * by RTF 2518.
+ * by RTF 2518.<br>
+ * Note, that {@link #INFINITE_TIMEOUT} is not represented by the String
+ * {@link #TIMEOUT_INFINITE 'Infinite'} defined by RFC 2518, due to a known
+ * issue with Microsoft Office that opens the document "read only" and
+ * never unlocks the resource if the timeout is missing or 'Infinite'.
*
* @param timeout number of milli-seconds until timeout is reached.
* @return 'timeout' JDOM element
*/
public static Element timeoutToXml(long timeout) {
- // TODO: check if 'infinite' would be better to return for infinite timeout.
- String expString = "Second-"+ timeout/1000;
- Element exp = new Element(XML_TIMEOUT, NAMESPACE);
- exp.setText(expString);
- return exp;
+ Element el = new Element(XML_TIMEOUT, NAMESPACE);
+ el.setText("Second-"+ timeout/1000);
+ return el;
}
/**