如何使用Java加载纸草uml模型?
我用纸莎草创建了一个类图,得到了一个*。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);
但我有个例外:
Exception in thread "main" java.lang.NoSuchMethodError: org.eclipse.emf.ecore.resource.URIConverter.createInputStream( Lorg/eclipse/emf/common/util/URI;Ljava/util/Map;)Ljava/io/InputStream;
如何使用Java加载papyrus uml模型
# 1 楼答案
你已经拥有了几乎所有的东西,它只遗漏了很少的细节,还有一些线条需要删除
但首先,
.uml
文件与纸莎草没有直接关系。Papyrus能够生成.uml
文件,但它们不仅仅是Papyrus文件。该文件扩展名由UML插件管理,该插件提供UML元模型(在Ecore中定义)、它的实现以及处理这些文件的不同工具如果我们拿走你的密码:
这一部分应该足以将UML元模型及其工厂注册到
ResourceSet
这一行:
只要使用
set
加载模型,就不需要。包含在ResourceSetImpl
中的包Registry
是分层的:如果它找不到链接到元模型URI的元模型包实例,它会尝试在全局EPackage.Registry
中找到它。因此,要么在全局注册表中注册绑定(URI string, EPackage instance)
,要么在ResourceSet
实例中注册绑定。两者都不是必需的此外,在您的情况下也不需要
xmi
工厂注册最后,使用来自
ResourcetSet
的getResource
加载资源几乎是好的,下面是修改后的版本:这个片段创建一个
URI
,指向磁盘上的一个文件并加载它。然后,可以从资源中使用getContents()
方法访问元素另外,尽量使用
UMLUtil
、UML2Util
和EcoreUtil
静态类,它提供了很多查找/复制/筛选的工具。。。元素以下是我使用的最后一个片段:
编辑>;问题的大部分是使用的EMF版本。从EMF 2.3到>;2.4修复了异常抛出。为了清除不必要的代码,答案的其余部分仍然有效