2011-07-04 3 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()); 
    

    패키지를 찾을 수 없습니다 문제에 대한 http://wiki.eclipse.org/EMF-FAQ#How_do_I_use_EMF_in_standalone_applications_.28such_as_an_ordinary_main.29.3F

    를 참조하십시오 : 자원의 생성이 인스턴스를 설정 한 후
    다음과 같은 줄을 추가 정적 메타 모델을 사용하는 경우 (java 구현은 ecore 모델에서 생성됩니다), 해당 패키지 인스턴스에 액세스하여 전역 EMF 패키지 레지스트리에로드하고 등록하기 만하면됩니다.

    YourPackage packageInstance = YourPackage.eInstance;

    • 동적 메타 모델 (생성 된 어떤 자바 코드)를 사용하는 경우
  • , 당신은 수동으로 등록해야합니다. 이전에 프로그래밍 방식는 Ecore 모델에서 EPackage를 검색하려면 앞의 코드와
resourceSet.getPackageRegistry().put(yourPackage.getNsURI(), yourPackage);

, 당신은해야합니다.

+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