M2M转换:错误的Eclipse Workspace关闭// prolog // Null指针不允许内容

时间:2014-02-21 11:47:27

标签: eclipse

我正在尝试在两个模型之间进行转换, 除了在独立模式下使用eclipse之外,每件事情似乎都没问题, 尝试以编程方式从java执行转换时出错,

如何解决?它的urg。谢谢你的帮助,抱歉我的英语不好。

错误:

ResourcesPlugin.getWorkspace().getRoot();
  

线程“main”中的异常java.lang.IllegalStateException:Workspace已关闭。       在org.eclipse.core.resources.ResourcesPlugin.getWorkspace(ResourcesPlugin.java:399)

File f = new File(Path);            
URI transformationURI = URI.createFileURI(f.getAbsolutePath()); 
resource = resourceSet.getResource(transformationURI, true);`
  

线程“main”中的异常org.eclipse.emf.ecore.resource.impl.ResourceSetImpl $ 1DiagnosticWrappedException:org.xml.sax.SAXParseException:prolog中不允许使用内容。       at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.handleDemandLoadException(ResourceSetImpl.java:315)       at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:274)       at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getResource(ResourceSetImpl.java:397)

当我省略该行时:

//resource = resourceSet.getResource(transformationURI, true);

我得到另一个例外:

  

线程“main”java.lang.ExceptionInInitializerError中的异常       在org.eclipse.m2m.qvt.oml.TransformationExecutor.doLoad(TransformationExecutor.java:205)       在org.eclipse.m2m.qvt.oml.TransformationExecutor.loadTransformation(TransformationExecutor.java:108)       在org.eclipse.m2m.qvt.oml.TransformationExecutor.execute(TransformationExecutor.java:137)

     

引起:java.lang.NullPointerException       在org.eclipse.m2m.internal.qvt.oml.compiler.UnitResolverFactory $ Registry $ 1.readFactories(UnitResolverFactory.java:66)       在org.eclipse.m2m.internal.qvt.oml.compiler.UnitResolverFactory $ Registry $ 1.(UnitResolverFactory.java:44)       在org.eclipse.m2m.internal.qvt.oml.compiler.UnitResolverFactory $ Registry。(UnitResolverFactory.java:43)       ......还有6个

1 个答案:

答案 0 :(得分:0)

this question所述,您必须运行Eclipse应用程序以确保完成所有必要的Eclipse设置。

对于没有UI的“无头”应用程序,IApplication类可以非常简单:

public class Application implements IApplication
{
  @Override
  public Object start(final IApplicationContext context)
    throws Exception
  {
    .. your code here ...

    return IApplication.EXIT_OK;
  }

  @Override
  public void stop()
  {
    // No action
  }

  private static void ensurePluginStarted(String id)
  {
    Bundle bundle = Platform.getBundle(id);
    if (bundle != null)
     {
       if ((bundle.getState() & Bundle.ACTIVE) == 0)
        {
          try
           {
             bundle.start(Bundle.START_TRANSIENT);
           }
          catch (BundleException ex)
           {
             ex.printStackTrace();
           }
       }
    }
  }
}

此应用程序可以使用Eclipse工作区,但不能使用UI。在某些情况下,可能需要调用ensurePluginStarted方法以确保您要使用的所有插件都在运行。尝试使用UI的任何插件都将失败。

如果您需要UI,则需要完整的Eclipse RCP。