2016-02-08 36 views
0

我在一个xsd以下类型:如何在EMF Ecore中映射xs:any?

<xs:complexType name="VendorSpecificType"> 
    <xs:sequence> 
     <xs:any namespace="##any" processContents="skip" maxOccurs="unbounded"/> 
    </xs:sequence> 
</xs:complexType> 

我创建这种类型的E字形芯:

Ecore type

我试图注入含有下列标记的XML:

<VendorSpecific> 
    <Vendor ID="1"/> 
</VendorSpecific> 

但它崩溃

org.eclipse.m2m.atl.core.ATLCoreException: Error loading test.xml: org.eclipse.emf.ecore.xmi.FeatureNotFoundException: Feature 'Vendor' not found. 

用于在元模型中注入模型的代码已经过测试和工作。 即使我删除了供应商标签,也可以正确加载此test.xml。

我的问题是如何将xsd any映射到ecore类型,以便可以加载?

UPDATE:

调试之后,似乎我用注入模型转换为Ecore模型的代码是不完整的:在extendedmetadata总是空

// Load in metamodel 
IReferenceModel metamodel = modelFactory.newReferenceModel(); 
injector.inject(metamodel, metamodelPath); 

model = modelFactory.newModel(metamodel); 
injector.inject(model, modelPath); 

我怎么告诉它加载元数据?

回答

0

我注入元模型之前加入下列线

((EMFModelFactory) modelFactory).getResourceSet().getLoadOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE); 

它现在有效!