我想在RCP应用程序中使用Eclipse的默认XML编辑器(org.eclipse.wst.xml.ui)。我需要读取当前打开的xml文件的DOM。该插件不提供任何扩展点,所以我试图访问内部类。我知道我不应该访问内部类,但我没有其他选择。
我的方法是创建一个片段和一个扩展点,以便能够从插件中读取数据。我试图不重新编译插件,这就是为什么我认为片段是必要的。我只是想加载它并在运行时提取数据。
所以,我的问题是:是否有其他方式来访问插件的类?如果有,怎么样? 欢迎任何教程,文档页面或任何方法的有用链接。
答案 0 :(得分:4)
由于没有人回答我的问题,经过长时间的搜索后我找到了答案,如果碰到这个问题,我会发布其他人的答案。
要在运行时访问插件,您必须创建和扩展点以及与您尝试访问的插件相关的扩展名。
如果要从插件外部访问这些类,建议不要使用片段向插件添加类。
因此,最好的解决方案是从CVS Repository获取插件源,并将修改直接转换为插件的源代码。添加扩展点,扩展和功能代码。
教程:
答案 1 :(得分:1)
我最终像这样扩展了XMLMultiPageEditorPart:
public class MultiPageEditor extends XMLMultiPageEditorPart implements
IResourceChangeListener {
@Override
public void resourceChanged(IResourceChangeEvent event) {
// TODO Auto-generated method stub
setActivePage(3);
}
public Document getDOM() {
int activePageIndex = getActivePage();
setActivePage(1);
StructuredTextEditor fTextEditor = (StructuredTextEditor) getSelectedPage();
IDocument document = fTextEditor.getDocumentProvider().getDocument(
fTextEditor.getEditorInput());
IStructuredModel model = StructuredModelManager.getModelManager()
.getExistingModelForRead(document);
Document modelDocument = null;
try {
if (model instanceof IDOMModel) {
// cast the structured model to a DOM Model
modelDocument = (Document) (((IDOMModel) model).getDocument());
}
} finally {
if (model != null) {
model.releaseFromRead();
}
}
setActivePage(activePageIndex);
return modelDocument;
}
}
这不是一个干净的实现,但它可以完成工作。