|
For example,my yang is like below:
module zws-test {
namespace "urn:opendaylight:params:xml:ns:yang:yangtools:zws:test";
prefix test;
revision "2016-06-12"
{
description
"Test model for testing union data types.";
}
container wrapper {
leaf-list simple {
type string;
}
leaf wrap { type string; }
}
}
I can use below codes to transform Binding Aware to Binding independent object (NormalizedNode):
ModuleInfoBackedContext ctx = ModuleInfoBackedContext.create();
ctx.addModuleInfos(BindingReflections.loadModuleInfos());
schemaContext = ctx.tryToCreateSchemaContext().get();
runtimeContext = BindingRuntimeContext.create(ctx, schemaContext);
JavassistUtils utils = JavassistUtils.forClassPool(ClassPool.getDefault());
registry = new BindingNormalizedNodeCodecRegistry(StreamWriterGenerator.create(utils));
registry.onBindingRuntimeContextUpdated(runtimeContext);
WrapperBuilder wrapperB = new WrapperBuilder();
List<String> simpleList = new ArrayList<String>();
simpleList.add("simplezws");
simpleList.add("ghsgghd3333");
wrapperB.setSimple(simpleList);
wrapperB.setWrap("wrapZws");
Wrapper wrapper = wrapperB.build();
NormalizedNode<?, ?> topLevelEntry = registry.toNormalizedNode(
InstanceIdentifier.builder(
Wrapper.class).build(), wrapperB.build()).getValue();
But when I add some yang nodes like below to the above yang:
module zws-test {
namespace "urn:opendaylight:params:xml:ns:yang:yangtools:zws:test";
prefix test;
revision "2016-06-12" { description "Test model for testing union data types."; }
container wrapper {
leaf-list simple
{
type string;
}
//add yang node
container tree
{
leaf open
{
type string;
}
}
//
leaf wrap { type string; }
}
}
and then run the below codes:
ModuleInfoBackedContext ctx = ModuleInfoBackedContext.create();
ctx.addModuleInfos(BindingReflections.loadModuleInfos());
schemaContext = ctx.tryToCreateSchemaContext().get();
runtimeContext = BindingRuntimeContext.create(ctx, schemaContext);
JavassistUtils utils = JavassistUtils.forClassPool(ClassPool.getDefault());
registry = new BindingNormalizedNodeCodecRegistry(StreamWriterGenerator.create(utils));
registry.onBindingRuntimeContextUpdated(runtimeContext);
WrapperBuilder wrapperB = new WrapperBuilder();
List<String> simpleList = new ArrayList<String>();
simpleList.add("simplezws");
simpleList.add("ghsgghd3333");
wrapperB.setSimple(simpleList);
wrapperB.setWrap("wrapZws");
//add code
TreeBuilder treeB = new TreeBuilder();
treeB.setOpen("open");
//
wrapperB.setTree(treeB.build());
Wrapper wrapper = wrapperB.build();
NormalizedNode<?, ?> topLevelEntry = registry.toNormalizedNode(
InstanceIdentifier.builder(
Wrapper.class).build(), wrapperB.build()).getValue();
and it throw exceptions like this:
Exception in thread "main" com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalStateException: Failed to instantiate prototype org.opendaylight.yangtools.binding.data.codec.gen.impl.DataObjectSerializerPrototype as org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.yangtools.zws.test.rev160612.Wrapper$StreamWriter
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2203)
at com.google.common.cache.LocalCache.get(LocalCache.java:3937)
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)
at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824)
at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4830)
at org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry.getSerializer(BindingNormalizedNodeCodecRegistry.java:72)
at org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry.toNormalizedNode(BindingNormalizedNodeCodecRegistry.java:106)
at model.test.main(test.java:48)
Caused by: com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalStateException: Failed to instantiate prototype org.opendaylight.yangtools.binding.data.codec.gen.impl.DataObjectSerializerPrototype as org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.yangtools.zws.test.rev160612.Wrapper$StreamWriter
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2203)
at com.google.common.cache.LocalCache.get(LocalCache.java:3937)
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)
at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824)
at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4830)
at org.opendaylight.yangtools.binding.data.codec.gen.impl.AbstractStreamWriterGenerator.getSerializer(AbstractStreamWriterGenerator.java:89)
at org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry$GeneratorLoader.load(BindingNormalizedNodeCodecRegistry.java:276)
at org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry$GeneratorLoader.load(BindingNormalizedNodeCodecRegistry.java:273)
at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527)
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319)
at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282)
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197)
... 7 more
Caused by: java.lang.IllegalStateException: Failed to instantiate prototype org.opendaylight.yangtools.binding.data.codec.gen.impl.DataObjectSerializerPrototype as org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.yangtools.zws.test.rev160612.Wrapper$StreamWriter
at org.opendaylight.yangtools.sal.binding.generator.util.JavassistUtils.instantiatePrototype(JavassistUtils.java:135)
at org.opendaylight.yangtools.binding.data.codec.gen.impl.AbstractStreamWriterGenerator.generateEmitter0(AbstractStreamWriterGenerator.java:209)
at org.opendaylight.yangtools.binding.data.codec.gen.impl.AbstractStreamWriterGenerator.access$300(AbstractStreamWriterGenerator.java:46)
at org.opendaylight.yangtools.binding.data.codec.gen.impl.AbstractStreamWriterGenerator$SerializerImplementationLoader.generateSerializer(AbstractStreamWriterGenerator.java:136)
at org.opendaylight.yangtools.binding.data.codec.gen.impl.AbstractStreamWriterGenerator$SerializerImplementationLoader.load(AbstractStreamWriterGenerator.java:124)
at org.opendaylight.yangtools.binding.data.codec.gen.impl.AbstractStreamWriterGenerator$SerializerImplementationLoader.load(AbstractStreamWriterGenerator.java:102)
at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527)
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319)
at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282)
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197)
... 18 more
Caused by: java.lang.RuntimeException: cannot find org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.yangtools.zws.test.rev160612.wrapper: org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.yangtools.zws.test.rev160612.Wrapper found in org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/yangtools/zws/test/rev160612/wrapper.class
at javassist.CtClassType.getClassFile2(CtClassType.java:202)
at javassist.CtClassType.makeFieldCache(CtClassType.java:873)
at javassist.CtClassType.getMembers(CtClassType.java:864)
at javassist.CtClassType.getDeclaredField2(CtClassType.java:998)
at javassist.CtClassType.getField2(CtClassType.java:952)
at javassist.CtClassType.getField(CtClassType.java:933)
at javassist.CtClass.getField(CtClass.java:824)
at javassist.compiler.MemberResolver.lookupFieldByJvmName2(MemberResolver.java:282)
at javassist.compiler.TypeChecker.fieldAccess2(TypeChecker.java:913)
at javassist.compiler.TypeChecker.fieldAccess(TypeChecker.java:870)
at javassist.compiler.TypeChecker.atFieldRead(TypeChecker.java:803)
at javassist.compiler.TypeChecker.atExpr(TypeChecker.java:578)
at javassist.compiler.ast.Expr.accept(Expr.java:68)
at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:665)
at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:157)
at javassist.compiler.ast.CallExpr.accept(CallExpr.java:46)
at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:665)
at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:157)
at javassist.compiler.ast.CallExpr.accept(CallExpr.java:46)
at javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:242)
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:330)
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:50)
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:351)
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:50)
at javassist.compiler.CodeGen.atIfStmnt(CodeGen.java:398)
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:355)
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:50)
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:351)
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:50)
at javassist.compiler.CodeGen.atIfStmnt(CodeGen.java:398)
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:355)
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:50)
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:351)
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:50)
at javassist.compiler.CodeGen.atMethodBody(CodeGen.java:292)
at javassist.compiler.Javac.compileBody(Javac.java:223)
at javassist.CtBehavior.setBody(CtBehavior.java:438)
at javassist.CtBehavior.setBody(CtBehavior.java:412)
at org.opendaylight.yangtools.binding.data.codec.gen.impl.AbstractStreamWriterGenerator$2.customizeClass(AbstractStreamWriterGenerator.java:221)
at org.opendaylight.yangtools.sal.binding.generator.util.JavassistUtils.instantiatePrototype(JavassistUtils.java:131)
... 27 more
can somebody tell me why? It seems like a bug. How to transform from BA to BI in madsl?
|