2011-07-04 4 views
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); 
    } 

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

答えて

7

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

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

    あなたのケースで応じて2つの可能性があるパッケージが見つからない問題についてhttp://wiki.eclipse.org/EMF-FAQ#How_do_I_use_EMF_in_standalone_applications_.28such_as_an_ordinary_main.29.3F

    を参照してください。静的メタモデルを使用している場合(java実装はecoreモデルから生成されます)、対応するPackageインスタンスにアクセスして、グローバルEMFパッケージレジストリにロードして登録する必要があります。

YourPackage packageInstance = YourPackage.eInstance;

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

、あなたは以前にプログラムであなたたEcoreモデルから済みEPackageを取得する必要があります。

+0

ありがとう、私はもう少しだが、次のエラーが発生しています:org.eclipse.emf.ecore.resource.impl.ResourceSetImpl $ 1DiagnosticWrappedException:org.eclipse.emf.ecore.xmi.PackageNotFoundException:uri 'http ://saabgroup.com/cms/chart/chartpreparation/mapprep/model 'が見つかりません。 (ファイル:/home/config/my.importedmapconfiguration、2,244) – paul

+0

私の最初の回答で私が与えたFAQを読んでください。次の質問はあなたの問題の説明を与えます。 – greydet

+0

最初の回答を編集しました。すべての問題はEMF FAQに記載されています。 – greydet