Integrate AnydataExtension 96/84096/3
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 30 Aug 2019 12:50:06 +0000 (14:50 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 30 Sep 2019 09:27:22 +0000 (11:27 +0200)
anydata is the same as anyxml, it should be integrated into
NormalizedNodeStreamWriter. Also update FIXME around
startAnyxmlNode() and domSourceValue().

Change-Id: Ia39515a884d1a6883fce72444b8371c4d9f7b9c1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/AnydataExtension.java [deleted file]
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/ForwardingNormalizedNodeStreamWriter.java
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/LoggingNormalizedNodeStreamWriter.java
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeStreamWriter.java
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeWriter.java
yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONNormalizedNodeStreamWriter.java
yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XMLStreamNormalizedNodeStreamWriter.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableMetadataNormalizedNodeStreamWriter.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableMountPointNormalizedNodeStreamWriter.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableNormalizedNodeStreamWriter.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AnydataNodeDataWithSchema.java

diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/AnydataExtension.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/AnydataExtension.java
deleted file mode 100644 (file)
index 388d365..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2019 PANTHEON.tech, s.r.o. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * 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.yangtools.yang.data.api.schema.stream;
-
-import com.google.common.annotations.Beta;
-import java.io.IOException;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
-
-/**
- * A {@link NormalizedNodeStreamWriterExtension} supporting streaming of {@code anydata} nodes.
- *
- * @author Robert Varga
- */
-@Beta
-// FIXME: 4.0.0: integrate this into NormalizedNodeStreamWriter
-public interface AnydataExtension extends NormalizedNodeStreamWriterExtension {
-    /**
-     * Start emitting a new anydata node identified by name.
-     *
-     * @param name The name of the anydata element
-     * @param objectModel The object model of anydata content
-     * @return True if the specified object model is supported by this extension and the process of emitting the node
-     *         has started. False if the object model is not supported and the node has not started to be emitted.
-     * @throws IOException if an underlying IO error occurs
-     */
-    boolean startAnydataNode(NodeIdentifier name, Class<?> objectModel) throws IOException;
-}
index c38fe5ca1bc5e7fabf9caef92f85f6ee5a49a9c1..aa7663442aa3aa057f2bbc51d0fb2ea1dca48651 100644 (file)
@@ -97,6 +97,11 @@ public abstract class ForwardingNormalizedNodeStreamWriter extends ForwardingObj
         delegate().startYangModeledAnyXmlNode(name, childSizeHint);
     }
 
+    @Override
+    public boolean startAnydataNode(final NodeIdentifier name, final Class<?> objectModel) throws IOException {
+        return delegate().startAnydataNode(name, objectModel);
+    }
+
     @Override
     public void endNode() throws IOException {
         delegate().endNode();
index 03c1f5b81111a215188e442ccc20753d2b9f5e8e..db4952b1dc2acfb0c3d4123d8a857801bef7d0c9 100644 (file)
@@ -135,6 +135,13 @@ public final class LoggingNormalizedNodeStreamWriter implements NormalizedNodeSt
         incIndent();
     }
 
