我想使用EMF进行代码生成,因此我写了一些方法来加载我自己生成的UML2文件。使用以下代码可以正常工作:
protected void registerResources() {
resourceSet.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);
Map<URI, URI> uriMap = resourceSet.getURIConverter().getURIMap();
String resourcesJarPath = Thread.currentThread().getContextClassLoader().getResource("org.eclipse.uml2.uml.resources_2.2.0.v200805131030").toExternalForm();
URI baseUri = URI.createURI(resourcesJarPath);
uriMap.put(URI.createURI(UMLResource.LIBRARIES_PATHMAP), baseUri.appendSegment("libraries").appendSegment(""));
uriMap.put(URI.createURI(UMLResource.METAMODELS_PATHMAP), baseUri.appendSegment("metamodels").appendSegment(""));
uriMap.put(URI.createURI(UMLResource.PROFILES_PATHMAP), baseUri.appendSegment("profiles").appendSegment(""));
}
public Package loadPackage(URI uri) {
Resource resource = resourceSet.getResource(uri, true);
return (Package) EcoreUtil.getObjectByType(resource.getContents(), UMLPackage.Literals.PACKAGE);
}
但是现在,我想将Magicdraw-Domain模型导出到EMF UML2 XMI,在那里我得到5个文件。一个project.uml和4个配置文件(UML_Standard_Profile.MagicDraw_Profile.DSL_Customization.profile.uml,UML_Standard_Profile.MagicDraw_Profile.profile.uml,UML_Standard_Profile.UML_Standard_Profile.profile.uml,UML_Standard_Profile.Validation_Profile.profile.uml)。
因此,如果我想使用loadPackageclass加载project.uml,则我的Package为null。
有人有示例应用程序,如何加载MagicDraw导出的UML DomainModel?
多米尼克
最佳答案
您能否向我们展示来自MagicDraw(作为XMI)的UML模型的前几行?在这里,对于某些型号,我需要额外的
resourceSet.getPackageRegistry().put("http://www.eclipse.org/uml2/2.0.0/UML", UMLPackage.eINSTANCE);
加载这些模型(当然,这些模型来自Eclipse 3.4.2中的旧MD版本)。