From: Robert Varga Date: Tue, 29 Mar 2022 21:54:19 +0000 (+0200) Subject: Improve UnionXmlCodec error reporting X-Git-Tag: v8.0.3~19 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;ds=sidebyside;h=5094c1c83fccb5b6462b437fa46aa77fbea723ff;hp=1812c072a4d5c3ba77d9e6c0c7b70f399a6f900d;p=yangtools.git Improve UnionXmlCodec error reporting Collect the exceptions reported and add them as suppressed in case we end up rejecting all values. Change-Id: I6aa6d99d4a60426963dc30a1a5595b8ecd7a3bab Signed-off-by: Robert Varga --- diff --git a/codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/UnionXmlCodec.java b/codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/UnionXmlCodec.java index 76c7a5b469..03663d6cb8 100644 --- a/codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/UnionXmlCodec.java +++ b/codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/UnionXmlCodec.java @@ -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 implements XmlCodec { @Override @SuppressWarnings("checkstyle:illegalCatch") public final T parseValue(final NamespaceContext ctx, final String str) { + final var suppressed = new ArrayList(); + 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