如何加载模型实例?问题:不能是案例
Posted
技术标签:
【中文标题】如何加载模型实例?问题:不能是案例【英文标题】:How to load model instance? Issue: Cannot be case 【发布时间】:2021-11-29 01:00:55 【问题描述】:我正在编写一个代码来获取 EMF 模型实例的所有内容。我尝试按照在此处找到的本教程进行操作:Create and modify ecore files and their instances from code 以加载模型。
在本教程中,模型实例是一个 XMI 文件。就我而言,我有一个.myExt
文件(我在创建此模型实例在ecore
中符合的元模型时决定的扩展名)。我写了以下代码,但出现以下错误:
class GetModelObjects
ResourceSet resourceSet = new ResourceSetImpl()
Resource metamodel
EPackage mp
Resource model
EFactory mappinginstance
//EList <EObject> modelobjects = new BasicEList<EObject>()
def doTransform()
resourceSet.resourceFactoryRegistry.extensionToFactoryMap.put("ecore", new EcoreResourceFactoryImpl)
resourceSet.resourceFactoryRegistry.extensionToFactoryMap.put("myext", new MyExtFactoryImpl)
metamodel = resourceSet.getResource(URI.createFileURI("myext.ecore"), true)
mp = metamodel.contents.get(0) as EPackage
resourceSet.packageRegistry.put("http://www.example.org/myExt", metamodel)
model = resourceSet.getResource(URI.createURI("model.myext"), true)
mappinginstance = mp.getEFactoryInstance
System.out.println("Model:" + model.contents)
def static void main(String[] args)
new GetModelObjects().doTransform()
class myExt.impl.MyExtFactoryImpl cannot be cast to class org.eclipse.emf.ecore.resource.Resource$Factory (myExt.impl.MyExtFactoryImpl
and org.eclipse.emf.ecore.resource.Resource$Factory are in unnamed module of loader 'app')
我不太确定的一件事,我认为可能是这个错误的原因,是这一行:
resourceSet. resourceFactoryRegistry.extensionToFactoryMap.put("myext", new MyExtFactoryImpl)
因为我不确定这是否是应该放置在这里的工厂。 我非常感谢您对此的任何意见。
提前谢谢你!
【问题讨论】:
【参考方案1】:作为参考,请使用 Vogella 的教程:https://www.vogella.com/tutorials/EclipseEMF/article.html#load-an-existing-model
您收到的错误消息有点奇怪,我会检查 MyExtFactoryImpl(应该是为您的元模型生成的工厂实现)是否按预期工作(例如 MyExtFactoryImpl.eINSTANCE.createXXX())。此外,错误看起来可能与 Java 模块有关,因此请检查一下(您的类路径中是否有 EMF 资源等?)
【讨论】:
【参考方案2】:如果您的 .myext
模型被保存为 XMI 文件,您需要一个 XMIResourceFactoryImpl
来加载文件。在您的示例中,这将给出:
resourceSet.resourceFactoryRegistry.extensionToFactoryMap.put("myext", new XMIResourceFactoryImpl())
MyExtFactoryImpl
是创建 MyExt 元模型实例的工厂,它不处理加载实际文件。
【讨论】:
以上是关于如何加载模型实例?问题:不能是案例的主要内容,如果未能解决你的问题,请参考以下文章
数据库数据恢复ASM磁盘组掉线,ASM实例不能mount的Oracle数据库数据恢复案例