问题标签 [eclipse-emf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
784 浏览

java - 如何不将 DocumentRoot 写入 XML

我正在使用 EMF,并从 XSD 创建了我的 ecore。

我注意到编辑器保存的 XML 具有元素 DocumentRoot,它不是我原始 XSD 的一部分。我可以不生成它,所以它不会出现在编辑器的 XML 文件中吗?

我愿意

0 投票
2 回答
1629 浏览

eclipse-emf - 以编程方式运行 EMF 代码生成

我创建了一个带有扩展名的 EMF 模型.system,它将为我的工作生成代码。

现在我可以使用 Eclipse 中的启动代码生成操作来生成代码。但我想通过从独立程序启动代码生成来生成代码。

我如何实现这一目标?

详细信息:我从 EMF 模型创建了一个插件,并包含在 Eclipse 中。

我将从我的插件中创建.system文件,并且可以从我的插件中生成代码。

我观察到,当我单击启动代码生成时,它正在LauchAction从我的插件启动一个类。

如何LaunchAction从独立的 Java 程序开始我的课程?

我的目标是运行我创建.system的模型并从独立的 Java 程序生成代码。

我如何实现这一目标?

0 投票
1 回答
1445 浏览

eclipse - 分发基于 Eclipse EMF 的库需要 JARS?

我正在使用一个库(来自 OpenHealthTools 的 MDHT)来解析CDA XML.
它依赖 Eclipse 的一部分和 Eclipse 的 EMF 插件来完成它的工作。我已经解决了大多数依赖项,但我仍然遇到这个错误:

我已将JAREclipse 与org.eclipse.core.runtime.Platform类路径放在一起。它有额外的依赖吗?

0 投票
2 回答
959 浏览

eclipse - Why eGet in EMF returns Object rather than EObject?

I am working on some code using the EMF framework in Java, but it is really hard to use, e.g. I cannot implement OCL-like query API on top of EMF which would be type-safe.

One of the reasons is that eGet() for a EStructuralFeature returns just an Object, not EObject. So anything I would write must use much of null checking, type checking and type casting which is unsafe, not performant and cannot be generalized in a reusable way.

Why doesn't EMF generate dummy implementations with EObject wrappers for arbitrary Object value?

Implementing the EObject and hence the EClass interfaces even with simple throw UnsupportedOperationException is really a pain (the APIs are too big). The same holds for the eContainer() method which makes navigating the model upwards painful.

0 投票
5 回答
18486 浏览

java - 如何使用 EMF 读取 XML 文件?

EMF = Eclipse 建模框架

我必须在我的一个课堂项目中使用 EMF。我正在尝试了解如何使用 EMF 执行以下操作:

  1. 读取 XML,
  2. 将值放入对象中。
  3. 使用 ORM 将对象中的值保存到数据库。- 完毕
  4. 使用 ORM 从数据库中获取数据并生成 XML。

我需要使用:EMF(不知道怎么做)和 JPA(完成)来完成所有这些工作。

我使用过 JAXB,我知道,这可以使用 JAXB 来完成,但是 (EMF == JAXB) 怎么样?!

我使用 EMF 创建了许多 java 类,但是它们太多了!我在哪里实现读/写方法以及如何运行 EMF 项目?

谢谢

UPDATE1 提示 http://www.eclipsezone.com/eclipse/forums/t58829.html

更新2

我有架构,并且使用 .xsd 生成了模型代码。现在我在从 XML 文件中读取数据时遇到问题。

0 投票
3 回答
11002 浏览

dsl - Jetbrains 的 MPS 和 Eclipse Xtext 之间的主要区别是什么?

我在几个项目中使用了Eclipse Xtext 。我喜欢在 Ecore(元)模型上轻松定义语法并让所有内容为您生成,包括很棒的 Eclipse 插件编辑器,但我对底层EMF 框架感到非常不舒服,因为所有东西都硬连线在静态字段中。

最近我遇到了 Jetbrains 的MPS(元编程系统)。它基于完全不同的哲学。Xtext 用于创建基于文本的 DSL,为您生成解析器(并实例化那些 EObject),而在 MPS 创建的语言中,可以直接编辑底层模型结构。到目前为止,我明白了。

有没有人使用这两种 DSL 工具来指出在使用它们方面的主要区别、预期的用例和受众、复杂性、学习曲线(老实说,开始使用 Xtext 应该对 EMF 的胆量有很多了解) ,代码生成等?

0 投票
3 回答
3967 浏览

eclipse - 如何遍历 Xtext 生成的 EMF 对象树?

我正在使用Xtext来定义我的 DSL。Xtext 生成一个解析器,让我可以遍历输入 DSL 的 EMF 模型。我想将此 EMF 模型转换为其他树。要进行此翻译,我需要遍历树。但是,我找不到 Xtext 生成的 EMF 模型的访问者类。我发现的最接近的东西是访问单个节点的 Switch 类。我可以自己遍历 EMF 模型并在我访问的每个节点上调用 Switch 类。但是,我想知道 Xtext 中是否存在实现模型遍历的访问者功能。

0 投票
2 回答
1115 浏览

java - 为什么链接在我的基于 Xtext 的 DSL 中不起作用?

以下是我的 DSL 的 Xtext 语法。

并且,下面是上述DSL中的一个程序。

以下是生成Switch类的子类,它演示了节点getPredicateType()上的返回 null 。Predicate

当我使用ModelPrinter该类遍历上述程序对应的EMF对象模型时,我意识到节点没有正确链接在一起。例如,节点getPredicateType()上的方法返回. 阅读了 Xtext 用户指南后,我的印象是 Xtext 默认链接语义应该适用于我的 DSL。但是,由于某种原因,我的 DSL 的 AST 节点没有正确链接在一起。谁能帮我诊断这个问题?Predicatenull

0 投票
1 回答
538 浏览

eclipse-emf - Ecore文件中的递归?

只是试图从给定的 UML 模型转换为 Ecore 模型。在此之后,我试图创建一个生成器模型。

每次我尝试这样做时,我都会收到错误消息,表明此日志存在“未处理的事件循环异常”:

org.eclipse.swt.SWTException:无法在 org.eclipse.swt.SWT.error(SWT.java) 的 org.eclipse.swt.SWT.error(SWT.java:3884) 处执行可运行 (java.lang.NullPointerException) :3799) 在 org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) 在 org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3885) 在 org.eclipse.swt.widgets。 Display.readAndDispatch(Display.java:3506) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org .eclipse.gmf.internal.bridge.ui.dashboard.DashboardMediator$RunWizardAction.run(DashboardMediator.java:316) at org.eclipse.gmf.internal.bridge.ui.dashboard.HyperlinkFigure$1.mousePressed(HyperlinkFigure.java:63 ) 在 org.eclipse.draw2d.SWTEventDispatcher 的 org.eclipse.draw2d.Figure.handleMousePressed(Figure.java:873)。dispatchMousePressed(SWTEventDispatcher.java:214) at org.eclipse.draw2d.LightweightSystem$EventHandler.mouseDown(LightweightSystem.java:513) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:179) at org.eclipse .swt.widgets.EventTable.sendEvent(EventTable.java:84) 在 org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003) 在 org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java :3910) 在 org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) 在 org.eclipse.ui.internal 的 org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3503)。 Workbench.runUI(Workbench.java:2369) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500)在 org.eclipse.ui 的 org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)。internal.Workbench.createAndRunWorkbench(Workbench.java:493) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java: 113) 在 org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) 在 org.eclipse.core.runtime.internal.adaptor.EclipseAppHandle.run(EclipseAppHandle.java:194) .core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) 在 org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) 在 org.eclipse.core.runtime.adaptor .EclipseStarter.run(EclipseStarter.java:179) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 在 sun.reflect.DelegatingMethodAccessorImpl。在 org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) 在 org.eclipse.equinox.launcher.Main.basicRun 的 java.lang.reflect.Method.invoke(Unknown Source) 调用(Unknown Source) (Main.java:514) at org.eclipse.equinox.launcher.Main.run(Main.java:1311) 原因:org.eclipse.emf.converter.util.ConverterUtil.computeRequiredPackages(ConverterUtil) 中的 java.lang.NullPointerException .java:374) 在 org.eclipse.emf.converter.ui.contribution.base.ModelConverterPackagePage.validate(ModelConverterPackagePage.java:965) 在 org.eclipse.emf.importer.ui.contribution.base.ModelImporterPackagePage.validate(ModelImporterPackagePage .java:101) 在 org.eclipse.emf.converter.ui.contribution.base.ModelConverterPackagePage$1.run(ModelConverterPackagePage.java:155) 在 org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)在 org.eclipse.swt.widgets。Synchronizer.runAsyncMessages(Synchronizer.java:134) ... 34 更多

