Uploaded image for project: 'Olingo'
  1. Olingo
  2. OLINGO-857

AnnotationEdmProvider generates unparsable EDM

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • V2 2.0.5
    • None
    • odata2-annotation
    • None

    Description

      Using different namespaces for olingo annotated POJOs and the AnnotationEdmProvider may produce unparsable queries. Here is how to reproduce:

      • create model that uses 2 namespaces with navigation between entities, for example the entities A and B have namespace AB, the entities C, D have namespace CD.
        @EdmEntityType(name = "A", namespace = "AB")
            @EdmEntitySet(name = "AA")
            class A {
                @EdmKey
                @EdmProperty
                String id;
                @EdmNavigationProperty(toMultiplicity = Multiplicity.ZERO_OR_ONE, toType = B.class)
                B b;
            }
            @EdmEntityType(name = "B", namespace = "AB")
            @EdmEntitySet
            class B {
                @EdmNavigationProperty(toMultiplicity = Multiplicity.MANY, toType = A.class)
                List<A> a;
            }
            @EdmEntityType(name = "C", namespace = "CD")
            @EdmEntitySet(name = "CC")
            class C {
                @EdmKey
                @EdmProperty
                String id;
                @EdmNavigationProperty(toMultiplicity = Multiplicity.ZERO_OR_ONE, toType = D.class)
                D d;
            }
            @EdmEntityType(name = "D", namespace = "CD")
            @EdmEntitySet
            class D {
                @EdmNavigationProperty(toMultiplicity = Multiplicity.MANY, toType = C.class)
                List<C> c;
            }
        
      • Now build the model with
        new AnnotationEdmProvider(Arrays.<Class<?>> asList(A.class, B.class, C.class, D.class));      
        
      • The query http://localhost/CC('1')/D results in
        Attempt to parse these queries results in
        org.apache.olingo.odata2.api.edm.EdmException: An exception occurred.
        	at org.apache.olingo.odata2.core.edm.provider.EdmEntityContainerImplProv.getAssociationSet(EdmEntityContainerImplProv.java:169)
        	at 
        ...
        

      I guess the reason is that the default namespace container is generated in the wrong schema (the schema for the last entities in the list)

      This issue is blocking our development.

      Attachments

        1. ABCD.edmx
          2 kB
          Mit Ko
        2. AnnotationEdmProviderNamespacesTest.java
          5 kB
          mibo
        3. CDAB.edmx
          2 kB
          Mit Ko
        4. -Edm-model-with-namespaces.patch
          5 kB
          Mit Ko
        5. long-description.txt
          5 kB
          Mit Ko

        Activity

          People

            mirbo mibo
            mkolev Mit Ko
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated: