1

以前永続化された EMF モデル リソースを Eclipse プラグイン環境からロードしたいと考えています。私は次のようにしてみました。

// obtain a new resource set

ResourceSet resSet = new ResourceSetImpl();

// get the resource 

resSet.getResource(URI.createURI(location), true);

locationplatform:/resource/Project/default.mymodel など、プラットフォームへの相対パスです。

を使用してリソースを取得しようとすると、URI.createURI(...)ClassCastExceptionMymodelFactoryImpl は org.eclipse.emf.ecore.resource.Resource$Factory にキャストできません」というメッセージが表示されます。

これは説明できません。誰か助けてくれませんか?

私はすでに試しURI.createFileURI(location)ました。これにより、IllegalArgumentException「無効な相対パス名」が発生します。

よろしく

スタック トレースは次のようになります。java.lang.ClassCastException: de.uka.ipd.sdq.pcm.usagemodel.impl.UsagemodelFactoryImpl は、org.eclipse.emf.ecore.resource.impl で org.eclipse.emf.ecore.resource.Resource$Factory にキャストできません.ResourceFactoryRegistryImpl.convert(ResourceFactoryRegistryImpl.java:94) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl$2.delegatedGetFactory(ResourceSetImpl.java:458) at org.eclipse.emf.ecore.resource.impl.ResourceFactoryRegistryImpl. org.eclipse.emf.ecore.resource.impl.ResourceFactoryRegistryImpl.getFactory(ResourceFactoryRegistryImpl.java:86) の getFactory(ResourceFactoryRegistryImpl.java:145) org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.createResource(ResourceSetImpl. java:431) org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandCreateResource(ResourceSetImpl.java:

4

1 に答える 1

0

プラグイン環境が自動的に行うため、これは必要ではないと思われますが、リソース ファクトリを登録してみてください。

resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(fileExtension, new ModelResourceFactoryImpl());

ここfileExtensionで、 はロードするリソースのファイル拡張子であり、 は を拡張ModelResourceFactoryImplする生成されたクラスである必要がありますResourceFactoryImpl

ただし、次のコードを削除すると、モデルを読み込むことができます。

// Register the XMI resource factory for my extension
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
Map<String, Object> m = reg.getExtensionToFactoryMap();
m.put("myextension", new XMIResourceFactoryImpl());

これは適切な登録ではなかったようです。

于 2013-01-31T09:01:37.997 に答える