[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. |