IllegalValue при чтении файла .uml с помощью eclipse MDT UML2

Я создал простую модель конечного автомата в Enterprise Architect и экспортировал ее в файл, который я хочу прочитать в отдельной программе Java/Scala, основанной на реализации Eclipse MDT UML2.

Мне удалось заставить это частично работать, но все еще есть две оставшиеся проблемы:

  1. Экспортированный файл XMI из EA содержит больше, чем просто часть <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) по адресу 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 здесь. Поиск в Google привел к необходимости зарегистрировать соответствующую фабрику, что, похоже, сработало, иначе я получил бы более простую ошибку об отсутствующей фабрике. Но теперь, когда фабрика зарегистрирована, я не уверен, чего не хватает, и сообщение об ошибке здесь не очень мне помогает.


person Frank    schedule 21.03.2012    source источник


Ответы (1)


Чтобы проверить, совместим ли файл модели с расширением *.uml с UML2, вам нужно всего лишь загрузить редактор UML. Это не инструмент UML, а всего лишь подключаемый модуль, который позволяет вам манипулировать моделью UML в редакторе дерева. Если вы нажмете на элемент в дереве, у вас появится меню. Редактор UML добавляет графическое представление и управление моделью, но этот плагин работает непосредственно на уровне модели/метамодели.

Если .uml может быть загружен, значит, вы прошли первый тест. Ваш файл совместим с UML2. Нажмите на название проекта и выберите опцию «Проверить модель». Вы узнаете, верна ли ваша модель на 100%.

Надеюсь, это поможет

person UML GURU    schedule 22.03.2012
comment
Хорошо, мне сейчас плохо. Судя по всему, EA выдает некорректные модели. - person Frank; 22.03.2012