[MDSAL-175] How to transform from BA to BI in mdsal? Created: 12/Jun/16  Updated: 09/Mar/18  Resolved: 21/Jun/16

Status: Resolved
Project: mdsal
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug
Reporter: zws_odl Assignee: Filip Gregor
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: All
Platform: All


External issue ID: 6052

 Description   

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?



 Comments   
Comment by Filip Gregor [ 14/Jun/16 ]

Hi, i was unable to replicate any errors. Can you please provide me with the whole malfunctioning yang and code.
Here is my working test https://git.opendaylight.org/gerrit/#/c/40280/

Comment by Filip Gregor [ 20/Jun/16 ]

If you still have any questions please write to mdsal mailing list

Comment by zhuweisheng [ 21/Jun/16 ]

(In reply to Filip Gregor from comment #2)
> If you still have any questions please write to mdsal mailing list

no, thank you very much!

Generated at Wed Feb 07 20:08:52 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.