[Practicalxml-commits] SF.net SVN: practicalxml:[116] branches/dev-1.1/src
Brought to you by:
kdgregory
|
From: Auto-Generated S. C. M. <pra...@li...> - 2009-08-18 18:52:34
|
Revision: 116
http://practicalxml.svn.sourceforge.net/practicalxml/?rev=116&view=rev
Author: kdgregory
Date: 2009-08-18 18:52:26 +0000 (Tue, 18 Aug 2009)
Log Message:
-----------
add xpath into ConversionException
Modified Paths:
--------------
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/ConversionException.java
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlAppenders.java
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanDriver.java
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanHandler.java
branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/ConversionHelper.java
branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestBean2XmlDriver.java
branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestBeanConverter.java
branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestXml2BeanDriver.java
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/ConversionException.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/ConversionException.java 2009-08-18 18:19:50 UTC (rev 115)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/ConversionException.java 2009-08-18 18:52:26 UTC (rev 116)
@@ -14,16 +14,38 @@
package net.sf.practicalxml.converter;
+import org.w3c.dom.Element;
+import net.sf.practicalxml.DomUtil;
+
+
/**
* A runtime exception thrown for any conversion error. Will always have a
- * message, and typically contains a wrapped exception.
+ * message, and typically contains a wrapped exception. If thrown during
+ * a conversion <code>from</code> XML, should also have the absolute XPath
+ * of the node that caused the problem, and this is appended to the message.
*/
public class ConversionException
extends RuntimeException
{
private static final long serialVersionUID = 1L;
+ private String _xpath;
+
+
+ public ConversionException(String message, Element elem, Throwable cause)
+ {
+ super(message, cause);
+ _xpath = DomUtil.getAbsolutePath(elem);
+ }
+
+ public ConversionException(String message, Element elem)
+ {
+ super(message);
+ _xpath = DomUtil.getAbsolutePath(elem);
+ }
+
+
public ConversionException(String message, Throwable cause)
{
super(message, cause);
@@ -33,4 +55,13 @@
{
super(message);
}
+
+
+ @Override
+ public String toString()
+ {
+ return (_xpath != null)
+ ? super.getMessage() + " (" + _xpath + ")"
+ : super.getMessage();
+ }
}
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlAppenders.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlAppenders.java 2009-08-18 18:19:50 UTC (rev 115)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Bean2XmlAppenders.java 2009-08-18 18:52:26 UTC (rev 116)
@@ -136,7 +136,7 @@
}
catch (Exception ee)
{
- throw new ConversionException("unable to append child", ee);
+ throw new ConversionException("unable to append child: " + name, _parent, ee);
}
}
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanDriver.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanDriver.java 2009-08-18 18:19:50 UTC (rev 115)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanDriver.java 2009-08-18 18:52:26 UTC (rev 116)
@@ -123,8 +123,7 @@
{
String attr = elem.getAttributeNS(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "nil");
if (!attr.equals("true"))
- throw new ConversionException(
- "missing xsi:nil: " + DomUtil.getAbsolutePath(elem));
+ throw new ConversionException("missing xsi:nil", elem);
}
return true;
@@ -137,8 +136,7 @@
return null;
if (hasElementChildren(elem))
- throw new ConversionException(
- "expecting primitive; has children: " + DomUtil.getAbsolutePath(elem));
+ throw new ConversionException("expecting primitive; has children", elem);
return _helper.parse(getText(elem), klass);
}
@@ -271,9 +269,7 @@
catch (ClassNotFoundException ee)
{
throw new ConversionException(
- "invalid Java type specification (" + javaType + "): "
- + DomUtil.getAbsolutePath(elem),
- ee);
+ "invalid Java type specification: " + javaType, elem, ee);
}
}
return _helper.getJavaType(xsiType);
@@ -287,8 +283,7 @@
String xsiType = elem.getAttributeNS(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "type");
if (StringUtils.isEmpty(xsiType))
- throw new ConversionException(
- "missing xsi:type: " + DomUtil.getAbsolutePath(elem));
+ throw new ConversionException("missing xsi:type", elem);
if (xsiType.equals(_helper.getXsdType(klass)))
return;
@@ -298,8 +293,8 @@
return;
throw new ConversionException(
- "invalid xsi:type (\"" + xsiType + "\" for " + klass.getName() + "): "
- + DomUtil.getAbsolutePath(elem));
+ "invalid xsi:type: \"" + xsiType + "\" for " + klass.getName(),
+ elem);
}
@@ -325,9 +320,7 @@
Method setter = methodMap.get(DomUtil.getLocalName(child));
if ((setter == null) && !_options.contains(Xml2BeanOptions.IGNORE_MISSING_PROPERTIES))
{
- throw new ConversionException(
- "can't find property setter in " + beanKlass.getName() + ": "
- + DomUtil.getAbsolutePath(child));
+ throw new ConversionException("can't find property setter", child);
}
return setter;
@@ -347,9 +340,9 @@
methodMap.put(propDesc.getName(), setter);
}
}
- catch (IntrospectionException e)
+ catch (IntrospectionException ee)
{
- throw new ConversionException("unable to introspect", e);
+ throw new ConversionException("unable to introspect", ee);
}
_introspectedClasses.put(klass, methodMap);
@@ -399,9 +392,7 @@
}
catch (Exception ee)
{
- throw new ConversionException(
- "unable to instantiate bean: " + DomUtil.getAbsolutePath(elem),
- ee);
+ throw new ConversionException("unable to instantiate bean", elem, ee);
}
}
@@ -414,9 +405,7 @@
}
catch (Exception ee)
{
- throw new ConversionException(
- "unable to set property: " + DomUtil.getAbsolutePath(elem),
- ee);
+ throw new ConversionException("unable to set property", elem, ee);
}
}
}
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanHandler.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanHandler.java 2009-08-18 18:19:50 UTC (rev 115)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/bean/Xml2BeanHandler.java 2009-08-18 18:52:26 UTC (rev 116)
@@ -14,17 +14,8 @@
package net.sf.practicalxml.converter.bean;
-import net.sf.practicalxml.DomUtil;
-import net.sf.practicalxml.XmlException;
-import net.sf.practicalxml.XmlUtil;
-import net.sf.practicalxml.converter.ConversionException;
-import net.sf.practicalxml.converter.internal.ConversionHelper;
-import net.sf.practicalxml.internal.StringUtils;
-
-import java.util.Arrays;
import java.util.Date;
import java.util.EnumSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -32,7 +23,12 @@
import org.w3c.dom.Element;
+import net.sf.practicalxml.DomUtil;
+import net.sf.practicalxml.converter.ConversionException;
+import net.sf.practicalxml.converter.internal.ConversionHelper;
+import net.sf.practicalxml.internal.StringUtils;
+
/**
* Invoked by {@link Xml2BeanDriver} to convert a DOM <code>Element</code>
* into the appropriate Java object. Unlike {@link Bean2XmlHandler}, there
Modified: branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/ConversionHelper.java
===================================================================
--- branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/ConversionHelper.java 2009-08-18 18:19:50 UTC (rev 115)
+++ branches/dev-1.1/src/main/java/net/sf/practicalxml/converter/internal/ConversionHelper.java 2009-08-18 18:52:26 UTC (rev 116)
@@ -33,7 +33,7 @@
*/
public class ConversionHelper
{
- private static Map<String,Class<?>> XSD_TYPE_TO_JAVA_CLASS
+ private static Map<String,Class<?>> XSD_TYPE_TO_JAVA_CLASS
= new HashMap<String,Class<?>>();
static
{
@@ -46,8 +46,8 @@
XSD_TYPE_TO_JAVA_CLASS.put("xsd:decimal", BigDecimal.class);
XSD_TYPE_TO_JAVA_CLASS.put("xsd:dateTime", Date.class);
}
-
-
+
+
// this is not static because the helpers are inner classes
private Map<Class<?>,ConversionHandler<?>> _helpers
= new HashMap<Class<?>,ConversionHandler<?>>();
@@ -64,7 +64,7 @@
_helpers.put(BigInteger.class, new BigIntegerConversionHandler());
_helpers.put(BigDecimal.class, new BigDecimalConversionHandler());
_helpers.put(Date.class, new DateConversionHandler());
-
+
_helpers.put(Boolean.TYPE, new BooleanConversionHandler());
_helpers.put(Byte.TYPE, new ByteConversionHandler());
_helpers.put(Short.TYPE, new ShortConversionHandler());
@@ -109,8 +109,8 @@
ConversionHandler<?> helper = _helpers.get(klass);
return (helper == null) ? null : helper.getXsiType();
}
-
-
+
+
/**
* Returns the Java type that best matches the given Schema type name,
* <code>null</code> if we do not have an appropriate mapping.
Modified: branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestBean2XmlDriver.java
===================================================================
--- branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestBean2XmlDriver.java 2009-08-18 18:19:50 UTC (rev 115)
+++ branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestBean2XmlDriver.java 2009-08-18 18:52:26 UTC (rev 116)
@@ -66,7 +66,7 @@
}
- private void assertConversionException(String message, Bean2XmlDriver driver, Object data)
+ private void assertConversionFailure(String message, Bean2XmlDriver driver, Object data)
{
try
{
@@ -74,7 +74,9 @@
fail(message);
}
catch (ConversionException ee)
- { /* success */ }
+ {
+// System.out.println(ee);
+ }
}
@@ -337,8 +339,8 @@
data.put("%key1%", new Integer(123));
data.put("%key2%", new Integer(456));
- assertConversionException("converted map with invalid key under INTROSPECT_MAPS",
- driver, data);
+ assertConversionFailure("converted map with invalid key under INTROSPECT_MAPS",
+ driver, data);
}
Modified: branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestBeanConverter.java
===================================================================
--- branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestBeanConverter.java 2009-08-18 18:19:50 UTC (rev 115)
+++ branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestBeanConverter.java 2009-08-18 18:52:26 UTC (rev 116)
@@ -56,7 +56,7 @@
// Support Code
//----------------------------------------------------------------------------
- private static void assertConversionError(
+ private static void assertConversionFailure(
String message, BeanConverter converter, Element elem, Class<?> klass)
{
try
@@ -65,7 +65,9 @@
fail(message);
}
catch (ConversionException ee)
- { /* success */ }
+ {
+// System.out.println(ee);
+ }
}
//----------------------------------------------------------------------------
@@ -156,7 +158,7 @@
Element root = outConverter.convertToXml(null, "test");
// System.out.println(OutputUtil.compactString(root.getOwnerDocument()));
- assertConversionError("accepted DOM with null entry but no xsi:nil",
+ assertConversionFailure("accepted DOM with null entry but no xsi:nil",
inConverter, root, String.class);
}
@@ -324,7 +326,7 @@
Element invalid = outconverter2.convertToXml(data, "test");
// System.out.println(OutputUtil.compactString(invalid.getOwnerDocument()));
- assertConversionError("converter requiring xsi:type accepted XML without",
+ assertConversionFailure("converter requiring xsi:type accepted XML without",
inConverter, invalid, SimpleBean.class);
}
Modified: branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestXml2BeanDriver.java
===================================================================
--- branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestXml2BeanDriver.java 2009-08-18 18:19:50 UTC (rev 115)
+++ branches/dev-1.1/src/test/java/net/sf/practicalxml/converter/TestXml2BeanDriver.java 2009-08-18 18:52:26 UTC (rev 116)
@@ -70,7 +70,7 @@
}
- private static void assertConversionError(
+ private static void assertConversionFailure(
String message, Xml2BeanDriver driver, Element elem, Class<?> klass)
{
try
@@ -79,7 +79,9 @@
fail(message);
}
catch (ConversionException ee)
- { /* success */ }
+ {
+// System.out.println(ee);
+ }
}
@@ -133,8 +135,8 @@
assertEquals("foo", dst);
Element invalid = createTestData(text("foo"));
- assertConversionError("converted element missing xsi:type",
- driver, invalid, String.class);
+ assertConversionFailure("converted element missing xsi:type",
+ driver, invalid, String.class);
}
@@ -143,8 +145,8 @@
Xml2BeanDriver driver = new Xml2BeanDriver(Xml2BeanOptions.REQUIRE_XSI_TYPE);
Element invalid = createTestData(text("foo"), xsiType("xsd:int"));
- assertConversionError("converted element with incorrect xsi:type",
- driver, invalid, String.class);
+ assertConversionFailure("converted element with incorrect xsi:type",
+ driver, invalid, String.class);
}
@@ -153,8 +155,8 @@
Xml2BeanDriver driver = new Xml2BeanDriver();
Element invalid = createTestData(text("foo"), element("bar"));
- assertConversionError("converted primitive with element content",
- driver, invalid, String.class);
+ assertConversionFailure("converted primitive with element content",
+ driver, invalid, String.class);
}
@@ -175,8 +177,8 @@
assertNull(driver.convert(valid, String.class));
Element invalid = createTestData();
- assertConversionError("able to convert null data with REQUIRE_XSI_NIL set",
- driver, invalid, String.class);
+ assertConversionFailure("able to convert null data with REQUIRE_XSI_NIL set",
+ driver, invalid, String.class);
}
@@ -210,8 +212,8 @@
assertNull(driver.convert(valid, String.class));
Element invalid = createTestData(text(" \t "));
- assertConversionError("able to convert blank data with CONVERT_BLANK_AS_NULL and REQUIRE_XSI_NIL set",
- driver, invalid, String.class);
+ assertConversionFailure("able to convert blank data with CONVERT_BLANK_AS_NULL and REQUIRE_XSI_NIL set",
+ driver, invalid, String.class);
}
@@ -249,8 +251,8 @@
Element invalid = createTestData(
element("foo", text("12"), xsiType("xsd:int")));
- assertConversionError("able to convert with REQUIRE_XSI_TYPE set",
- driver, invalid, int[].class);
+ assertConversionFailure("able to convert with REQUIRE_XSI_TYPE set",
+ driver, invalid, int[].class);
}
@@ -319,8 +321,8 @@
Element data = createTestData(
element("a", text("foo"), xsiType("java:foo")));
- assertConversionError("converted unknown type",
- driver, data, List.class);
+ assertConversionFailure("converted unknown type",
+ driver, data, List.class);
}
@@ -557,8 +559,8 @@
element("ival", text("123"), xsiType("xsd:int")),
element("dval", text("123.456"),xsiType("xsd:decimal")),
element("bval", text("true"), xsiType("xsd:boolean")));
- assertConversionError("didn't throw when missing xsi:type on top level",
- driver, invalid1, SimpleBean.class);
+ assertConversionFailure("didn't throw when missing xsi:type on top level",
+ driver, invalid1, SimpleBean.class);
Element invalid2 = createTestData(
xsiType("java:" + SimpleBean.class.getName()),
@@ -566,8 +568,8 @@
element("ival", text("123")),
element("dval", text("123.456")),
element("bval", text("true")));
- assertConversionError("didn't throw when missing xsi:type on component level",
- driver, invalid2, SimpleBean.class);
+ assertConversionFailure("didn't throw when missing xsi:type on component level",
+ driver, invalid2, SimpleBean.class);
}
@@ -580,7 +582,7 @@
Xml2BeanDriver driver1 = new Xml2BeanDriver();
- assertConversionError("converted bean when extra fields present in XML",
+ assertConversionFailure("converted bean when extra fields present in XML",
driver1, data, SimpleBean.class);
Xml2BeanDriver driver2 = new Xml2BeanDriver(Xml2BeanOptions.IGNORE_MISSING_PROPERTIES);
@@ -702,7 +704,7 @@
Element data = createTestData(
element("sval", text("foo")));
- assertConversionError("converted bean without setter",
- driver, data, ReadOnlyBean.class);
+ assertConversionFailure("converted bean without setter",
+ driver, data, ReadOnlyBean.class);
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|