X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-data-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2Fcodec%2Fxml%2FXmlDocumentUtils.java;h=ca66967f9dc4ac68cad4e737673d4784256daf83;hb=5cd62cd195348cd72e54c16e2aee9d1e30abccb6;hp=63968e056f7d5bf6bd693ca2a8ad6de1f020fdc1;hpb=31cba39c9c255c2ad7de94d911348ab686844ce2;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlDocumentUtils.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlDocumentUtils.java index 63968e056f..ca66967f9d 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlDocumentUtils.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlDocumentUtils.java @@ -28,7 +28,16 @@ import org.opendaylight.yangtools.yang.data.impl.ImmutableCompositeNode; import org.opendaylight.yangtools.yang.data.impl.SimpleNodeTOImpl; import org.opendaylight.yangtools.yang.data.impl.codec.TypeDefinitionAwareCodec; import org.opendaylight.yangtools.yang.data.impl.util.CompositeNodeBuilder; -import org.opendaylight.yangtools.yang.model.api.*; +import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; +import org.opendaylight.yangtools.yang.model.api.ChoiceNode; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; +import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; +import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; +import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; +import org.opendaylight.yangtools.yang.model.api.SchemaNode; +import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -146,19 +155,28 @@ public class XmlDocumentUtils { element.setAttribute("xmlns:" + prefix, value.getNamespace().toString()); element.setTextContent(prefix + ":" + value.getLocalName()); } else { + Object value = node.getValue(); logger.debug("Value of {}:{} is not instance of QName but is {}", baseType.getQName().getNamespace(), // baseType.getQName().getLocalName(), // - node.getValue().getClass()); - element.setTextContent(String.valueOf(node.getValue())); + node != null ? value.getClass() : "null"); + if (value != null) { + element.setTextContent(String.valueOf(value)); + } } } else { if (node.getValue() != null) { - try { - String value = codecProvider.codecFor(baseType).serialize(node.getValue()); - element.setTextContent(value); - } catch (ClassCastException e) { + final TypeDefinitionAwareCodec codec = codecProvider.codecFor(baseType); + if (codec != null) { + try { + final String text = codec.serialize(node.getValue()); + element.setTextContent(text); + } catch (ClassCastException e) { + logger.error("Provided node did not have type required by mapping. Using stream instead.", e); + element.setTextContent(String.valueOf(node.getValue())); + } + } else { + logger.error("Failed to find codec for {}, falling back to using stream", baseType); element.setTextContent(String.valueOf(node.getValue())); - logger.error("Provided node did not have type required by mapping. Using stream instead. {}", e); } } }