Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

xpath serialization issue #224

Closed
RimShao opened this issue Jul 18, 2022 · 6 comments
Closed

xpath serialization issue #224

RimShao opened this issue Jul 18, 2022 · 6 comments
Assignees

Comments

@RimShao
Copy link

RimShao commented Jul 18, 2022

Hi,

Encounter xpath serialization issue as below, send the code to reproduce problem separately. Thanks.

Exception in thread "main" java.lang.RuntimeException: No EObjectDescription could be found in Scope XpathNameTest.ref for Submodule'test-policy-cncfw'.substatements[15]->Augment.substatements[1]->List'rtbh-policy'
Semantic Object: Submodule'test-ddos-cncfw'.substatements[20]->Augment.substatements[2]->Container'mitigation'.substatements[1]->Container'templates'.substatements[1]->List'remote-blackhole'.substatements[3]->Leaf'rtbh-policy-name'.substatements[1]->Type.substatements[0]->Path.reference->XpathLocation.target->XpathLocation.step->XpathStep.node->XpathNameTest
URI: file:src/main/java/testdata/test-ddos-cncfw.yang
EStructuralFeature: yang::XpathNameTest.ref
	at org.eclipse.xtext.serializer.diagnostic.ISerializationDiagnostic$ExceptionThrowingAcceptor.accept(ISerializationDiagnostic.java:132)
	at org.eclipse.xtext.serializer.tokens.CrossReferenceSerializer.getCrossReferenceNameFromScope(CrossReferenceSerializer.java:139)
	at io.typefox.yang.resource.YangCrossReferenceSerializer.getCrossReferenceNameFromScope(YangCrossReferenceSerializer.java:208)
	at io.typefox.yang.resource.YangCrossReferenceSerializer.serializeCrossRef(YangCrossReferenceSerializer.java:129)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.getToken(SequenceFeeder.java:483)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:246)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.accept(BacktrackingSemanticSequencer.java:452)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.createSequence(BacktrackingSemanticSequencer.java:512)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence_XpathNameTest(YangSemanticSequencer.java:2218)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence(YangSemanticSequencer.java:585)
	at org.eclipse.xtext.serializer.sequencer.AbstractSemanticSequencer.createSequence(AbstractSemanticSequencer.java:68)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptEObjectRuleCall(SequenceFeeder.java:327)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptRuleCall(SequenceFeeder.java:354)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:248)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.accept(BacktrackingSemanticSequencer.java:452)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.createSequence(BacktrackingSemanticSequencer.java:512)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence_XpathStep(YangSemanticSequencer.java:2713)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence(YangSemanticSequencer.java:658)
	at org.eclipse.xtext.serializer.sequencer.AbstractSemanticSequencer.createSequence(AbstractSemanticSequencer.java:68)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptEObjectRuleCall(SequenceFeeder.java:327)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptRuleCall(SequenceFeeder.java:354)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:248)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.accept(BacktrackingSemanticSequencer.java:452)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.createSequence(BacktrackingSemanticSequencer.java:512)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence_XpathPathExpr(YangSemanticSequencer.java:2379)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence(YangSemanticSequencer.java:550)
	at org.eclipse.xtext.serializer.sequencer.AbstractSemanticSequencer.createSequence(AbstractSemanticSequencer.java:68)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptAction(SequenceFeeder.java:319)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:121)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.accept(BacktrackingSemanticSequencer.java:454)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.createSequence(BacktrackingSemanticSequencer.java:512)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence_XpathPathExpr(YangSemanticSequencer.java:2379)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence(YangSemanticSequencer.java:550)
	at org.eclipse.xtext.serializer.sequencer.AbstractSemanticSequencer.createSequence(AbstractSemanticSequencer.java:68)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptEObjectRuleCall(SequenceFeeder.java:327)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptRuleCall(SequenceFeeder.java:354)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:248)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.accept(BacktrackingSemanticSequencer.java:452)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.createSequence(BacktrackingSemanticSequencer.java:512)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence_Path_StatementEnd(YangSemanticSequencer.java:1536)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence(YangSemanticSequencer.java:319)
	at org.eclipse.xtext.serializer.sequencer.AbstractSemanticSequencer.createSequence(AbstractSemanticSequencer.java:68)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptEObjectRuleCall(SequenceFeeder.java:327)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptRuleCall(SequenceFeeder.java:354)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:265)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.accept(BacktrackingSemanticSequencer.java:445)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.createSequence(BacktrackingSemanticSequencer.java:512)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence_StatementEnd_Type(YangSemanticSequencer.java:1800)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence(YangSemanticSequencer.java:387)
	at org.eclipse.xtext.serializer.sequencer.AbstractSemanticSequencer.createSequence(AbstractSemanticSequencer.java:68)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptEObjectRuleCall(SequenceFeeder.java:327)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptRuleCall(SequenceFeeder.java:354)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:265)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.accept(BacktrackingSemanticSequencer.java:445)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.createSequence(BacktrackingSemanticSequencer.java:512)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence_Leaf_StatementEnd(YangSemanticSequencer.java:1337)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence(YangSemanticSequencer.java:262)
	at org.eclipse.xtext.serializer.sequencer.AbstractSemanticSequencer.createSequence(AbstractSemanticSequencer.java:68)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptEObjectRuleCall(SequenceFeeder.java:327)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptRuleCall(SequenceFeeder.java:354)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:265)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.accept(BacktrackingSemanticSequencer.java:445)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.createSequence(BacktrackingSemanticSequencer.java:512)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence_List_StatementEnd(YangSemanticSequencer.java:1367)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence(YangSemanticSequencer.java:271)
	at org.eclipse.xtext.serializer.sequencer.AbstractSemanticSequencer.createSequence(AbstractSemanticSequencer.java:68)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptEObjectRuleCall(SequenceFeeder.java:327)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptRuleCall(SequenceFeeder.java:354)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:265)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.accept(BacktrackingSemanticSequencer.java:445)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.createSequence(BacktrackingSemanticSequencer.java:512)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence_Container_StatementEnd(YangSemanticSequencer.java:865)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence(YangSemanticSequencer.java:196)
	at org.eclipse.xtext.serializer.sequencer.AbstractSemanticSequencer.createSequence(AbstractSemanticSequencer.java:68)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptEObjectRuleCall(SequenceFeeder.java:327)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptRuleCall(SequenceFeeder.java:354)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:265)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.accept(BacktrackingSemanticSequencer.java:445)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.createSequence(BacktrackingSemanticSequencer.java:512)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence_Container_StatementEnd(YangSemanticSequencer.java:865)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence(YangSemanticSequencer.java:196)
	at org.eclipse.xtext.serializer.sequencer.AbstractSemanticSequencer.createSequence(AbstractSemanticSequencer.java:68)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptEObjectRuleCall(SequenceFeeder.java:327)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptRuleCall(SequenceFeeder.java:354)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:265)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.accept(BacktrackingSemanticSequencer.java:445)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.createSequence(BacktrackingSemanticSequencer.java:512)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence_Augment_StatementEnd(YangSemanticSequencer.java:751)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence(YangSemanticSequencer.java:153)
	at org.eclipse.xtext.serializer.sequencer.AbstractSemanticSequencer.createSequence(AbstractSemanticSequencer.java:68)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptEObjectRuleCall(SequenceFeeder.java:327)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptRuleCall(SequenceFeeder.java:354)
	at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:265)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.accept(BacktrackingSemanticSequencer.java:445)
	at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.createSequence(BacktrackingSemanticSequencer.java:512)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence_StatementEnd_Submodule(YangSemanticSequencer.java:1786)
	at io.typefox.yang.serializer.YangSemanticSequencer.sequence(YangSemanticSequencer.java:384)
	at org.eclipse.xtext.serializer.sequencer.AbstractSemanticSequencer.createSequence(AbstractSemanticSequencer.java:68)
	at org.eclipse.xtext.serializer.impl.Serializer.serialize(Serializer.java:122)
	at org.eclipse.xtext.serializer.impl.Serializer.serializeToRegions(Serializer.java:144)
	at org.eclipse.xtext.serializer.impl.Serializer.serialize(Serializer.java:150)
	at org.eclipse.xtext.serializer.impl.Serializer.serialize(Serializer.java:184)
	at io.typefox.yang.resource.YangSerializer.serialize(YangSerializer.java:19)
	at YangTest.main(YangTest.java:130)
