我在 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) 在 org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.handleDemandLoadException(ResourceSetImpl.java:315) 在 org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:274) 在 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。谷歌搜索提出了必须注册相应工厂的观点,这似乎有效,否则我会得到关于丢失工厂的更直接的错误。但现在工厂已注册,我不确定缺少什么,并且错误消息在这里对我没有多大帮助。
最佳答案
要检查扩展名为 *.uml 的模型文件对于 UML2 是否有效,您只需下载 UML 编辑器。它不是一个 UML 工具,而只是一个插件,允许您在树编辑器中操作 UML 模型。如果单击树中的某个元素,您将看到菜单。 UML 编辑器正在添加图形 View 和模型操作,但该插件直接在模型/元模型级别工作。
如果 .uml 可以加载,那么您就通过了第一个测试。您的文件与 UML2 兼容。单击项目名称并选择检查模型选项。您将知道您的模型是否 100% 正确。
希望这有帮助
关于java - 使用 eclipse MDT UML2 读取 .uml 文件时出现 IllegalValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9809374/