4

次の例外が発生します。

 java.lang.RuntimeException: Cannot create a resource for 'file:/home/my_conf.xml'; a registered resource factory is needed

「爆発」コードは次のようになり、次の場所で停止します。resource = resourceSet.....

    ResourceSet resourceSet = new ResourceSetImpl();
    Resource resource = null;

    File f = new File(filename); 
    URI uri = URI.createFileURI(f.getAbsolutePath());

    if (!f.exists()) {
        throw new Exception(filename + " does not exist");

    } else {
        resource = resourceSet.getResource(uri, true);
        mapPrepConfiguration = (MapPrepConfiguration) resource.getContents().get(0);
    }

手がかりを持っている人はいますか?

4

1 に答える 1

7

スタンドアロン モードで実行している場合は、ファクトリをリソース セット ファクトリ レジストリに手動で登録する必要があります。
リソース セット インスタンスの作成後に次の行を追加します。

resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xml", new XMLResourceFactoryImpl());

http://wiki.eclipse.org/EMF-FAQ#How_do_I_use_EMF_in_standalone_applications_.28such_as_an_ordinary_main.29.3Fを参照してください。

パッケージが見つからない問題については、ケースに応じて 2 つの可能性があります。

  • 静的メタモデルを使用している場合 (ecore モデルから Java 実装が生成されます)、対応する Package インスタンスにアクセスするだけで、それをロードしてグローバル EMF パッケージ レジストリに登録できます。

YourPackage packageInstance = YourPackage.eInstance;

  • 動的メタモデル (Java コードが生成されていない) を使用している場合は、手動で登録する必要があります。
resourceSet.getPackageRegistry().put(yourPackage.getNsURI(), yourPackage);

前のコードでは、事前に ecore モデルからプログラムで EPackage を取得する必要があります。

于 2011-07-04T14:21:59.790 に答える