在此之后,此文本出现另一个异常:“无法创建编辑器 ID org.eclipse.emf.codegen.ecore.genmodel.presentation.GenModelEditorID:引发了意外异常。”

会话数据显示:eclipse.buildId=unknown java.version=1.6.0_13 java.vendor=Sun Microsystems Inc. BootLoader 常量:OS=win32, ARCH=x86, WS=win32, NL=de_DE 框架参数:-product org. eclipse.epp.package.modeling.product 命令行参数:-os win32 -ws win32 -arch x86 -product org.eclipse.epp.package.modeling.product -consoleLog

有了这个长日志:

java.lang.NullPointerException at org.eclipse.emf.ecore.util.EcoreUtil.getURI(EcoreUtil.java:2887) at org.eclipse.emf.codegen.ecore.genmodel.impl.GenModelImpl.diagnose(GenModelImpl.java:2930 ) 在 org.eclipse.emf.codegen.ecore.genmodel.presentation.GenModelEditor.initialize(GenModelEditor.java:596) 的 org.eclipse.emf.codegen.ecore.genmodel.presentation.GenModelEditor.validate(GenModelEditor.java:1773) ) 在 org.eclipse.ui.part.MultiPageEditorPart.createPartControl(MultiPageEditorPart.java:357) 上的 org.eclipse.emf.codegen.ecore.genmodel.presentation.GenModelEditor.createPages(GenModelEditor.java:1080)。 ui.internal.EditorReference.createPartHelper(EditorReference.java:662) at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:462) at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) 在 org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2857) 在 org.eclipse.ui.internal.WorkbenchPage 的 org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:286) .busyOpenEditor(WorkbenchPage.java:2762) 在 org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2754) 在 org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2705) 在org.eclipse.swt.custom.BusyIndi​​cator.showWhile(BusyIndi​​cator.java:70) 在 org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2701) 在 org.eclipse.ui.internal.WorkbenchPage.openEditor( WorkbenchPage.java:2685) 在 org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2668) 在 org.eclipse.emf.converter.ui.contribution.base.ModelConverterWizard.openEditor(ModelConverterWizard.java:318)在 org.eclipse.emf.importer.ui。org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:752) at org.eclipse.gmf.internal.bridge.ui.dashboard.DashboardMediator$ 上的contribution.base.ModelImporterWizard.performFinish(ModelImporterWizard.java:167) RunWizardAction$1.finishPressed(DashboardMediator.java:311) at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:373) at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)在 org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228) 在 org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 在 org.eclipse.swt.widgets.Widget.sendEvent (Widget.java:1003) 在 org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3910) 在 org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3503) 在 org.eclipse。 jface.window.Window.runEventLoop(Window.java:825) 在 org.eclipse.jface.window.Window.open(Window.java:801) 在 org.eclipse.gmf.internal.bridge.ui.dashboard.DashboardMediator$RunWizardAction.run(DashboardMediator.java:316) 在 org.eclipse.gmf。 internal.bridge.ui.dashboard.HyperlinkFigure$1.mousePressed(HyperlinkFigure.java:63) at org.eclipse.draw2d.Figure.handleMousePressed(Figure.java:873) at org.eclipse.draw2d.SWTEventDispatcher.dispatchMousePressed(SWTEventDispatcher.java :214) 在 org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:179) 在 org.eclipse.swt.widgets 的 org.eclipse.draw2d.LightweightSystem$EventHandler.mouseDown(LightweightSystem.java:513)。 EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3910) at org .eclipse.swt.widgets.Display.readAndDispatch(Display.java:3503) 在 org.eclipse.ui.internal.Workbench 的 org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) 的 org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) .access$4(Workbench.java:2221) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332 ) 在 org.eclipse.ui.internal.ide.application 的 org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) 的 org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493)。 IDEApplication.start(IDEApplication.java:113) 在 org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) 在 org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher. java:110) 在 org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher。开始(EclipseAppLauncher.java:79)在 org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368)在 org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 在 java.lang.reflect.Method.invoke(Unknown Source)在 org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) 在 org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) 在 org.eclipse.equinox.launcher.Main.run (Main.java:1311)在 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 在 java.lang.reflect.Method.invoke(Unknown Source) 在 org.eclipse.equinox 的 invoke0(Native Method)。 launcher.Main.invokeFramework(Main.java:559) 在 org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) 在 org.eclipse.equinox.launcher.Main.run(Main.java:1311)在 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 在 java.lang.reflect.Method.invoke(Unknown Source) 在 org.eclipse.equinox 的 invoke0(Native Method)。 launcher.Main.invokeFramework(Main.java:559) 在 org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) 在 org.eclipse.equinox.launcher.Main.run(Main.java:1311)

Has anyone an idea what is going wrong? I looked a while at my model but were not able to find something wrong. I just thought there might be a recursion due to the "Unhandled event loop exception" but is this even possible?

Thanks in advance, Dominik

0 投票
2 回答
1093 浏览

java - 更改生成的代码或使用继承?

我从事 EMF 项目。设计决策之一是不接触生成的代码,也不将其签入。相反,每当需要更改某些内容时,都会创建一个包含更改的子类。该框架足够灵活来处理这个问题。但是,我遇到了一些工作开销。

设计决定是基于其他代码生成框架的不良经验被重新生成让问题。

作为该项目的新手,我想挑战这个设计决定,但想先听听一般意见。我知道 EMF 项目团队建议进行代码内更改。但是你的经验是什么?EMF 在生成的代码中处理手动代码更改的能力如何?您是否曾经到过丢失手动编写代码的地步?代码是否曾经进入不可维护状态?