@dhuebner
Copy link
Member

From the example I received this is the constellation:

main-module includes some submodules:

module test-module {
    yang-version 1.1;
    namespace urn:ietf:params:xml:ns:yang:test-module;
    prefix ts-mod;

    include sub-module0;
    include sub-module1;
    include sub-module2;
}

sub-module0 defines a contianer:

submodule sub-module0 {
    yang-version 1.1;
    belongs-to test-module {
        prefix ts-mod;
    }
    container "container" {
    }
}

sub-module1 has an augment to enhance the container:

submodule sub-module1 {
    yang-version 1.1;
    belongs-to test-module {
        prefix ts-mod;
    }

    include "sub-module0";

    augment /container {
        leaf leaf_from_sub1 {
            type int64;
        }
    }
}

sub-module2 has an augment to enhance the container and uses a leaf from sub-module1 augment as leafref:

submodule sub-module2 {
    yang-version 1.1;
    belongs-to test-module {
        prefix ts-mod;
    }
    include sub-module0;

    augment /container {
        leaf leaf_from_sub2 {
            type leafref {
                path "/container/leaf_from_sub1";
            }
        }
    }
}

The error you posted appears because the reference from sub-module2 to sub-module1 over path "/container/leaf_from_sub1"; can not be resolved.

@dhuebner
Copy link
Member

@RimShao
I was able to fix my test case by including the sub-module1 in sub-module2 so that the augment from sub-module1 is applied.

submodule sub-module2 {
    yang-version 1.1;
    belongs-to test-module {
        prefix ts-mod;
    }
    
    include sub-module0;
    // need to include in order to reference augments from sub-module1
    include sub-module1;

    augment /container {
        leaf leaf_from_sub2 {
            type leafref {
                path "/container/leaf_from_sub1";
            }
        }
    }
}

From the stacktrace you posted, you could try to include test-policy-cncfw in test-ddos-cncfw. Please let me know if it works or not.

@RimShao
Copy link
Author

RimShao commented Jul 19, 2022

Hi Dennis,

Thanks for the information.

yang-lsp 0.3.1 doesn't have this problem, and neither pyang/confdc validation result reports this submodule missing error.

Is there improvement needed in yang-lsp?

Thanks.

//BR
Rim

@RimShao
Copy link
Author

RimShao commented Jul 19, 2022

Hi Dennis,

Have tried include test-policy-cncfw in test-ddos-cncfw, the problem still exists.

//BR
Rim

@dhuebner
Copy link
Member

@RimShao

yang-lsp 0.3.1 doesn't have this problem, and neither pyang/confdc validation result reports this submodule missing error.

I see, thanks for the hint. Than it meight be ralted to #216
I will check that

@dhuebner
Copy link
Member

@RimShao
Serializer is now more lax when serializing objects that are not in actual scope, but have a resolved target element and corresponding text node.

Please try the latest v0.7.1 release (probably still syncing with maven repos) or the latest Snapshot

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants