You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by ju...@apache.org on 2002/04/03 13:58:21 UTC
cvs commit: jakarta-slide/src/webdav/server/org/apache/slide/webdav/method AbstractMultistatusResponseMethod.java
juergen 02/04/03 03:58:21
Modified: src/webdav/server/org/apache/slide/webdav/method
AbstractMultistatusResponseMethod.java
Log:
Added support for precondition violation error response.
(ralf)
Revision Changes Path
1.16 +73 -24 jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AbstractMultistatusResponseMethod.java
Index: AbstractMultistatusResponseMethod.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AbstractMultistatusResponseMethod.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- AbstractMultistatusResponseMethod.java 28 Mar 2002 06:12:12 -0000 1.15
+++ AbstractMultistatusResponseMethod.java 3 Apr 2002 11:58:21 -0000 1.16
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AbstractMultistatusResponseMethod.java,v 1.15 2002/03/28 06:12:12 jericho Exp $
- * $Revision: 1.15 $
- * $Date: 2002/03/28 06:12:12 $
+ * $Header: /home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/AbstractMultistatusResponseMethod.java,v 1.16 2002/04/03 11:58:21 juergen Exp $
+ * $Revision: 1.16 $
+ * $Date: 2002/04/03 11:58:21 $
*
* ====================================================================
*
@@ -78,6 +78,16 @@
import org.apache.slide.security.AccessDeniedException;
import org.apache.slide.structure.*;
import org.apache.slide.webdav.util.WebdavUtils;
+import org.apache.slide.webdav.util.PreconditionViolationException;
+import org.apache.slide.webdav.util.ViolatedPrecondition;
+import org.apache.slide.webdav.util.WebdavConstants;
+
+import org.jdom.Element;
+import org.jdom.Document;
+import org.jdom.Namespace;
+import org.jdom.JDOMException;
+
+import org.jdom.output.XMLOutputter;
/**
* Abstract class for methods which return a multistatus error report, like
@@ -86,7 +96,7 @@
* @author <a href="mailto:remm@apache.org">Remy Maucherat</a>
* @author Juergen Pill
*/
-public abstract class AbstractMultistatusResponseMethod extends WebdavMethod {
+public abstract class AbstractMultistatusResponseMethod extends WebdavMethod implements WebdavConstants {
// ----------------------------------------------------- Instance Variables
@@ -228,28 +238,32 @@
protected String generateErrorMessage
(NestedSlideException nestedException) {
- XMLPrinter errorMessage = new XMLPrinter();
-
- errorMessage.writeXMLHeader();
- errorMessage.writeElement("d", NodeProperty.DEFAULT_NAMESPACE,
- "multistatus", XMLPrinter.OPENING);
+ Element multistatus = new Element(E_MULTISTATUS, Namespace.getNamespace(DEFAULT_NAMESPACE));
Enumeration nestedExceptionsList =
nestedException.enumerateExceptions();
while (nestedExceptionsList.hasMoreElements()) {
- errorMessage.writeElement("d", "response", XMLPrinter.OPENING);
+ Element response = new Element(E_RESPONSE, Namespace.getNamespace(DEFAULT_NAMESPACE));
+ multistatus.addContent(response);
SlideException ex =
(SlideException) nestedExceptionsList.nextElement();
- generateStatusText(errorMessage, getErrorMessage(ex),
+ generateStatusText(response, getErrorMessage(ex),
getErrorCode(ex));
- errorMessage.writeElement("d", "response", XMLPrinter.CLOSING);
+ if (ex instanceof PreconditionViolationException) {
+ multistatus.addContent(getPreconditionViolationResponseDescription((PreconditionViolationException)ex));
+ }
}
- errorMessage.writeElement("d", "multistatus", XMLPrinter.CLOSING);
-
- return errorMessage.toString();
+ StringWriter stringWriter = new StringWriter();
+ try {
+ new XMLOutputter().output(multistatus, stringWriter);
+ }
+ catch (IOException e) {
+ Domain.log(e);
+ }
+ return stringWriter.toString();
}
@@ -257,19 +271,52 @@
/**
* Generate status text.
*
- * @param printer XML Printer
+ * @param parentElement the parent Element to append to.
* @param href Uri of the object
* @param statusCode HTTP status code of the error
*/
- protected void generateStatusText(XMLPrinter printer, String href,
- int statusCode) {
- printer.writeElement("d", "href", XMLPrinter.OPENING);
- printer.writeText(WebdavUtils.encodeURL(href));
- printer.writeElement("d", "href", XMLPrinter.CLOSING);
- printer.writeElement("d", "status", XMLPrinter.OPENING);
- printer.writeText("HTTP/1.1 " + statusCode + " "
+ protected void generateStatusText(Element parentElement, String href, int statusCode) {
+
+ Element hrefElement = new Element(E_HREF, Namespace.getNamespace(DEFAULT_NAMESPACE));
+ parentElement.addContent(hrefElement);
+ hrefElement.setText(WebdavUtils.encodeURL(href));
+ Element statusElement = new Element(E_STATUS, Namespace.getNamespace(DEFAULT_NAMESPACE));
+ parentElement.addContent(statusElement);
+ statusElement.setText("HTTP/1.1 " + statusCode + " "
+ WebdavStatus.getStatusText(statusCode));
- printer.writeElement("d", "status", XMLPrinter.CLOSING);
+ }
+
+
+ /**
+ * Generate <responsedescription> for the given precondition violation.
+ *
+ * @param pve the ProconditionViolationException that describes the violated
+ * precondition.
+ *
+ * @return the <responsedescription> for the given precondition violation.
+ */
+ protected Element getPreconditionViolationResponseDescription(PreconditionViolationException pve) {
+
+ Element responseDescription = new Element(E_RESPONSEDESCRIPTION, Namespace.getNamespace(DEFAULT_NAMESPACE));
+ responseDescription.addContent(getPreconditionViolationError(pve));
+ return responseDescription;
+ }
+
+ /**
+ * Generate <error> for the given precondition violation.
+ *
+ * @param pve the ProconditionViolationException that describes the violated
+ * precondition.
+ *
+ * @return the <error> for the given precondition violation.
+ */
+ protected Element getPreconditionViolationError(PreconditionViolationException pve) {
+
+ Element error = new Element(E_ERROR, Namespace.getNamespace(DEFAULT_NAMESPACE));
+ Element violatedPrecondition = new Element(pve.getViolatedPrecondition().getPrecondition(),
+ Namespace.getNamespace(DEFAULT_NAMESPACE));
+ error.addContent(violatedPrecondition);
+ return error;
}
@@ -338,6 +385,8 @@
} catch(RevisionNotFoundException e) {
return e.getObjectUri();
} catch(ObjectLockedException e) {
+ return e.getObjectUri();
+ } catch(PreconditionViolationException e) {
return e.getObjectUri();
} catch(SlideException e) {
return e.getMessage();
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>