+    @Override
+    public boolean startAnydataNode(final NodeIdentifier name, final Class<?> objectModel) {
+        LOG.debug("{}{}(anydata)", ind(), name);
+        incIndent();
+        return true;
+    }
+
     @Override
     public void startYangModeledAnyXmlNode(final NodeIdentifier name, final int childSizeHint) {
         LOG.debug("{}{}(yangModeledAnyXml)", ind(), name);
index 68d6c40aa2e9925ea37db5d6e80231a3d1d685e8..5f06ab7adb3b66ba1d5620a274c0e1ad4b89e9e3 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.yangtools.yang.data.api.schema.stream;
 
 import static java.util.Objects.requireNonNull;
 
+import com.google.common.annotations.Beta;
 import java.io.Closeable;
 import java.io.Flushable;
 import java.io.IOException;
@@ -300,7 +301,17 @@ public interface NormalizedNodeStreamWriter extends Closeable, Flushable,
      */
     void startAugmentationNode(AugmentationIdentifier identifier) throws IOException;
 
-    ////
+    /**
+     * Start emitting a new anydata node identified by name.
+     *
+     * @param name The name of the anydata element
+     * @param objectModel The object model of anydata content
+     * @return True if the specified object model is supported by this extension and the process of emitting the node
+     *         has started. False if the object model is not supported and the node has not started to be emitted.
+     * @throws IOException if an underlying IO error occurs
+     */
+    @Beta
+    boolean startAnydataNode(NodeIdentifier name, Class<?> objectModel) throws IOException;
 
     /**
      * Emits a start of anyxml node event.
@@ -312,7 +323,7 @@ public interface NormalizedNodeStreamWriter extends Closeable, Flushable,
      *                               node.
      * @throws IOException if an underlying IO error occurs
      */
-    // FIXME: 4.0.0: this method should live in a separate NormalizedNodeStreamWriterExtension
+    // FIXME: 4.0.0: this should follow the startAnydataNode template
     void startAnyxmlNode(NodeIdentifier name) throws IOException;
 
     /**
@@ -325,7 +336,7 @@ public interface NormalizedNodeStreamWriter extends Closeable, Flushable,
      *                               implementation does not allow resetting the value.
      * @throws IOException if an underlying IO error occurs
      */
-    // FIXME: 4.0.0: this method should live in a separate NormalizedNodeStreamWriterExtension
+    // FIXME: 5.0.0: this probably should integrated with scalarValue()
     void domSourceValue(DOMSource value) throws IOException;
 
     /**
index d031902522c352e7fd03e40ccbc616aacb927b1d..96500be75412f9574e282dd50cd2389b017654c7 100644 (file)
@@ -161,20 +161,15 @@ public class NormalizedNodeWriter implements Closeable, Flushable {
 
             LOG.debug("Ignoring unhandled anyxml node {}", anyxmlNode);
         } else if (node instanceof AnydataNode) {
-            final AnydataExtension ext = writer.getExtensions().getInstance(AnydataExtension.class);
-            if (ext != null) {
-                final AnydataNode<?> anydata = (AnydataNode<?>) node;
-                final Class<?> model = anydata.getValueObjectModel();
-                if (ext.startAnydataNode(anydata.getIdentifier(), model)) {
-                    writer.scalarValue(anydata.getValue());
-                    writer.endNode();
-                    return true;
-                }
-
-                LOG.debug("Writer {} does not support anydata in form of {}", writer, model);
-            } else {
-                LOG.debug("Writer {} does not support anydata", writer);
+            final AnydataNode<?> anydata = (AnydataNode<?>) node;
+            final Class<?> model = anydata.getValueObjectModel();
+            if (writer.startAnydataNode(anydata.getIdentifier(), model)) {
+                writer.scalarValue(anydata.getValue());
+                writer.endNode();
+                return true;
             }
+
+            LOG.debug("Writer {} does not support anydata in form of {}", writer, model);
         }
 
         return false;
index 6d3ba419fab3aa4e9f6c4ccafce21df979d8d5e2..8f509dc67115e5f1ce85f41c121ebb0ced28987e 100644 (file)
@@ -13,13 +13,13 @@ import static org.w3c.dom.Node.ELEMENT_NODE;
 import static org.w3c.dom.Node.TEXT_NODE;
 
 import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.ImmutableClassToInstanceMap;
 import com.google.gson.stream.JsonWriter;
 import java.io.IOException;
 import java.net.URI;
 import java.util.regex.Pattern;
 import javax.xml.transform.dom.DOMSource;
 import org.checkerframework.checker.regex.qual.Regex;
-import org.opendaylight.yangtools.concepts.ObjectExtensions;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointStreamWriter;
@@ -28,7 +28,6 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedAnydata;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.AnydataExtension;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriterExtension;
 import org.opendaylight.yangtools.yang.data.impl.codec.SchemaTracker;
@@ -52,7 +51,7 @@ import org.w3c.dom.Text;
  * <p>
  * Values of leaf and leaf-list are NOT translated according to codecs.
  */
-public abstract class JSONNormalizedNodeStreamWriter implements NormalizedNodeStreamWriter, AnydataExtension,
+public abstract class JSONNormalizedNodeStreamWriter implements NormalizedNodeStreamWriter,
         MountPointStreamWriter {
     private static final class Exclusive extends JSONNormalizedNodeStreamWriter {
         Exclusive(final JSONCodecFactory codecFactory, final SchemaTracker tracker, final JsonWriter writer,
@@ -86,10 +85,6 @@ public abstract class JSONNormalizedNodeStreamWriter implements NormalizedNodeSt
      */
     private static final boolean DEFAULT_EMIT_EMPTY_CONTAINERS = true;
 
-    static final ObjectExtensions.Factory<JSONNormalizedNodeStreamWriter, NormalizedNodeStreamWriter,
-        NormalizedNodeStreamWriterExtension> EXTENSIONS_BUILDER = ObjectExtensions.factory(
-            JSONNormalizedNodeStreamWriter.class, AnydataExtension.class, MountPointStreamWriter.class);
-
     @Regex
     private static final String NUMBER_STRING = "-?\\d+(\\.\\d+)?";
     private static final Pattern NUMBER_PATTERN = Pattern.compile(NUMBER_STRING);
@@ -217,7 +212,7 @@ public abstract class JSONNormalizedNodeStreamWriter implements NormalizedNodeSt
 
     @Override
     public ClassToInstanceMap<NormalizedNodeStreamWriterExtension> getExtensions() {
-        return EXTENSIONS_BUILDER.newInstance(this);
+        return ImmutableClassToInstanceMap.of(MountPointStreamWriter.class, this);
     }
 
     @Override
index e9cdabd6343e34180efb654fad1cad98c90747ad..2c08cfd0ce6e0d803d52b679b360171300742af2 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.data.codec.xml;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.ImmutableClassToInstanceMap;
 import com.google.common.collect.ImmutableMap;
 import java.io.IOException;
 import java.util.Map.Entry;
@@ -19,14 +20,12 @@ 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.concepts.ObjectExtensions;
 import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadataStreamWriter;
 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;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedAnydata;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.AnydataExtension;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriterExtension;
 import org.opendaylight.yangtools.yang.data.impl.codec.SchemaTracker;
@@ -51,15 +50,10 @@ import org.w3c.dom.Node;
  * removed in a future version.
  */
 public abstract class XMLStreamNormalizedNodeStreamWriter<T> implements NormalizedNodeStreamWriter,
-        NormalizedMetadataStreamWriter, AnydataExtension {
+        NormalizedMetadataStreamWriter {
     private static final Logger LOG = LoggerFactory.getLogger(XMLStreamNormalizedNodeStreamWriter.class);
     private static final Set<String> BROKEN_ATTRIBUTES = ConcurrentHashMap.newKeySet();
 
-    @SuppressWarnings("rawtypes")
-    static final ObjectExtensions.Factory<XMLStreamNormalizedNodeStreamWriter, NormalizedNodeStreamWriter,
-        NormalizedNodeStreamWriterExtension> EXTENSIONS_BUILDER = ObjectExtensions.factory(
-            XMLStreamNormalizedNodeStreamWriter.class, NormalizedMetadataStreamWriter.class, AnydataExtension.class);
-
     private final @NonNull StreamWriterFacade facade;
 
     XMLStreamNormalizedNodeStreamWriter(final XMLStreamWriter writer) {
@@ -118,7 +112,7 @@ public abstract class XMLStreamNormalizedNodeStreamWriter<T> implements Normaliz
 
     @Override
     public final ClassToInstanceMap<NormalizedNodeStreamWriterExtension> getExtensions() {
-        return EXTENSIONS_BUILDER.newInstance(this);
+        return ImmutableClassToInstanceMap.of(NormalizedMetadataStreamWriter.class, this);
     }
 
     abstract void startAnydata(NodeIdentifier name);
index de8f70365871fd7b1a23939c7116d9627ffd099e..5517aebc948da309d2d8a65b636ad0303f65d578 100644 (file)
@@ -12,20 +12,18 @@ import static java.util.Objects.requireNonNull;
 
 import com.google.common.annotations.Beta;
 import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.ImmutableClassToInstanceMap;
 import com.google.common.collect.ImmutableMap;
 import java.io.IOException;
 import java.util.ArrayDeque;
 import java.util.Deque;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.concepts.ObjectExtensions;
-import org.opendaylight.yangtools.concepts.ObjectExtensions.Factory;
 import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadata;
 import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadataStreamWriter;
 import org.opendaylight.yangtools.rfc7952.data.util.ImmutableNormalizedMetadata;
 import org.opendaylight.yangtools.rfc7952.data.util.ImmutableNormalizedMetadata.Builder;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.AnydataExtension;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriterExtension;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder;
 
@@ -57,10 +55,6 @@ public class ImmutableMetadataNormalizedNodeStreamWriter extends ImmutableNormal
         }
     }
 
-    private static final Factory<ImmutableMetadataNormalizedNodeStreamWriter, ?, NormalizedNodeStreamWriterExtension>
-        EXTENSIONS_FACTORY = ObjectExtensions.factory(ImmutableMetadataNormalizedNodeStreamWriter.class,
-            AnydataExtension.class, NormalizedMetadataStreamWriter.class);
-
     private final Deque<Builder> builders = new ArrayDeque<>();
     private final NormalizedNodeMetadataResult result;
 
@@ -77,7 +71,7 @@ public class ImmutableMetadataNormalizedNodeStreamWriter extends ImmutableNormal
 
     @Override
     public final ClassToInstanceMap<NormalizedNodeStreamWriterExtension> getExtensions() {
-        return EXTENSIONS_FACTORY.newInstance(this);
+        return ImmutableClassToInstanceMap.of(NormalizedMetadataStreamWriter.class, this);
     }
 
     @Override
index 42ffd3df8aca5b1b8d0ab30693352a83a18d1724..18ecdaf30f6ccfcfb8a78d31b5a7a391335ff876 100644 (file)
@@ -9,16 +9,14 @@ package org.opendaylight.yangtools.yang.data.impl.schema;
 
 import com.google.common.annotations.Beta;
 import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.ImmutableClassToInstanceMap;
 import java.io.IOException;
-import org.opendaylight.yangtools.concepts.ObjectExtensions;
-import org.opendaylight.yangtools.concepts.ObjectExtensions.Factory;
 import org.opendaylight.yangtools.rcf8528.data.util.ImmutableMountPointNode;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointStreamWriter;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.AnydataExtension;
 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.NormalizedNodeStreamWriterExtension;
@@ -27,17 +25,13 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre
 @Beta
 public abstract class ImmutableMountPointNormalizedNodeStreamWriter extends ImmutableNormalizedNodeStreamWriter
         implements MountPointStreamWriter {
-    private static final Factory<ImmutableMountPointNormalizedNodeStreamWriter, ?, NormalizedNodeStreamWriterExtension>
-        EXTENSIONS_FACTORY = ObjectExtensions.factory(ImmutableMountPointNormalizedNodeStreamWriter.class,
-            AnydataExtension.class, MountPointStreamWriter.class);
-
     protected ImmutableMountPointNormalizedNodeStreamWriter(final NormalizedNodeResult result) {
         super(result);
     }
 
     @Override
     public final ClassToInstanceMap<NormalizedNodeStreamWriterExtension> getExtensions() {
-        return EXTENSIONS_FACTORY.newInstance(this);
+        return ImmutableClassToInstanceMap.of(MountPointStreamWriter.class, this);
     }
 
     @Override
index 852019175f07f30cff2f17a80c359965294c1309..9cce8db57b3975a883968c4d84cf2b111e7b7dfc 100644 (file)
@@ -11,8 +11,6 @@ import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkState;
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.collect.ClassToInstanceMap;
-import com.google.common.collect.ImmutableClassToInstanceMap;
 import java.io.IOException;
 import java.util.ArrayDeque;
 import java.util.Deque;
@@ -25,9 +23,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.AnydataExtension;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriterExtension;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder;
@@ -63,7 +59,7 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
  * <p>
  * This class is not final for purposes of customization, normal users should not need to subclass it.
  */
-public class ImmutableNormalizedNodeStreamWriter implements NormalizedNodeStreamWriter, AnydataExtension {
+public class ImmutableNormalizedNodeStreamWriter implements NormalizedNodeStreamWriter {
     @SuppressWarnings("rawtypes")
     private final Deque<NormalizedNodeBuilder> builders = new ArrayDeque<>();
 
@@ -138,11 +134,6 @@ public class ImmutableNormalizedNodeStreamWriter implements NormalizedNodeStream
         return new ImmutableMetadataNormalizedNodeStreamWriter(result);
     }
 
-    @Override
-    public ClassToInstanceMap<NormalizedNodeStreamWriterExtension> getExtensions() {
-        return ImmutableClassToInstanceMap.of(AnydataExtension.class, this);
-    }
-
     @Override
     public void startLeafNode(final NodeIdentifier name) {
         checkDataNodeContainer();
index 2c67cab29bd83ba0dc14c6b4fb5b778840e5a284..035429c39e174a6602bbced86adfa8868ba10760 100644 (file)
@@ -15,7 +15,6 @@ import com.google.common.annotations.Beta;
 import java.io.IOException;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadataStreamWriter;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.AnydataExtension;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
 
@@ -47,13 +46,10 @@ public class AnydataNodeDataWithSchema extends SimpleNodeDataWithSchema<AnydataS
     @Override
     protected void write(final NormalizedNodeStreamWriter writer, final NormalizedMetadataStreamWriter metaWriter)
             throws IOException {
-        final AnydataExtension ext = writer.getExtensions().getInstance(AnydataExtension.class);
-        if (ext != null) {
-            writer.nextDataSchemaNode(getSchema());
-            if (ext.startAnydataNode(provideNodeIdentifier(), getObjectModel())) {
-                writer.scalarValue(getValue());
-                writer.endNode();
-            }
+        writer.nextDataSchemaNode(getSchema());
+        if (writer.startAnydataNode(provideNodeIdentifier(), getObjectModel())) {
+            writer.scalarValue(getValue());
+            writer.endNode();
         }
     }