Uploaded image for project: 'mdsal'
  1. mdsal
  2. MDSAL-175

How to transform from BA to BI in mdsal?

    XMLWordPrintable

Details

    • Bug
    • Status: Resolved
    • Resolution: Done
    • None
    • None
    • None
    • None
    • Operating System: All
      Platform: All

    • 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?

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            filip.gregor@pantheon.tech Filip Gregor
            276587401@qq.com zws_odl
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: