1 package com.ibm.webdav.protocol.http; 2 3 17 import java.io.*; 18 import java.util.*; 19 import java.util.logging.*; 20 21 import javax.servlet.http.*; 22 import javax.xml.parsers.*; 23 24 import org.w3c.dom.*; 25 26 import com.ibm.webdav.*; 27 import com.ibm.webdav.impl.*; 28 29 32 public class PropPatchMethod extends WebDAVMethod { 33 private static Logger m_logger = Logger.getLogger(PropPatchMethod.class.getName()); 34 35 36 41 public PropPatchMethod(HttpServletRequest request, HttpServletResponse response) throws WebDAVException { 42 super(request, response); 43 methodName = "PROPPATCH"; 44 context.setMethodName(methodName); 45 } 46 49 public WebDAVStatus execute() { 50 setStatusCode(WebDAVStatus.SC_OK); MultiStatus multiStatus = null; 52 try { 53 String depth = context.getRequestContext().depth(); 55 56 WebDAVErrorHandler errorHandler = new WebDAVErrorHandler(resource.getURL().toString()); 58 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 59 factory.setNamespaceAware(true); 60 DocumentBuilder docbuilder = factory.newDocumentBuilder(); 61 docbuilder.setErrorHandler(errorHandler); 62 66 Document contents = docbuilder.parse(new org.xml.sax.InputSource (request.getReader())); 67 if (errorHandler.getErrorCount() > 0) { 68 if(true) throw new RuntimeException (); 69 throw new WebDAVException(WebDAVStatus.SC_BAD_REQUEST, "Syntax error in PROPPATCH request entity body"); 70 } 71 if (ResourceImpl.debug) { 72 System.err.println("property update request entity:"); 73 PrintWriter pout = new PrintWriter(System.err); 74 pout.print(XMLUtility.printNode(contents.getDocumentElement())); 75 } 77 78 context.setMethodName(methodName); 79 multiStatus = resource.setProperties(context, contents); 80 Enumeration responses = multiStatus.getResponses(); 81 82 if (responses.hasMoreElements()) { 83 context.getResponseContext().contentType("text/xml"); 85 setResponseHeaders(); 86 setStatusCode(WebDAVStatus.SC_MULTI_STATUS); 87 88 Document results = multiStatus.asXML(); 90 if (ResourceImpl.debug) { 92 System.err.println("property update results:"); 93 PrintWriter pout = new PrintWriter(System.err); 94 pout.print(XMLUtility.printNode(results.getDocumentElement())); 95 } 97 PrintWriter pout = new PrintWriter(response.getWriter(), false); 98 pout.print(multiStatus.toString()); 100 pout.close(); 101 } else { 102 setStatusCode(WebDAVStatus.SC_OK); setResponseHeaders(); 104 } 105 } catch (WebDAVException exc) { 106 m_logger.log(Level.INFO, exc.getLocalizedMessage() + " - " + request.getQueryString()); 107 setStatusCode(exc.getStatusCode()); 108 } catch (Exception exc) { 109 m_logger.log(Level.WARNING, exc.getMessage(), exc); 110 setStatusCode(WebDAVStatus.SC_INTERNAL_SERVER_ERROR); 111 } 112 return context.getStatusCode(); 113 } 114 } 115 | Popular Tags |