使用EMF加载多个xmi文件

问题描述:

我一直使用EMF三周。 我已经使用正在运行的Eclipse应用程序创建了我的元模型和一个实例。现在我的问题是,我有多个由运行的Eclipse实例保存的XMI文件,我想解析它们以创建处理xml文件中的数据的另一个文本文件。 为此,我使用了EMF的XMIResource API,并且当我加载没有与其他xmi文档交叉引用的文件时,一切顺利。但是,当我加载一个xmi文档时,对其他xmi文档进行交叉引用时,所有交叉引用都没有在我的Java模型中正确保存。使用EMF加载多个xmi文件

我用这段代码加载XMI文件:

XMIResource resourceInTy = new XMIResourceImpl(URI.createURI("file:/runtime-New_configuration/ApplicationInstance/instancesTypes.model")); 
    resourceInTy.load(null); 
    Environment env1 = (Environment) resourceInTy.getContents().get(0); 

    XMIResource resourceContRel = new XMIResourceImpl(URI.createURI("file:/runtime-New_configuration/ApplicationInstance/ContextRelations.model")); 
    resourceContRel.load(null); 
    Environment env2 = (Environment) resourceContRel.getContents().get(0); 

    env.setTypes(env1.getTypes()); 
    env.setInstances(env1.getInstances()); 
    env.setContextRelations(env2.getContextRelations()); 

正如你所看到的物体“环境”是所有的元模型的我的根对象应该包含所有的EList对象正确在解析xmi文件后设置。

这里的问题是,在EList的“ContextRelations”内部应该有一个对称为“Parameter”的另一个对象的引用,该对象引用了对象Type。如果我尝试检索类型空引用出来! 我深深搜寻有关此问题的另一个问题,但最接近的一种,我发现了可以在此链接一个没有回答的问题:Loading Multiple files using EMF resource load?

这里有两个XMI文件: ContextRelations.model

<parameters number="5"> 
    <type href="instancesTypes.model#//@types.0"/> 
</parameters> 
<parameters number="6"> 
    <type href="instancesTypes.model#//@types.4"/> 
</parameters> 
<contextRelations name="in"parameters="//@parameters.0//@parameters.1"> 
    <initialComplexEvent href="Events.model#//@events.0"/> 
    <endingComplexEvent href="Events.model#//@events.1"/> 
</contextRelations> 

InstancesTypes.model

<types name="Emp"/> 
<types name="Cam"/> 
<types name="Comp"/> 
<types name="Fi"/> 
<types name="Loc"/> 
<types name="St"/> 
<types name="Read"/> 
<instances name="Alice" type="//@types.0"/> 
<instances name="r01" type="//@types.4"/> 
<instances name="Bob" type="//@types.0"/> 
<instances name="cctv1" type="//@types.1"/> 
<instances name="doc" type="//@types.3"/> 
<instances name="m1" type="//@types.2"/> 
<instances name="m2" type="//@types.2"/> 
<instances name="m3" type="//@types.2"/> 
<instances name="nfc01" type="//@types.6"/> 
<instances name="usb1" type="//@types.5"/> 

次要问题:

正如你所看到的,我使用了三个根对象:env1和env2被用作临时变量,将其内容放入主根对象(env)中。 我这样做是因为我不知道如何解析所有的xmi文件,同时创建一个根对象。

有人可以帮我吗?

我解决了这个问题由于此网页:http://www.bar54.de/2012/04/emf-load-model-with-eproxyuri-references/

基本上,我不得不为了解决代理(交叉引用)创建资源设置把所有的资源里面的设置。