juergen     02/03/15 04:48:22

  Modified:    src/webdav/server/org/apache/slide/webdav/method
                        PutMethod.java
  Log:
  Send appropriate error response and abort transaction if 
PreconditionViolationException has been thrown by VersioningHelper.
  (ralf)
  
  Revision  Changes    Path
  1.30      +35 -7     
jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/PutMethod.java
  
  Index: PutMethod.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/PutMethod.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- PutMethod.java    15 Mar 2002 10:09:10 -0000      1.29
  +++ PutMethod.java    15 Mar 2002 12:48:22 -0000      1.30
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/PutMethod.java,v
 1.29 2002/03/15 10:09:10 juergen Exp $
  - * $Revision: 1.29 $
  - * $Date: 2002/03/15 10:09:10 $
  + * $Header: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/PutMethod.java,v
 1.30 2002/03/15 12:48:22 juergen Exp $
  + * $Revision: 1.30 $
  + * $Date: 2002/03/15 12:48:22 $
    *
    * ====================================================================
    *
  @@ -72,8 +72,11 @@
   import javax.servlet.http.*;
   import javax.xml.parsers.ParserConfigurationException ;
   import org.xml.sax.SAXException;
  +import org.jdom.Element;
   import org.jdom.Document;
  -import org.jdom.input.DOMBuilder;
  +import org.jdom.Namespace;
  +import org.jdom.JDOMException;
  +import org.jdom.output.XMLOutputter;
   import org.apache.util.WebdavStatus;
   import org.apache.slide.common.*;
   import org.apache.slide.structure.*;
  @@ -85,6 +88,8 @@
   import org.apache.slide.webdav.util.WebdavUtils;
   import org.apache.slide.webdav.util.DeltavConstants;
   import org.apache.slide.webdav.util.VersioningHelper;
  +import org.apache.slide.webdav.util.PreconditionViolationException;
  +import org.apache.slide.webdav.util.ViolatedPrecondition;
   import org.apache.slide.util.Configuration;
   
   /**
  @@ -158,7 +163,7 @@
        * @exception WebdavException Bad request
        */
       protected void executeRequest()
  -        throws WebdavException {
  +        throws WebdavException, IOException {
           
           // Prevent dirty reads
           slideToken.setForceStoreEnlistment(true);
  @@ -389,14 +394,37 @@
                   resp.setStatus(WebdavStatus.SC_CREATED);
                   
               }
  -            
  -        } catch (Exception e) {
  +        }
  +        catch (PreconditionViolationException e) {
  +            sendPreconditionViolation(e.getViolatedPrecondition());
  +            throw e;
  +        }
  +        catch (Exception e) {
  +            e.printStackTrace();
               resp.setStatus(getErrorCode(e));  // special handling needed
               throw new WebdavException(WebdavStatus.SC_ACCEPTED, false); // abort 
the TA
           }
  +    }
  +    
  +    /**
  +     * Sends a precondition vilolation response.
  +     *
  +     * @param     violatedPrecondition  the precondition that has been violated.
  +     */
  +    protected void sendPreconditionViolation(ViolatedPrecondition 
violatedPrecondition) throws IOException {
  +        
  +        if (violatedPrecondition != null) {
           
  +            resp.setStatus(violatedPrecondition.getStatusCode());
           
  +            Element errorElement = new Element(E_ERROR, 
Namespace.getNamespace(DEFAULT_NAMESPACE));
  +            Element preconditionElement = new 
Element(violatedPrecondition.getPrecondition(),  
Namespace.getNamespace(DEFAULT_NAMESPACE));
  +            errorElement.addContent(preconditionElement);
  +            new XMLOutputter().output(errorElement, resp.getWriter());
       }
  +    }
  +    
  +    
       
       
       
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to