X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-data-codec-gson%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fcodec%2Fgson%2FJSONCodecFactory.java;h=1d6ffc827724a1670da028bdc5a34cc9810ccc43;hb=e704e6a6d1cc4db7ac1e1f53b54ec3bf51aaecc3;hp=ebbd99af322032d5ff2a513a3e241aea3b5adbe5;hpb=4477f51366dd28810ae7efb62ee176fadbe33633;p=yangtools.git diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONCodecFactory.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONCodecFactory.java index ebbd99af32..1d6ffc8277 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONCodecFactory.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONCodecFactory.java @@ -9,6 +9,7 @@ package org.opendaylight.yangtools.yang.data.codec.gson; import com.google.common.annotations.Beta; import com.google.common.base.Preconditions; +import com.google.common.base.Verify; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; @@ -20,6 +21,7 @@ import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition; @@ -79,7 +81,7 @@ public final class JSONCodecFactory { private JSONCodecFactory(final SchemaContext context) { this.schemaContext = Preconditions.checkNotNull(context); - iidCodec = new JSONStringInstanceIdentifierCodec(context); + iidCodec = new JSONStringInstanceIdentifierCodec(context, this); } /** @@ -94,15 +96,15 @@ public final class JSONCodecFactory { @SuppressWarnings("unchecked") private JSONCodec createCodec(final DataSchemaNode key, final TypeDefinition type) { - final TypeDefinition baseType = DerivedType.from(type); - if (baseType instanceof LeafrefTypeDefinition) { - return createReferencedTypeCodec(key, (LeafrefTypeDefinition) baseType); - } else if (baseType instanceof IdentityrefTypeDefinition) { - final JSONCodec jsonStringIdentityrefCodec = new JSONStringIdentityrefCodec(schemaContext, - key.getQName().getModule()); + final TypeDefinition normalizedType = DerivedType.from(type); + if (normalizedType instanceof LeafrefTypeDefinition) { + return createReferencedTypeCodec(key, (LeafrefTypeDefinition) normalizedType); + } else if (normalizedType instanceof IdentityrefTypeDefinition) { + final JSONCodec jsonStringIdentityrefCodec = + new JSONStringIdentityrefCodec(schemaContext, key.getQName().getModule()); return (JSONCodec) jsonStringIdentityrefCodec; } - return createFromSimpleType(type); + return createFromSimpleType(normalizedType); } private JSONCodec createReferencedTypeCodec(final DataSchemaNode schema, @@ -110,6 +112,7 @@ public final class JSONCodecFactory { // FIXME: Verify if this does indeed support leafref of leafref final TypeDefinition referencedType = SchemaContextUtil.getBaseTypeForLeafRef(type, getSchemaContext(), schema); + Verify.verifyNotNull(referencedType, "Unable to find base type for leafref node '%s'.", schema.getPath()); return createCodec(schema, referencedType); } @@ -118,6 +121,9 @@ public final class JSONCodecFactory { if (type instanceof InstanceIdentifierTypeDefinition) { return (JSONCodec) iidCodec; } + if (type instanceof EmptyTypeDefinition) { + return JSONEmptyCodec.INSTANCE; + } final TypeDefinitionAwareCodec codec = TypeDefinitionAwareCodec.from(type); if (codec == null) {