Improve UnionXmlCodec error reporting
[yangtools.git] / codec / yang-data-codec-xml / src / main / java / org / opendaylight / yangtools / yang / data / codec / xml / UnionXmlCodec.java
index 76c7a5b469364db2f5b00c2b8a3910d96d7d20d0..03663d6cb8fbf67b7489af8163621cce53e98787 100644 (file)
@@ -11,6 +11,7 @@ import static com.google.common.base.Verify.verify;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.collect.ImmutableList;
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import javax.xml.namespace.NamespaceContext;
@@ -74,19 +75,24 @@ abstract class UnionXmlCodec<T> implements XmlCodec<T> {
     @Override
     @SuppressWarnings("checkstyle:illegalCatch")
     public final T parseValue(final NamespaceContext ctx, final String str) {
+        final var suppressed = new ArrayList<RuntimeException>();
+
         for (XmlCodec<?> codec : codecs) {
             final Object ret;
             try {
                 ret = codec.parseValue(ctx, str);
             } catch (RuntimeException e) {
                 LOG.debug("Codec {} did not accept input '{}'", codec, str, e);
+                suppressed.add(e);
                 continue;
             }
 
             return getDataType().cast(ret);
         }
 
-        throw new IllegalArgumentException("Invalid value \"" + str + "\" for union type.");
+        final var ex = new IllegalArgumentException("Invalid value \"" + str + "\" for union type.");
+        suppressed.forEach(ex::addSuppressed);
+        throw ex;
     }
 
     @Override