*/
package org.opendaylight.restconf.nb.rfc8040.jersey.providers;
+import static java.util.Objects.requireNonNull;
+
+import java.io.IOException;
+import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyWriter;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.restconf.nb.rfc8040.legacy.InstanceIdentifierContext;
import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
+import org.opendaylight.restconf.nb.rfc8040.legacy.QueryParameters;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
abstract class AbstractNormalizedNodeBodyWriter implements MessageBodyWriter<NormalizedNodePayload> {
@Override
final MediaType mediaType) {
return type.equals(NormalizedNodePayload.class);
}
+
+ @Override
+ public final void writeTo(final NormalizedNodePayload context, final Class<?> type, final Type genericType,
+ final Annotation[] annotations, final MediaType mediaType, final MultivaluedMap<String, Object> httpHeaders,
+ final OutputStream entityStream) throws IOException {
+ final var data = context.getData();
+ if (data == null) {
+ return;
+ }
+ if (httpHeaders != null) {
+ for (var entry : context.getNewHeaders().entrySet()) {
+ httpHeaders.add(entry.getKey(), entry.getValue());
+ }
+ }
+
+ writeTo(context.getInstanceIdentifierContext(), context.getWriterParameters(), data,
+ requireNonNull(entityStream));
+ }
+
+ abstract void writeTo(@NonNull InstanceIdentifierContext context, @NonNull QueryParameters writerParameters,
+ @NonNull NormalizedNode data, @NonNull OutputStream entityStream) throws IOException;
}
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Set;
import javax.ws.rs.Produces;
-import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.Provider;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.restconf.api.query.DepthParam;
import org.opendaylight.restconf.nb.rfc8040.MediaTypes;
import org.opendaylight.restconf.nb.rfc8040.jersey.providers.api.RestconfNormalizedNodeWriter;
import org.opendaylight.restconf.nb.rfc8040.legacy.InstanceIdentifierContext;
-import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
+import org.opendaylight.restconf.nb.rfc8040.legacy.QueryParameters;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.XMLNamespace;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
@Provider
@Produces({ MediaTypes.APPLICATION_YANG_DATA_JSON, MediaType.APPLICATION_JSON })
-public class JsonNormalizedNodeBodyWriter extends AbstractNormalizedNodeBodyWriter {
+public final class JsonNormalizedNodeBodyWriter extends AbstractNormalizedNodeBodyWriter {
private static final int DEFAULT_INDENT_SPACES_NUM = 2;
@Override
- public void writeTo(final NormalizedNodePayload context,
- final Class<?> type,
- final Type genericType,
- final Annotation[] annotations,
- final MediaType mediaType,
- final MultivaluedMap<String, Object> httpHeaders,
- final OutputStream entityStream) throws IOException, WebApplicationException {
- if (context.getData() == null) {
- return;
- }
-
- if (httpHeaders != null) {
- for (var entry : context.getNewHeaders().entrySet()) {
- httpHeaders.add(entry.getKey(), entry.getValue());
- }
- }
-
- final var pretty = context.getWriterParameters().prettyPrint();
+ void writeTo(final InstanceIdentifierContext context, final QueryParameters writerParameters,
+ final NormalizedNode data, final OutputStream entityStream) throws IOException {
+ final var pretty = writerParameters.prettyPrint();
try (var jsonWriter = createJsonWriter(entityStream, pretty == null ? false : pretty.value())) {
jsonWriter.beginObject();
- writeNormalizedNode(jsonWriter, context.getInstanceIdentifierContext(), context.getData(),
- context.getWriterParameters().depth(), context.getWriterParameters().fields());
+ writeNormalizedNode(jsonWriter, context, data, writerParameters.depth(), writerParameters.fields());
jsonWriter.endObject();
jsonWriter.flush();
}
import java.io.IOException;
import java.io.OutputStream;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Set;
import javanet.staxutils.IndentingXMLStreamWriter;
import javax.ws.rs.Produces;
-import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.Provider;
import javax.xml.XMLConstants;
import javax.xml.stream.FactoryConfigurationError;
import org.opendaylight.restconf.nb.rfc8040.MediaTypes;
import org.opendaylight.restconf.nb.rfc8040.jersey.providers.api.RestconfNormalizedNodeWriter;
import org.opendaylight.restconf.nb.rfc8040.legacy.InstanceIdentifierContext;
-import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
+import org.opendaylight.restconf.nb.rfc8040.legacy.QueryParameters;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
@Provider
@Produces({ MediaTypes.APPLICATION_YANG_DATA_XML, MediaType.APPLICATION_XML, MediaType.TEXT_XML })
-public class XmlNormalizedNodeBodyWriter extends AbstractNormalizedNodeBodyWriter {
+public final class XmlNormalizedNodeBodyWriter extends AbstractNormalizedNodeBodyWriter {
private static final XMLOutputFactory XML_FACTORY;
static {
}
@Override
- public void writeTo(final NormalizedNodePayload context,
- final Class<?> type,
- final Type genericType,
- final Annotation[] annotations,
- final MediaType mediaType,
- final MultivaluedMap<String, Object> httpHeaders,
- final OutputStream entityStream) throws IOException, WebApplicationException {
- if (context.getData() == null) {
- return;
- }
- if (httpHeaders != null) {
- for (var entry : context.getNewHeaders().entrySet()) {
- httpHeaders.add(entry.getKey(), entry.getValue());
- }
- }
-
+ void writeTo(final InstanceIdentifierContext context, final QueryParameters writerParameters,
+ final NormalizedNode data, final OutputStream entityStream) throws IOException {
XMLStreamWriter xmlWriter;
try {
xmlWriter = XML_FACTORY.createXMLStreamWriter(entityStream, StandardCharsets.UTF_8.name());
- final var prettyPrint = context.getWriterParameters().prettyPrint();
+ final var prettyPrint = writerParameters.prettyPrint();
if (prettyPrint != null && prettyPrint.value()) {
xmlWriter = new IndentingXMLStreamWriter(xmlWriter);
}
throw new IllegalStateException(e);
}
- writeNormalizedNode(xmlWriter, context.getInstanceIdentifierContext(), context.getData(),
- context.getWriterParameters().depth(), context.getWriterParameters().fields());
+ writeNormalizedNode(xmlWriter, context, data, writerParameters.depth(), writerParameters.fields());
}
private static void writeNormalizedNode(final XMLStreamWriter xmlWriter,
import com.google.common.collect.ImmutableMap;
import java.net.URI;
import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
*/
public final class NormalizedNodePayload {
private final InstanceIdentifierContext context;
- private final ImmutableMap<String, Object> headers;
- private final QueryParameters writerParameters;
+ private final @NonNull ImmutableMap<String, Object> headers;
+ private final @NonNull QueryParameters writerParameters;
private final NormalizedNode data;
private NormalizedNodePayload(final InstanceIdentifierContext context, final NormalizedNode data,
return context;
}
- public NormalizedNode getData() {
+ public @Nullable NormalizedNode getData() {
return data;
}
* @return map of headers
*/
// FIXME: this is only used for redirect on subscribe
- public ImmutableMap<String, Object> getNewHeaders() {
+ public @NonNull ImmutableMap<String, Object> getNewHeaders() {
return headers;
}
- public QueryParameters getWriterParameters() {
+ public @NonNull QueryParameters getWriterParameters() {
return writerParameters;
}
}