我使用papyrus创建了一个类图,得到了一个*.uml模型。现在我想通过编写一些Java代码来迭代*.uml元素。
我尝试了以下代码:
URI uri = URI.createURI("*.uml");
ResourceSet set = new ResourceSetImpl();
set.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
set.getResourceFactoryRegistry().getExtensionToFactoryMap()
.put(UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);
EPackage.Registry.INSTANCE.put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap()
.put("uml", UMLResource.Factory.INSTANCE);
set.getResourceFactoryRegistry().getExtensionToFactoryMap()
.put("xmi", new XMIResourceFactoryImpl());
//set.createResource(uri);
Resource res = set.getResource(URI.createURI(new URL("*.uml").toString(),true),true);
但我有例外:
你已经得到了几乎所有的东西,它只遗漏了很少的细节,还有一些线条需要删除。
但是首先,.uml
文件与纸莎草没有直接的关系。Papyrus能够生成.uml
文件,但它们不仅仅是Papyrus文件。这个文件扩展名是由UML插件管理的,它提供了UML元模型(在Ecore中定义),它的实现和处理这些文件的不同工具。
如果我们拿你的代码:
ResourceSet set = new ResourceSetImpl();
set.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
set.getResourceFactoryRegistry().getExtensionToFactoryMap()
.put(UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap()
.put(UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);
这一行:
EPackage.Registry.INSTANCE.put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
只要使用set
加载模型,就不需要。包含在ResourceSetIMPL
中的包Registry
是分层的:如果它找不到链接到元模型URI的元模型包实例,它会尝试在全局的ePackage.Registry
中找到它。因此,您可以在全局注册表中注册绑定(URI字符串、EPackage实例)
或者在ResourceSet
实例中注册绑定。两者都不是必需的。
此外,在您的情况下也不需要XMI
工厂注册。
最后,使用ResourceTset
中的GetResource
加载资源的情况几乎很好,以下是修改后的版本:
Resource res = set.getResource(URI.createFileURI("/path/to/my_model.uml"), true);
这个片段创建一个URI
,它指向磁盘上的文件并加载它。然后,您可以从资源中使用getContents()
方法访问元素。
res.getContents().get(0); // For example to get the root of your model.
还有,尽量使用umlutil
、uml2util
和ecoReutil
静态类,它提供了很多查找/复制/筛选的设施...元素
下面是我使用的最后一个片段:
ResourceSet set = new ResourceSetImpl();
set.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
set.getResourceFactoryRegistry().getExtensionToFactoryMap()
.put(UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap()
.put(UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);
Resource res = set.getResource(URI.createFileURI("/path/to/my_model.uml"), true);
编辑>问题的大部分内容是所使用的EMF版本。从EMF2.3到>2.4修复了异常抛出。为了清除不需要的代码,答案的其余部分仍然有效。
问题内容: 我有一个处理多部分表单发布的servlet。该帖子实际上是由嵌入在页面中的Flash文件上传组件发布的。在某些浏览器中,Flash生成的POST不包含JSESSIONID,这使我无法在发布期间从会话中加载某些信息。 Flash上载组件的确在特殊格式字段中包含cookie和会话信息。使用此表单字段,我实际上可以检索JSESSIONID值。问题是,我不知道如何使用此JSESSIONID
问题内容: 我已经在服务器上加载了一个CSS文件,所以我有一个URL。如何使用JQuery将其加载到我的Perl代码中? 所以目前我正在对梅森页面中的css进行硬编码,而该页面中缺少这样的内容 我想避免对此CSS进行硬编码? 问题答案: 我不明白为什么您不能只在该部分中插入元素,但这是一个jQuery代码片段:
问题内容: 在Java中,我可以向类路径中动态添加内容并加载类(“动态”的意思是无需重新启动应用程序)。是否有一个已知的框架/库可以处理模块的动态加载/卸载而无需重新启动? 通常的设置是负载平衡器,应用程序的多个实例以及逐步部署和重新启动新版本(尤其是对于Web应用程序)。我正在寻找其他东西- 具有多个服务/插件的应用程序,可能是单实例桌面应用程序,在其中禁用单个服务很便宜,但是关闭或重新启动完整
问题内容: 我想加载IPython外壳(不是IPython笔记本),可以在其中通过命令行使用PySpark。那可能吗?我已经安装了Spark 1.4.1。 问题答案: 如果使用Spark <1.2,则可以简单地使用环境变量执行。 要么 尽管以上内容仍可在Spark 1.2及以上版本上正常使用,但建议为这些版本设置Python环境的方法是 要么 您可以替换为您选择的解释器的路径。
我是flutter的新手,上周才开始。我正在从在线课程中学习,然后我想在我的flutter应用程序中加载一个图像。但有一个错误是: