Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用eclipse MDT UML2读取.uml文件时的非法值_Java_Eclipse_Scala_Uml_Eclipse Emf - Fatal编程技术网

Java 使用eclipse MDT UML2读取.uml文件时的非法值

Java 使用eclipse MDT UML2读取.uml文件时的非法值,java,eclipse,scala,uml,eclipse-emf,Java,Eclipse,Scala,Uml,Eclipse Emf,我在EnterpriseArchitect中创建了一个简单的状态机模型,并将其导出到一个文件中,我希望将其读入一个基于Eclipse的MDT UML2实现的独立Java/Scala程序中 我设法使这部分工作正常,但仍然存在两个问题: 从EA导出的XMI文件不仅仅包含部分,在这种情况下,我只在解析后获得AnyTypeImpl对象。现在,我已经手动更改了该文件,并将其简化为UML模型标记,尽管能够以某种方式使用(EA导出)框外的XMI文件会很好 对于不同的属性,比如isOrthogonal=“tru

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

我设法使这部分工作正常,但仍然存在两个问题:

  • 从EA导出的XMI文件不仅仅包含
    部分,在这种情况下,我只在解析后获得
    AnyTypeImpl
    对象。现在,我已经手动更改了该文件,并将其简化为UML模型标记,尽管能够以某种方式使用(EA导出)框外的XMI文件会很好

  • 对于不同的属性,比如
    isOrthogonal=“true”
    ,我会得到一个
    IllegalValueException
    。它的堆栈跟踪如下所示:

    org.eclipse.emf.ecore.resource.impl.ResourceSetImpl$1DiagnosticWrappedException:org.eclipse.emf.ecore.xmi.IllegalValueException:值“true”不合法。(文件:src/test/resources/test.uml,7111) 位于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编辑器正在添加模型的图形视图和操作,但该插件直接在模型/元模型级别工作

    如果可以加载.uml,那么您已经通过了第一次测试。您的文件与UML2兼容。单击项目名称并选择“检查模型”选项。您将知道您的模型是否100%正确


    希望这有帮助

    好的,我现在感觉很糟糕。显然,EA确实输出了错误的模型。