Uploaded image for project: 'UIMA'
  1. UIMA
  2. UIMA-1965

XMI Delta CAS Serialization doesn't work when preexisting FS is indexed in a new View

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.3
    • 2.3.1SDK
    • Core Java Framework
    • None

    Description

      I think I ran into a problem with XMI delta CAS serialization. Here's my use case: I start with a CAS that has a FeatureStructure (not annotation) indexed in the InitialView. I want to send this to a remote service, wihch will create a new view and add the exisitng FeatureStructure to the indexes of that view. With delta XMI CAS serialization, this does not seem to work. The FeatureStructure is not present in the indexes of the new view.

      Here is a unit test (to be added to XmiCasDeserializerTest.java) that illustrates the problem:

      public void testDeltaCasIndexExistingFsInNewView() throws Exception {
      CAS cas1 = CasCreationUtils.createCas(typeSystem, new TypePriorities_impl(),
      indexes);
      CAS cas2 = CasCreationUtils.createCas(typeSystem, new TypePriorities_impl(),
      indexes);
      cas1.setDocumentText("This is a test document in the initial view");
      Type referentType = cas1.getTypeSystem().getType("org.apache.uima.testTypeSystem.Referent");
      FeatureStructure fs1 = cas1.createFS(referentType);
      cas1.getIndexRepository().addFS(fs1);

      //serialize complete
      XmiSerializationSharedData sharedData = new XmiSerializationSharedData();
      String xml = serialize(cas1, sharedData);
      System.out.println(xml);
      int maxOutgoingXmiId = sharedData.getMaxXmiId();

      //deserialize into cas2
      XmiSerializationSharedData sharedData2 = new XmiSerializationSharedData();
      this.deserialize(xml, cas2, sharedData2, true, -1);
      CasComparer.assertEquals(cas1, cas2);

      //create Marker, add/modify fs and serialize in delta xmi format.
      Marker marker = cas2.createMarker();

      //create View
      CAS view = cas2.createView("NewView");
      //add FS to index
      Type referentType2 = cas2.getTypeSystem().getType("org.apache.uima.testTypeSystem.Referent");
      Iterator<FeatureStructure> fsIter = cas2.getIndexRepository().getAllIndexedFS(referentType2);
      while (fsIter.hasNext())

      { FeatureStructure fs = fsIter.next(); view.getIndexRepository().addFS(fs); }

      AnnotationFS cas2newAnnot = view.createAnnotation(cas2.getAnnotationType(), 6, 8);
      view.getIndexRepository().addFS(cas2newAnnot);

      // serialize cas2 in delta format
      String deltaxml1 = serialize(cas2, sharedData2, marker);
      System.out.println(deltaxml1);

      //deserialize delta xmi into cas1
      this.deserialize(deltaxml1, cas1, sharedData, true, maxOutgoingXmiId, AllowPreexistingFS.allow);

      //check that new View contains the FS
      CAS deserView = cas1.getView("NewView");
      Iterator<FeatureStructure> deserFsIter = deserView.getIndexRepository().getAllIndexedFS(referentType);
      assertTrue(deserFsIter.hasNext());
      }

      Attachments

        Activity

          People

            eddie_epstein Eddie Epstein
            alally Adam P. Lally
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: