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%2FXmlStreamUtils.java;h=22fc3b9f767079a0897f98e73e1dd68919fdf729;hb=a1c443957c539dcf75a44aa76dfee3a860e4d085;hp=1d319a5acec49db92d0fb909e266ebc85b313508;hpb=1feff06da17ae190f1bf153a511ae04bffef5487;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlStreamUtils.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlStreamUtils.java index 1d319a5ace..22fc3b9f76 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlStreamUtils.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlStreamUtils.java @@ -1,6 +1,7 @@ package org.opendaylight.yangtools.yang.data.impl.codec.xml; import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import java.net.URI; @@ -14,9 +15,9 @@ import javax.xml.stream.XMLStreamWriter; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.AttributesContainer; import org.opendaylight.yangtools.yang.data.api.CompositeNode; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.Node; import org.opendaylight.yangtools.yang.data.api.SimpleNode; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.impl.codec.TypeDefinitionAwareCodec; import org.opendaylight.yangtools.yang.data.impl.schema.SchemaUtils; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; @@ -84,7 +85,7 @@ public class XmlStreamUtils { * @param id InstanceIdentifier * @throws XMLStreamException */ - public static void write(final @Nonnull XMLStreamWriter writer, final @Nonnull InstanceIdentifier id) throws XMLStreamException { + public static void write(final @Nonnull XMLStreamWriter writer, final @Nonnull YangInstanceIdentifier id) throws XMLStreamException { Preconditions.checkNotNull(writer, "Writer may not be null"); Preconditions.checkNotNull(id, "Variable should contain instance of instance identifier and can't be null"); @@ -148,9 +149,24 @@ public class XmlStreamUtils { } writer.writeStartElement(pfx, qname.getLocalName(), ns); + writeValue(writer, data, schema); + writer.writeEndElement(); + } + + /** + * Write a value into a XML stream writer. This method assumes the start and end of element is + * emitted by the caller. + * + * @param writer XML Stream writer + * @param data data node + * @param schema Schema node + * @throws XMLStreamException if an encoding problem occurs + */ + public void writeValue(final XMLStreamWriter writer, final @Nonnull Node data, final SchemaNode schema) throws XMLStreamException { if (data instanceof AttributesContainer && ((AttributesContainer) data).getAttributes() != null) { + RandomPrefix randomPrefix = new RandomPrefix(); for (Entry attribute : ((AttributesContainer) data).getAttributes().entrySet()) { - writer.writeAttribute(attribute.getKey().getNamespace().toString(), attribute.getKey().getLocalName(), attribute.getValue()); + writeAttribute(writer, attribute, randomPrefix); } } @@ -182,8 +198,15 @@ public class XmlStreamUtils { writeElement(writer, child, childSchema); } } + } - writer.writeEndElement(); + @VisibleForTesting + static void writeAttribute(final XMLStreamWriter writer, final Entry attribute, final RandomPrefix randomPrefix) + throws XMLStreamException { + final QName key = attribute.getKey(); + final String prefix = randomPrefix.encodePrefix(key.getNamespace()); + writer.writeAttribute("xmlns:" + prefix, key.getNamespace().toString()); + writer.writeAttribute(prefix, key.getNamespace().toString(), key.getLocalName(), attribute.getValue()); } /** @@ -191,8 +214,8 @@ public class XmlStreamUtils { * emitted by the caller. * * @param writer XML Stream writer - * @param data data node - * @param schema Schema node + * @param type data type + * @param value data value * @throws XMLStreamException if an encoding problem occurs */ public void writeValue(final @Nonnull XMLStreamWriter writer, final @Nonnull TypeDefinition type, final Object value) throws XMLStreamException { @@ -243,10 +266,10 @@ public class XmlStreamUtils { } private static void write(final @Nonnull XMLStreamWriter writer, final @Nonnull InstanceIdentifierTypeDefinition type, final @Nonnull Object value) throws XMLStreamException { - if (value instanceof InstanceIdentifier) { - write(writer, (InstanceIdentifier)value); + if (value instanceof YangInstanceIdentifier) { + write(writer, (YangInstanceIdentifier)value); } else { - LOG.debug("Value of {}:{} is not an InstanceIdentifier but {}", type.getQName().getNamespace(), type.getQName().getLocalName(), value.getClass()); + LOG.warn("Value of {}:{} is not an InstanceIdentifier but {}", type.getQName().getNamespace(), type.getQName().getLocalName(), value.getClass()); writer.writeCharacters(String.valueOf(value)); } }