You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xmlrpc-auto@ws.apache.org by jo...@apache.org on 2007/03/23 05:53:19 UTC

svn commit: r521585 - in /webservices/xmlrpc/trunk: common/src/main/java/org/apache/xmlrpc/parser/ src/changes/ tests/src/test/java/org/apache/xmlrpc/test/

Author: jochen
Date: Thu Mar 22 21:53:18 2007
New Revision: 521585

URL: http://svn.apache.org/viewvc?view=rev&rev=521585
Log:
An invalid dateTime value is now causing a more informative error message.
PR: XMLRPC-140

Modified:
    webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/CalendarParser.java
    webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/DateParser.java
    webservices/xmlrpc/trunk/src/changes/changes.xml
    webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ParserTest.java

Modified: webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/CalendarParser.java
URL: http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/CalendarParser.java?view=diff&rev=521585&r1=521584&r2=521585
==============================================================================
--- webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/CalendarParser.java (original)
+++ webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/CalendarParser.java Thu Mar 22 21:53:18 2007
@@ -31,8 +31,15 @@
 		try {
 			super.setResult(format.parseObject(pResult.trim()));
 		} catch (ParseException e) {
-			throw new SAXParseException("Failed to parse integer value: " + pResult,
-										getDocumentLocator());
+            int offset = e.getErrorOffset();
+            final String msg;
+            if (offset == -1) {
+                msg = "Failed to parse dateTime value: " + pResult;
+            } else {
+                msg = "Failed to parse dateTime value " + pResult
+                    + " at position " + e.getErrorOffset();
+            }
+            throw new SAXParseException(msg, getDocumentLocator(), e);
 		}
 	}
 }

Modified: webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/DateParser.java
URL: http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/DateParser.java?view=diff&rev=521585&r1=521584&r2=521585
==============================================================================
--- webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/DateParser.java (original)
+++ webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/DateParser.java Thu Mar 22 21:53:18 2007
@@ -41,8 +41,15 @@
 		try {
 			super.setResult(f.parseObject(s));
 		} catch (ParseException e) {
-			throw new SAXParseException("Failed to parse integer value: " + pResult,
-										getDocumentLocator());
+            final String msg;
+            int offset = e.getErrorOffset();
+            if (e.getErrorOffset() == -1) {
+                msg = "Failed to parse date value: " + pResult;
+            } else {
+                msg = "Failed to parse date value " + pResult
+                    + " at position " + offset;
+            }
+			throw new SAXParseException(msg, getDocumentLocator(), e);
 		}
 	}
 }

Modified: webservices/xmlrpc/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/src/changes/changes.xml?view=diff&rev=521585&r1=521584&r2=521585
==============================================================================
--- webservices/xmlrpc/trunk/src/changes/changes.xml (original)
+++ webservices/xmlrpc/trunk/src/changes/changes.xml Thu Mar 22 21:53:18 2007
@@ -60,6 +60,10 @@
           due-to="Mario Linke" due-to-email="linke.mario@web.de">
         Fixed an invalid example in the "advanced" document.
       </action>
+      <action dev="jochen" type="fix" issue="XMLRPC-140">
+        An invalid dateTime value is now causing a more informative
+        error message.
+      </action>
     </release>
     <release version="3.0.1-SNAPSHOT" date="Not yet released">
       <action dev="jochen" type="fix">

Modified: webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ParserTest.java
URL: http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ParserTest.java?view=diff&rev=521585&r1=521584&r2=521585
==============================================================================
--- webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ParserTest.java (original)
+++ webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ParserTest.java Thu Mar 22 21:53:18 2007
@@ -2,6 +2,9 @@
 
 import java.io.IOException;
 import java.io.StringReader;
+import java.lang.reflect.UndeclaredThrowableException;
+import java.text.ParseException;
+import java.util.TimeZone;
 
 import junit.framework.TestCase;
 
@@ -11,11 +14,16 @@
 import org.apache.xmlrpc.common.XmlRpcHttpRequestConfigImpl;
 import org.apache.xmlrpc.common.XmlRpcStreamConfig;
 import org.apache.xmlrpc.common.XmlRpcStreamRequestConfig;
+import org.apache.xmlrpc.parser.CalendarParser;
+import org.apache.xmlrpc.parser.DateParser;
 import org.apache.xmlrpc.parser.XmlRpcRequestParser;
 import org.apache.xmlrpc.parser.XmlRpcResponseParser;
 import org.apache.xmlrpc.util.SAXParsers;
+import org.apache.xmlrpc.util.XmlRpcDateTimeDateFormat;
+import org.apache.xmlrpc.util.XmlRpcDateTimeFormat;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
 import org.xml.sax.XMLReader;
 
 
@@ -112,5 +120,33 @@
         assertEquals("bar", p4.getMethodName());
         assertNotNull(p4.getParams());
         assertTrue(p4.getParams().size() == 0);
+    }
+
+    /**
+     * Test for XMLRPC-140.
+     */
+    public void testXMLRPC140() throws Exception {
+        DateParser parser = new DateParser(new XmlRpcDateTimeFormat(){
+            private static final long serialVersionUID = 0L;
+            protected TimeZone getTimeZone() {
+                return TimeZone.getDefault();
+            }
+        }){
+            public void setResult(Object pObject){
+                try {
+                    super.setResult((String) pObject);
+                } catch (SAXException e) {
+                    throw new UndeclaredThrowableException(e);
+                }
+            }
+        };
+        try {
+            parser.setResult("20070316T162808Z");
+            fail("Expected exception");
+        } catch (UndeclaredThrowableException e) {
+            SAXParseException spe = (SAXParseException) e.getUndeclaredThrowable();
+            ParseException pe = (ParseException) spe.getException();
+            assertEquals(11, pe.getErrorOffset());
+        }
     }
 }