我在Enterprise Architect中创建了一个简单的状态机模型并将其导出到一个文件中,我希望将其读入基于Eclipse的MDT UML2实现的独立Java / Scala程序。
我设法让这部分工作,但仍有两个问题:
EA中导出的XMI文件不仅包含<uml:Model></...>
部分,在这种情况下,解析后我只获得AnyTypeImpl
个对象。现在,我已经手动更改了文件并仅将其缩小为UML模型标记,但是能够以某种方式从(EA导出)框中使用XMI文件会很好。
我为IllegalValueException
等不同的属性获得了isOrthogonal="true"
。它的堆栈跟踪看起来像这样:
org.eclipse.emf.ecore.resource.impl.ResourceSetImpl $ 1DiagnosticWrappedException:org.eclipse.emf.ecore.xmi.IllegalValueException:值'true'不合法。 (文件:src / test / resources / test.uml,7,111) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.handleDemandLoadException(ResourceSetImpl.java:315) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:274) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getResource(ResourceSetImpl.java:397)
这是代码(在Scala中,但它与Java在这一点上几乎相同)我正在使用以便立即加载模型文件:
val resSet = new ResourceSetImpl
resSet.getPackageRegistry.put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE)
resSet.getResourceFactoryRegistry.getExtensionToFactoryMap.put("*", UMLResource.Factory.INSTANCE)
resSet.getResource(URI.createURI("file:myfile.uml"), true)
我认为此时模型文件没有任何问题(状态机中的正交状态毕竟是非常简单的正常情况),所以我想我还没有设法在这里正确设置MDT / UML2。谷歌搜索已经提出必须注册相应的工厂,这似乎有效,否则我会得到一个关于失踪的工厂更直接的错误。但是现在工厂已经注册了,我不确定缺少什么,错误信息对我来说不是很有帮助。
答案 0 :(得分:1)
要检查具有* .uml扩展名的模型文件是否对UML2有效,您只需要下载UML编辑器。它不是一个UML工具,而只是一个允许您在树编辑器中操作UML模型的插件。如果单击树中的元素,则会显示菜单。 UML编辑器正在添加图形视图和模型操作,但此插件直接在模型/元模型级别工作。
如果可以加载.uml,那么您已通过第一次测试。您的文件与UML2兼容。单击项目名称,然后选择检查模型选项。您将知道您的模型是否100%正确。
希望这个帮助