X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-data-codec-xml%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fcodec%2Fxml%2FSchemaAwareXMLStreamNormalizedNodeStreamWriter.java;h=f859479751f1a58a3681e4d58ff27cf94ab22006;hb=5280e8d0efe5177e5bd9fa15bfd2bdc01e222d1b;hp=54be0c26226856214a65f09a396760299e56e7f8;hpb=e6e443d3e4dfd3d6e0726262dac9239952dc7adc;p=yangtools.git diff --git a/yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/SchemaAwareXMLStreamNormalizedNodeStreamWriter.java b/yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/SchemaAwareXMLStreamNormalizedNodeStreamWriter.java index 54be0c2622..f859479751 100644 --- a/yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/SchemaAwareXMLStreamNormalizedNodeStreamWriter.java +++ b/yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/SchemaAwareXMLStreamNormalizedNodeStreamWriter.java @@ -17,6 +17,7 @@ import java.util.Optional; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import javax.xml.transform.dom.DOMSource; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.rfc7952.model.api.AnnotationSchemaNode; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; @@ -33,7 +34,9 @@ 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.TypedDataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition; final class SchemaAwareXMLStreamNormalizedNodeStreamWriter extends XMLStreamNormalizedNodeStreamWriter implements EffectiveModelContextProvider { @@ -50,7 +53,7 @@ final class SchemaAwareXMLStreamNormalizedNodeStreamWriter @Override String encodeValue(final ValueWriter xmlWriter, final Object value, final TypedDataSchemaNode schemaNode) throws XMLStreamException { - return streamUtils.encodeValue(xmlWriter, schemaNode, schemaNode.getType(), value, + return streamUtils.encodeValue(xmlWriter, resolveType(schemaNode.getType()), value, schemaNode.getQName().getModule()); } @@ -60,8 +63,8 @@ final class SchemaAwareXMLStreamNormalizedNodeStreamWriter final Optional optAnnotation = AnnotationSchemaNode.find(streamUtils.getEffectiveModelContext(), qname); if (optAnnotation.isPresent()) { - final AnnotationSchemaNode schema = optAnnotation.get(); - return streamUtils.encodeValue(xmlWriter, schema, schema.getType(), value, qname.getModule()); + return streamUtils.encodeValue(xmlWriter, resolveType(optAnnotation.get().getType()), value, + qname.getModule()); } checkArgument(!qname.getRevision().isPresent(), "Failed to find bound annotation %s", qname); @@ -171,4 +174,15 @@ final class SchemaAwareXMLStreamNormalizedNodeStreamWriter void startAnydata(final NodeIdentifier name) { tracker.startAnydataNode(name); } + + private @NonNull TypeDefinition resolveType(final @NonNull TypeDefinition type) throws XMLStreamException { + if (type instanceof LeafrefTypeDefinition) { + try { + return tracker.resolveLeafref((LeafrefTypeDefinition) type); + } catch (IllegalArgumentException e) { + throw new XMLStreamException("Cannot resolved type " + type, e); + } + } + return type; + } }