我在Enterprise Architect中創建了一個簡單的狀態機模型,並將其導出到一個文件中,我想根據Eclipse的MDT UML2實現讀入獨立的Java/Scala程序。使用eclipse MDT讀取.uml文件時的IllegalValue UML2
我設法讓這部分工作,但仍然有剩下的兩個問題:
從EA導出的XMI文件包含的不僅僅是
<uml:Model></...>
部分較多,在這種情況下,我只解析後得到AnyTypeImpl
對象。目前,我已經手動更改了文件並僅將其縮小爲UML模型標籤,儘管能夠以某種方式使用XMI文件從(EA導出)框中移出。我得到一個
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) 在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。谷歌搜索引發了必須註冊相應的工廠,這似乎工作的點,否則我會得到一個關於失蹤工廠更直接的錯誤。但是現在工廠已經註冊,我不確定缺少什麼,錯誤信息對我來說並不是很有幫助。
好吧,我現在感覺不好。顯然,EA確實輸出了不正確的模型。 – Frank 2012-03-22 17:46:03