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 2008/05/15 16:44:28 UTC

svn commit: r656685 - in /jackrabbit/trunk/jackrabbit-webdav: ./ src/main/java/org/apache/jackrabbit/webdav/client/methods/ src/test/ src/test/java/ src/test/java/org/ src/test/java/org/apache/ src/test/java/org/apache/jackrabbit/ src/test/java/org/apa...

Author: angela
Date: Thu May 15 07:44:27 2008
New Revision: 656685

URL: http://svn.apache.org/viewvc?rev=656685&view=rev
Log:
JCR-1571: DavMethodBase#getResponseException fails if the body is not (valid) XML

Added:
    jackrabbit/trunk/jackrabbit-webdav/src/test/
    jackrabbit/trunk/jackrabbit-webdav/src/test/java/
    jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/
    jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/
    jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/
    jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/
    jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/client/
    jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/client/methods/
    jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/client/methods/DavMethodTest.java   (with props)
    jackrabbit/trunk/jackrabbit-webdav/src/test/resources/
    jackrabbit/trunk/jackrabbit-webdav/src/test/resources/log4j.properties   (with props)
Modified:
    jackrabbit/trunk/jackrabbit-webdav/pom.xml
    jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/DavMethodBase.java

Modified: jackrabbit/trunk/jackrabbit-webdav/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/pom.xml?rev=656685&r1=656684&r2=656685&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/pom.xml (original)
+++ jackrabbit/trunk/jackrabbit-webdav/pom.xml Thu May 15 07:44:27 2008
@@ -54,6 +54,18 @@
         </includes>
       </resource>
     </resources>
+    <plugins>
+      <plugin>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <includes>
+            <include>**/*Test.java</include>
+          </includes>
+          <forkMode>once</forkMode>
+          <argLine>-Xmx128m -enableassertions</argLine>
+        </configuration>
+      </plugin>
+    </plugins>
   </build>
 
   <dependencies>

Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/DavMethodBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/DavMethodBase.java?rev=656685&r1=656684&r2=656685&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/DavMethodBase.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/DavMethodBase.java Thu May 15 07:44:27 2008
@@ -34,6 +34,7 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -55,7 +56,7 @@
     private MultiStatus multiStatus;
 
     public DavMethodBase(String uri) {
-	super(uri);
+        super(uri);
     }
 
     //---------------------------------------------------------< HttpMethod >---
@@ -107,14 +108,14 @@
         if (responseDocument != null) {
             // response has already been read
             return responseDocument;
-        } else {
+        }
+
+        InputStream in = getResponseBodyAsStream();
+        if (in != null) {
             // read response and try to build a xml document
-            InputStream in = getResponseBodyAsStream();
-            if (in == null) {
-                return null;
-            }
             try {
                 DocumentBuilder docBuilder = BUILDER_FACTORY.newDocumentBuilder();
+                docBuilder.setErrorHandler(new DefaultHandler());
                 responseDocument = docBuilder.parse(in);
                 return responseDocument;
             } catch (ParserConfigurationException e) {
@@ -125,6 +126,8 @@
                 in.close();
             }
         }
+        // no body or no parseable.
+        return null;
     }
 
     /**
@@ -144,14 +147,19 @@
      * @see DavMethod#getResponseException()
      */
     public DavException getResponseException() throws IOException {
-	checkUsed();
-	if (success) {
+        checkUsed();
+        if (success) {
             String msg = "Cannot retrieve exception from successful response.";
-	    log.warn(msg);
-	    throw new IllegalStateException(msg);
-	}
+            log.warn(msg);
+            throw new IllegalStateException(msg);
+        }
 
-        Element responseRoot = getRootElement();
+        Element responseRoot = null;
+        try  {
+            responseRoot = getRootElement();
+        } catch (IOException e) {
+            // unparsable body -> use null element
+        }
         if (responseRoot != null) {
             return new DavException(getStatusCode(), getStatusText(), null, responseRoot);
         } else {
@@ -205,7 +213,8 @@
     /**
      *
      * @param statusCode
-     * @return
+     * @return true if the specified status code corresponds to a successfully
+     * completed request.
      */
     abstract protected boolean isSuccess(int statusCode);
 
@@ -218,8 +227,7 @@
     }
 
     /**
-     *
-     * @return
+     * @return true if this method was successfully executed; false otherwise.
      */
     protected boolean getSuccess() {
         return success;

Added: jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/client/methods/DavMethodTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/client/methods/DavMethodTest.java?rev=656685&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/client/methods/DavMethodTest.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/client/methods/DavMethodTest.java Thu May 15 07:44:27 2008
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.client.methods;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.jackrabbit.webdav.DavException;
+import org.w3c.dom.Document;
+import junit.framework.TestCase;
+
+import java.io.IOException;
+
+/** <code>DavMethodTest</code>... */
+public class DavMethodTest extends TestCase {
+
+    private static Logger log = LoggerFactory.getLogger(DavMethodTest.class);
+
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    public void testGetReponseException() throws IOException {
+        DavMethod m = new TestDavMethod();
+        DavException e = m.getResponseException();
+
+        assertFalse(e.hasErrorCondition());
+    }
+
+
+    private class TestDavMethod extends DavMethodBase {
+        private TestDavMethod() {
+            super("test");
+        }
+        public String getName() {
+            return "test";
+        }
+        public int getStatusCode() {
+            return 404;
+        }
+        public String getStatusText() {
+            return "404";
+        }
+        public Document getResponseBodyAsDocument() throws IOException {
+            throw new IOException();
+        }
+        public void checkSuccess() throws DavException, IOException {
+            throw new DavException(404);
+        }
+        public boolean succeeded() {
+            return false;
+        }
+        protected void checkUsed() {}
+        protected boolean isSuccess(int statusCode) {
+            return false;
+        }
+        protected boolean getSuccess() {
+            return false;
+        }
+    }
+}
\ No newline at end of file

Propchange: jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/client/methods/DavMethodTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/jackrabbit-webdav/src/test/java/org/apache/jackrabbit/webdav/client/methods/DavMethodTest.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision url

Added: jackrabbit/trunk/jackrabbit-webdav/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/test/resources/log4j.properties?rev=656685&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/test/resources/log4j.properties (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/test/resources/log4j.properties Thu May 15 07:44:27 2008
@@ -0,0 +1,34 @@
+#  Licensed to the Apache Software Foundation (ASF) under one or more
+#  contributor license agreements.  See the NOTICE file distributed with
+#  this work for additional information regarding copyright ownership.
+#  The ASF licenses this file to You 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.
+
+# Set root logger level to INFO and its only appender to file.
+log4j.rootLogger=INFO, file
+#log4j.rootLogger=DEBUG, stdout, file
+#log4j.rootLogger=ERROR, stdout, file
+
+# 'stdout' is set to be a ConsoleAppender.
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+
+# 'stdout' uses PatternLayout
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
+
+# 'file' is set to be a FileAppender.
+log4j.appender.file=org.apache.log4j.FileAppender
+log4j.appender.file.File=target/jcr.log
+
+# 'file' uses PatternLayout.
+log4j.appender.file.layout=org.apache.log4j.PatternLayout
+log4j.appender.file.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n

Propchange: jackrabbit/trunk/jackrabbit-webdav/src/test/resources/log4j.properties
------------------------------------------------------------------------------
    svn = 

Propchange: jackrabbit/trunk/jackrabbit-webdav/src/test/resources/log4j.properties
------------------------------------------------------------------------------
    svn:eol-style = native