Analisando esquemas XML usando org.eclipse.xsd e Maven2
-
22-08-2019 - |
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?
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