使用 Eclipse UML2 解析 Visual Paradigm 生成的 XMI 文件
Using Eclipse UML2 to parse a Visual Paradigm generated XMI file
我用 Visual Paradigm 8 画了一个 class 图,并将项目导出为 XMI 2.1 文件(导出为 UML2)。所以有两个文件(test.xmi.uml
和 test.xmi.profile.uml
)。
为了解析 test.xmi.uml
,我使用 eclipse uml2 和 emf 编写了这段 java 代码:
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("C:\test.xmi.uml"), true);
EObject eobj = res.getContents().get(0);
但输出对象 (eobj
) 是一个 AnyTypeImpl
,无法很好地读取。
我应该怎么做才能通过解析此文件获得格式良好的对象,如 org.eclipse.uml2.uml.Model
对象?
我终于找到了答案:
使用org.eclipse.uml2.uml.resources.util.UMLResourcesUtil.init()
初始化解析.uml
文件所需的参数。
所以代码必须是这样的:
ResourceSet set = new ResourceSetImpl();
UMLResourcesUtil.init(set);
Resource res = set.getResource(typesUri, true);
EObject eobj = res.getContents().get(0);
eobj
是 org.eclipse.uml2.uml.Model
的一个实例,它是一个格式正确的对象。
我用 Visual Paradigm 8 画了一个 class 图,并将项目导出为 XMI 2.1 文件(导出为 UML2)。所以有两个文件(test.xmi.uml
和 test.xmi.profile.uml
)。
为了解析 test.xmi.uml
,我使用 eclipse uml2 和 emf 编写了这段 java 代码:
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("C:\test.xmi.uml"), true);
EObject eobj = res.getContents().get(0);
但输出对象 (eobj
) 是一个 AnyTypeImpl
,无法很好地读取。
我应该怎么做才能通过解析此文件获得格式良好的对象,如 org.eclipse.uml2.uml.Model
对象?
我终于找到了答案:
使用org.eclipse.uml2.uml.resources.util.UMLResourcesUtil.init()
初始化解析.uml
文件所需的参数。
所以代码必须是这样的:
ResourceSet set = new ResourceSetImpl();
UMLResourcesUtil.init(set);
Resource res = set.getResource(typesUri, true);
EObject eobj = res.getContents().get(0);
eobj
是 org.eclipse.uml2.uml.Model
的一个实例,它是一个格式正确的对象。