2009-02-10 8 views
2

J'essaye d'implémenter l'exemple de code à this article à partir de 2002 (je sais ..), mais je n'arrive pas à charger le schéma.Analyse des schémas XML en utilisant org.eclipse.xsd et Maven2

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); 

J'utilise les dépendances Maven2 suivantes:

<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> 

Le code compile très bien, mais produit un RuntimeException au moment de l'exécution:

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) 

J'ai trouvé quelques implémentations usine de ressources dans org.eclipse.emf.ecore.xmi, mais AFAIK il y a seulement un xmi snapshot dans le repo public de Maven, qui a une dépendance sur org.eclipse.core.runtime .. qui est pas ce que je veux.

Quelqu'un peut-il aider?

Répondre

2

Essayez d'ajouter ce code avant de créer votre 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()); 

Cela devrait créer le registre et l'usine que vous devez accomplir ce que vous essayez de faire.

+0

Merci Keith, c'est exactement ce que je cherchais! Bien sûr, j'aurais dû trouver le XSDResourceFactoryImpl dans util moi-même, mais je ne suis pas du tout familier avec la base de code eclipse. –