2012-03-21 56 views
0

我在Enterprise Architect中創建了一個簡單的狀態機模型,並將其導出到一個文件中,我想根據Eclipse的MDT UML2實現讀入獨立的Java/Scala程序。使用eclipse MDT讀取.uml文件時的IllegalValue UML2

我設法讓這部分工作,但仍然有剩下的兩個問題:

  1. 從EA導出的XMI文件包含的不僅僅是<uml:Model></...>部分較多,在這種情況下,我只解析後得到AnyTypeImpl對象。目前,我已經手動更改了文件並僅將其縮小爲UML模型標籤,儘管能夠以某種方式使用XMI文件從(EA導出)框中移出。

  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) 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。谷歌搜索引發了必須註冊相應的工廠,這似乎工作的點,否則我會得到一個關於失蹤工廠更直接的錯誤。但是現在工廠已經註冊,我不確定缺少什麼,錯誤信息對我來說並不是很有幫助。

回答

1

要檢查具有* .uml擴展名的模型文件是否對UML2有效,您只需要下載UML編輯器。它不是一個UML工具,而只是一個允許您在樹編輯器中操作UML模型的插件。如果你點擊樹中的一個元素,你有菜單。 UML編輯器添加了對模型的圖形化視圖和操作,但該插件直接在模型/元模型層面工作。

如果.uml可以加載,那麼你已經通過了第一次測試。你的文件與UML2兼容。點擊項目名稱並選擇檢查模型選項。你會知道你的模型是否100%正確。

希望這個幫助

+0

好吧,我現在感覺不好。顯然,EA確實輸出了不正確的模型。 – Frank 2012-03-22 17:46:03