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%2FJsonNormalizedNodeBodyReader.java;h=f90997354b2ab0305313ac8975e6207bd95c3b6a;hb=cb1d2f74b370c16357af975a136e687fba3303e6;hp=e520043882330a0d85f720ab041a630121a51813;hpb=297030dc32e29a3ac0c76aa3d6279e7e047532b3;p=netconf.git diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/JsonNormalizedNodeBodyReader.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/JsonNormalizedNodeBodyReader.java index e520043882..f90997354b 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/JsonNormalizedNodeBodyReader.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/JsonNormalizedNodeBodyReader.java @@ -14,8 +14,10 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.lang.annotation.Annotation; import java.lang.reflect.Type; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import javax.ws.rs.Consumes; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; @@ -30,7 +32,7 @@ import org.opendaylight.restconf.common.context.NormalizedNodeContext; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; import org.opendaylight.restconf.common.errors.RestconfError.ErrorTag; import org.opendaylight.restconf.common.errors.RestconfError.ErrorType; -import org.opendaylight.restconf.utils.RestconfConstants; +import org.opendaylight.restconf.common.util.RestUtil; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; @@ -39,6 +41,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier; import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; @@ -58,6 +61,10 @@ public class JsonNormalizedNodeBodyReader private static final Logger LOG = LoggerFactory.getLogger(JsonNormalizedNodeBodyReader.class); + public JsonNormalizedNodeBodyReader(ControllerContext controllerContext) { + super(controllerContext); + } + @Override public boolean isReadable(final Class type, final Type genericType, final Annotation[] annotations, final MediaType mediaType) { @@ -71,13 +78,6 @@ public class JsonNormalizedNodeBodyReader final MultivaluedMap httpHeaders, final InputStream entityStream) throws IOException, WebApplicationException { try { - if (getUriInfo().getAbsolutePath().getPath().contains(RestconfConstants.DRAFT_PATTERN)) { - final org.opendaylight.restconf.jersey.providers.JsonNormalizedNodeBodyReader jsonReaderNewRest = - new org.opendaylight.restconf.jersey.providers.JsonNormalizedNodeBodyReader(); - jsonReaderNewRest.injectParams(getUriInfo(), getRequest()); - return jsonReaderNewRest.readFrom(type, genericType, annotations, mediaType, httpHeaders, entityStream); - } - return readFrom(getInstanceIdentifierContext(), entityStream, isPost()); } catch (final Exception e) { propagateExceptionAs(e); @@ -87,10 +87,10 @@ public class JsonNormalizedNodeBodyReader @SuppressWarnings("checkstyle:IllegalCatch") public static NormalizedNodeContext readFrom(final String uriPath, final InputStream entityStream, - final boolean isPost) throws RestconfDocumentedException { + final boolean isPost, final ControllerContext controllerContext) throws RestconfDocumentedException { try { - return readFrom(ControllerContext.getInstance().toInstanceIdentifier(uriPath), entityStream, isPost); + return readFrom(controllerContext.toInstanceIdentifier(uriPath), entityStream, isPost); } catch (final Exception e) { propagateExceptionAs(e); return null; // no-op @@ -100,7 +100,8 @@ public class JsonNormalizedNodeBodyReader private static NormalizedNodeContext readFrom(final InstanceIdentifierContext path, final InputStream entityStream, final boolean isPost) throws IOException { - if (entityStream.available() < 1) { + final Optional nonEmptyInputStreamOptional = RestUtil.isInputStreamEmpty(entityStream); + if (!nonEmptyInputStreamOptional.isPresent()) { return new NormalizedNodeContext(path, null); } final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); @@ -121,8 +122,10 @@ public class JsonNormalizedNodeBodyReader } } - final JsonParserStream jsonParser = JsonParserStream.create(writer, path.getSchemaContext(), parentSchema); - final JsonReader reader = new JsonReader(new InputStreamReader(entityStream)); + final JsonParserStream jsonParser = JsonParserStream.create(writer, + JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(path.getSchemaContext()), parentSchema); + final JsonReader reader = new JsonReader(new InputStreamReader(nonEmptyInputStreamOptional.get(), + StandardCharsets.UTF_8)); jsonParser.parse(reader); NormalizedNode result = resultHolder.getResult();