Java 在EMF中导入AnyType元素

Java 在EMF中导入AnyType元素,java,xml,eclipse,emf,ecore,Java,Xml,Eclipse,Emf,Ecore,我正在使用Eclipse建模框架(EMF)构建一个XML导入器。为此,我让EMF从XSD元模型生成一个Ecore模型,并从Ecore模型生成相应的Java类。现在我正在阅读一个符合我的XSD模式的XML文件,并陷入了以下问题:为XSD模式中定义的所有类型创建对象实例工作得非常好,我得到了一个很好的Java对象(实例)层次结构,但我无法创建“AnyType”元素的实例。 假设我有以下XML: <XMLFile xsi:noNamespaceSchemaLocation="My_xsd_fil

我正在使用Eclipse建模框架(EMF)构建一个XML导入器。为此,我让EMF从XSD元模型生成一个Ecore模型,并从Ecore模型生成相应的Java类。现在我正在阅读一个符合我的XSD模式的XML文件,并陷入了以下问题:为XSD模式中定义的所有类型创建对象实例工作得非常好,我得到了一个很好的Java对象(实例)层次结构,但我无法创建“AnyType”元素的实例。 假设我有以下XML:

<XMLFile xsi:noNamespaceSchemaLocation="My_xsd_file.xsd" FileName="Example.xml" SchemaVersion="1.10" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Version>2.1</Version>
    <AdditionalInformation someAttribute="someValue" />
    <AdditionalInformation>
        <SomeChildElement>
            <ChildA>Some content</ChildA>
            <ChildB>Some content</ChildB>
        </SomeChildElement>
    </AdditionalInformation>
</XMLFile>
因此,当我注意到这不适用于EObjects时,我创建了一个
AnyType
对象(参见上面的代码),正如所说的,这就是AnyType对象的用途。 但是,我也无法设置
AnyType
对象的引用:

if (object instanceof AnyType) {
    NodeList children = node.getChildNodes();
    for (int i = 0; i < children.getLength(); i++) {
        Node childNode = children.item(i);
        switch (childNode.getNodeType()) {
        case Node.ELEMENT_NODE:
            AnyType childObj = xmlFactory.createAnyType();
            recursiveImport(childNode, childObj);
            Entry entry = FeatureMapUtil.createEntry(xmlPackage.getAnyType_Any(), childObj);
            ((FeatureMap) object.eGet(xmlPackage.getAnyType_Any())).add(entry); // throws exception
            ((AnyType) object).getAny().add(entry); // throws exception
            ...
我很困惑。
AnyType
对象不就是应该这样做的吗?是否允许任意数量的
AnyType
子级您知道如何将XML anyType层次结构转换为EMF生成的Java实例吗?


附言:我读了,但没有用。

您能添加您创建的特定*.ecore文件吗?可能是您将直接来自emf的实际xml ecore模型和您自己的xml ecore模型之间的一些类混淆了。@Mad Matts:可以找到生成的.ecore文件,即相应的xsd文件。您可以添加您创建的特定的*.ecore文件吗?可能是您将直接来自emf的实际xml ecore模型和您自己的模型之间的一些类混淆了。@Mad Matts:可以找到生成的.ecore文件,即相应的xsd文件。
if (object instanceof AnyType) {
    NodeList children = node.getChildNodes();
    for (int i = 0; i < children.getLength(); i++) {
        Node childNode = children.item(i);
        switch (childNode.getNodeType()) {
        case Node.ELEMENT_NODE:
            AnyType childObj = xmlFactory.createAnyType();
            recursiveImport(childNode, childObj);
            Entry entry = FeatureMapUtil.createEntry(xmlPackage.getAnyType_Any(), childObj);
            ((FeatureMap) object.eGet(xmlPackage.getAnyType_Any())).add(entry); // throws exception
            ((AnyType) object).getAny().add(entry); // throws exception
            ...
Exception in thread "main" java.lang.ClassCastException: The feature 'any's type 'EFeatureMapEntry' does not permit a value of type 'AnyType'
    at org.eclipse.emf.ecore.impl.EStructuralFeatureImpl$BasicFeatureMapEntry.validate(EStructuralFeatureImpl.java:3213)
    at org.eclipse.emf.ecore.util.FeatureMapUtil.createEntry(FeatureMapUtil.java:174)