X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=restconf%2Frestconf-nb-bierman02%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Fsal%2Frest%2Fimpl%2FRestconfDocumentedExceptionMapper.java;h=5561949f5e110ddd611ba4c90f06db29959411b2;hb=982e75ece2483e413befe3edd8fd90022a644f72;hp=d4df84bb1f794368c69db9235e9519aef38acecb;hpb=1bcaf624205de83ea78a131e960103f2b785468c;p=netconf.git diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfDocumentedExceptionMapper.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfDocumentedExceptionMapper.java index d4df84bb1f..5561949f5e 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfDocumentedExceptionMapper.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfDocumentedExceptionMapper.java @@ -5,19 +5,18 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.netconf.sal.rest.impl; import com.google.common.base.Preconditions; -import com.google.common.base.Throwables; import com.google.common.collect.Iterables; import com.google.gson.stream.JsonWriter; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; import java.net.URI; import java.nio.charset.StandardCharsets; -import java.util.Iterator; +import java.util.ArrayList; import java.util.List; import javax.ws.rs.core.Context; import javax.ws.rs.core.HttpHeaders; @@ -32,10 +31,10 @@ import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import org.opendaylight.netconf.sal.rest.api.Draft02; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; -import org.opendaylight.netconf.sal.restconf.impl.RestconfDocumentedException; -import org.opendaylight.netconf.sal.restconf.impl.RestconfError; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; import org.opendaylight.restconf.common.context.NormalizedNodeContext; +import org.opendaylight.restconf.common.errors.RestconfDocumentedException; +import org.opendaylight.restconf.common.errors.RestconfError; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; @@ -48,14 +47,14 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.ForwardingNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; -import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactory; +import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier; import org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.codec.gson.JsonWriterFactory; import org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -87,24 +86,26 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper accepts = headers.getAcceptableMediaTypes(); - accepts.remove(MediaType.WILDCARD_TYPE); - - LOG.debug("Accept headers: {}", accepts); - - final MediaType mediaType; - if (accepts != null && accepts.size() > 0) { - mediaType = accepts.get(0); // just pick the first one - } else { - // Default to the content type if there's no Accept header - mediaType = MediaType.APPLICATION_JSON_TYPE; + final List mediaTypeList = new ArrayList<>(); + if (headers.getMediaType() != null) { + mediaTypeList.add(headers.getMediaType()); } + mediaTypeList.addAll(headers.getAcceptableMediaTypes()); + final MediaType mediaType = mediaTypeList.stream().filter(type -> !type.equals(MediaType.WILDCARD_TYPE)) + .findFirst().orElse(MediaType.APPLICATION_JSON_TYPE); + LOG.debug("Using MediaType: {}", mediaType); final List errors = exception.getErrors(); @@ -118,8 +119,8 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper errContBuild = + final DataContainerNodeBuilder errContBuild = Builders.containerBuilder((ContainerSchemaNode) errorsSchemaNode); final List schemaList = ControllerContext.findInstanceDataChildrenByName(errorsSchemaNode, @@ -145,7 +146,7 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper(null, - (DataSchemaNode) errorsSchemaNode, null, context.getGlobalSchema()), errContBuild.build()); + (DataSchemaNode) errorsSchemaNode, null, controllerContext.getGlobalSchema()), errContBuild.build()); Object responseBody; if (mediaType.getSubtype().endsWith("json")) { @@ -161,7 +162,7 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper errNodeValues = Builders + final DataContainerNodeBuilder errNodeValues = Builders .mapEntryBuilder(listStreamSchemaNode); List lsChildDataSchemaNode = ControllerContext.findInstanceDataChildrenByName( @@ -234,7 +235,8 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper data = errorsNode.getData(); @@ -350,14 +354,18 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper child : data.getValue()) { nnWriter.write(child); @@ -366,15 +374,13 @@ public class RestconfDocumentedExceptionMapper implements ExceptionMapper> iterator = data.getValue().iterator(); - while (iterator.hasNext()) { - final DataContainerChild child = iterator.next(); + for (final DataContainerChild child : data.getValue()) { nnWriter.write(child); nnWriter.flush(); }