使用 org.eclipse.xsd 和 Maven2 分析 XML 模式 [英] Analyzing XML schemas using org.eclipse.xsd and Maven2

查看:19
本文介绍了使用 org.eclipse.xsd 和 Maven2 分析 XML 模式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将示例代码实现为 这篇文章 来自 2002 年(我知道..),但无法加载架构.

I'm trying to implement the sample code to this article from 2002 (I know..), but cannot get the schema to load.

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 依赖项:

I'm using the following Maven2 dependencies:

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

The code compiles just fine, but produces a RuntimeException at execution time:

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.runtime..这不是我想要的.

I found some resource factory implementations in org.eclipse.emf.ecore.xmi, but AFAIK there's only a xmi snapshot in the public Maven repo, which has a dependency on org.eclipse.core.runtime.. which is not what I want.

有人可以帮忙吗?

推荐答案

在创建 ResourceSetImpl 之前尝试添加此代码:

Try adding this code before creating your 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());

这应该会创建完成您想要做的事情所需的注册表和工厂.

That should create the registry and factory that you need to accomplish what you are trying to do.

这篇关于使用 org.eclipse.xsd 和 Maven2 分析 XML 模式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