Анализ XML-схем с использованием org.eclipse.xsd и Maven2 - PullRequest
2 голосов
/ 10 февраля 2009

Я пытаюсь реализовать пример кода для этой статьи с 2002 года (я знаю ..), но не могу загрузить схему.

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

Я использую следующие зависимости 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>

Код компилируется просто отлично, но выдает исключение RuntimeException во время выполнения:

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)

Я нашел некоторые реализации фабрики ресурсов в org.eclipse.emf.ecore.xmi, но AFAIK есть только снимок xmi в публичном репозитории Maven, который зависит от org.eclipse.core. время выполнения .. которое не что я хочу.

Может кто-нибудь помочь?

1 Ответ

2 голосов
/ 10 февраля 2009

Попробуйте добавить этот код перед созданием 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());

Это должно создать реестр и фабрику, необходимые для выполнения того, что вы пытаетесь сделать.

...