package org.opendaylight.controller.sal.rest.impl;
import com.google.common.base.Throwables;
-import com.google.common.collect.Iterables;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter;
import org.opendaylight.yangtools.yang.data.impl.codec.xml.XMLStreamNormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
+import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
@Provider
@Produces({ Draft02.MediaTypes.API + RestconfService.XML, Draft02.MediaTypes.DATA + RestconfService.XML,
final Annotation[] annotations, final MediaType mediaType,
final MultivaluedMap<String, Object> httpHeaders, final OutputStream entityStream) throws IOException,
WebApplicationException {
- final InstanceIdentifierContext pathContext = t.getInstanceIdentifierContext();
+ final InstanceIdentifierContext<?> pathContext = t.getInstanceIdentifierContext();
if (t.getData() == null) {
return;
}
NormalizedNode<?, ?> data = t.getData();
SchemaPath schemaPath = pathContext.getSchemaNode().getPath();
- // The utility method requires the path to be size of 2
- boolean isRpc = false;
- if(Iterables.size(schemaPath.getPathFromRoot()) > 1) {
- isRpc = SchemaContextUtil.getRpcDataSchema(t.getInstanceIdentifierContext().getSchemaContext(), schemaPath) != null;
- }
-
boolean isDataRoot = false;
if (SchemaPath.ROOT.equals(schemaPath)) {
isDataRoot = true;
- // The rpc definitions required the schema path to point to the output container, not the parent (rpc itself)
+ } else if (pathContext.getSchemaNode() instanceof RpcDefinition) {
+ isDataRoot = true;
+ schemaPath = ((RpcDefinition) pathContext.getSchemaNode()).getOutput().getPath();
} else {
- if(!isRpc) {
- schemaPath = schemaPath.getParent();
- }
+ schemaPath = schemaPath.getParent();
}
final NormalizedNodeStreamWriter jsonWriter = XMLStreamNormalizedNodeStreamWriter.create(xmlWriter,
pathContext.getSchemaContext(), schemaPath);
final NormalizedNodeWriter nnWriter = NormalizedNodeWriter.forStreamWriter(jsonWriter);
if (isDataRoot) {
- writeRootElement(xmlWriter, nnWriter, (ContainerNode) data, SchemaContext.NAME);
- } else if(isRpc) {
- writeRootElement(xmlWriter, nnWriter, (ContainerNode) data, schemaPath.getLastComponent());
+ writeRootElement(xmlWriter, nnWriter, (ContainerNode) data);
} else {
if (data instanceof MapEntryNode) {
// Restconf allows returning one list item. We need to wrap it
}
}
- private void writeRootElement(final XMLStreamWriter xmlWriter, final NormalizedNodeWriter nnWriter, final ContainerNode data, final QName name)
+ private void writeRootElement(final XMLStreamWriter xmlWriter, final NormalizedNodeWriter nnWriter, final ContainerNode data)
throws IOException {
try {
+ final QName name = SchemaContext.NAME;
xmlWriter.writeStartElement(name.getNamespace().toString(), name.getLocalName());
for (final DataContainerChild<? extends PathArgument, ?> child : data.getValue()) {
nnWriter.write(child);