java - 使用 eclipse MDT UML2 读取 .uml 文件时出现 IllegalValue

标签 java eclipse scala uml eclipse-emf

我在 Enterprise Architect 中创建了一个简单的状态机模型,并将其导出到一个文件,我想将其读入基于 Eclipse 的 MDT UML2 实现的独立 Java/Scala 程序。

我设法让这个部分工作,但仍然有两个问题:

  1. 从 EA 导出的 XMI 文件不仅仅包含 <uml:Model></...>部分,在这种情况下我只得到 AnyTypeImpl解析后的对象。目前,我已经手动更改了该文件并仅将其减少为 UML 模型标记,不过如果能够以某种方式使用(EA 导出)框中的 XMI 文件就好了。

  2. 我得到一个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/

相关文章:

java - 在哪里可以下载 Java.Net 安装程序

java - Java中createBufferStrategy的问题

java - 如何获取嵌套类型内部结构的所有类型?

java - Android Eclipse 错误 : "Gson cannot be resolved to a type"

java - Eclipse 与手动编译的区别

scala - Scala 或 Lift 工作的定位

java - 如何使用默认值一般地初始化值类型?

eclipse - 如何只使用 Tomcat 服务器(Eclipse)运行 1 个项目?

scala - 什么时候应该使用 Scala 方法和函数

scala - 如何使 scalaz.Tagged 与类类原始属性一起使用?