使用 org.eclipse.xsd 和 Maven2 分析 XML 模式 [英] Analyzing XML schemas using org.eclipse.xsd and Maven2
问题描述
我正在尝试将示例代码实现为 这篇文章 来自 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屋!