Pergunta

Eu estou tentando implementar o código de exemplo para este artigo de 2002 (eu sei ..), mas não pode obter o esquema para carga.

import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.xsd.util.XSDResourceImpl;

    ResourceSet resourceSet = new ResourceSetImpl();
    // I replaced the deprecated createDeviceURI with createURI as recommended in JavaDoc
    XSDResourceImpl xsdSchemaResource = 
        (XSDResourceImpl)resourceSet.getResource(URI.createURI("my.xsd"), true);

Eu estou usando as seguintes dependências Maven2:

<dependency>
    <groupId>org.eclipse.xsd</groupId>
    <artifactId>xsd</artifactId>
    <version>2.1.1</version>
</dependency>
<dependency>
    <groupId>org.eclipse.emf</groupId>
    <artifactId>ecore</artifactId>
    <version>2.1.0</version>
</dependency>
<dependency>
    <groupId>org.eclipse.emf</groupId>
    <artifactId>common</artifactId>
    <version>2.1.0</version>
</dependency>

O código compila bem, mas produz um RuntimeException em tempo de execução:

java.lang.RuntimeException: 
    Cannot create a resource for 'my.xsd'; a registered resource factory is needed
    at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getResource(ResourceSetImpl.java:346)

Eu encontrei algumas implementações de fábrica de recursos em org.eclipse.emf.ecore.xmi, mas AFAIK só há um xmi snapshot no repo Maven público, que tem uma dependência em org.eclipse.core.runtime. . que é não o que eu quero.

alguém pode ajudar?

Foi útil?

Solução

Tente adicionar este código antes de criar seu ResourceSetImpl:

import org.eclipse.xsd.util.XSDResourceFactoryImpl;

Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
java.util.Map m = reg.getExtensionToFactoryMap();
m.put("xsd", new XSDResourceFactoryImpl());

Isso deve criar o registro e fábrica que você precisa para realizar o que você está tentando fazer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top