Java MOXy不会导入它生成的其他模式

Java MOXy不会导入它生成的其他模式,java,jaxb,eclipselink,moxy,Java,Jaxb,Eclipselink,Moxy,我按照说明为带注释的类生成XML模式。我将MOXy用于JAXB的底层实现,因为我需要它的某些特性,如@XmlPath,以及它如何处理XmlAdapter的基本类型 上面链接中的代码将模式生成为两个模式文件,即一个包含简单和复杂类型的规则,另一个仅包含枚举类型的模式。理想情况下,我希望它们位于单个模式文件中,但这不是目前的主要问题 当我使用JAXB的Sun实现时,它生成模式并导入另一个模式。但是,当我切换到使用MOXy实现时,它不会导入其他模式,请参见下面的示例: ... 有人知道如何解决这个

我按照说明为带注释的类生成XML模式。我将MOXy用于JAXB的底层实现,因为我需要它的某些特性,如
@XmlPath
,以及它如何处理
XmlAdapter
的基本类型

上面链接中的代码将模式生成为两个模式文件,即一个包含简单和复杂类型的规则,另一个仅包含枚举类型的模式。理想情况下,我希望它们位于单个模式文件中,但这不是目前的主要问题

当我使用JAXB的Sun实现时,它生成模式并导入另一个模式。但是,当我切换到使用MOXy实现时,它不会导入其他模式,请参见下面的示例:


...
有人知道如何解决这个问题吗

以下是我使用的代码:

    JAXBContext context = JAXBContext.newInstance(Person.class, IdentifierType.class);
    SchemaOutputResolver sor = new MySchemaOutputResolver();
    context.generateSchema(sor);

Person
是标准POJO,
IdentifierType
是枚举。它们都使用JAXB注释进行注释,如
@XmlRootElement
@XmlEnum
,等等(如果需要,我可以提供更多代码)

更新-问题已解决

感谢您为此问题输入以下错误

这已经在EclipseLink 2.4.2和2.5.0流中修复。您可以从2013年2月12日开始,每晚从以下网站下载一次修复程序:


我无法重现您看到的问题。以下是我到目前为止所做的尝试

场景#1-
人物
标识类型
在同一命名空间中

package forum14778338;

public enum IdentifierType {

    FOO,
    BAR

}
如果POJO和Enum位于同一名称空间中,则只会生成一个XML模式

个人(POJO)

标识类型

package forum14778338;

public enum IdentifierType {

    FOO,
    BAR

}
jaxb.properties

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
演示

package forum14778338;

import java.io.IOException;
import javax.xml.bind.*;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Person.class);

        jc.generateSchema(new SchemaOutputResolver() {

            @Override
            public Result createOutput(String namespaceURI, String suggestedFileName)
                    throws IOException {
                StreamResult result = new StreamResult(System.out);
                result.setSystemId(suggestedFileName);
                return result;
            }

        });
    }

}
输出


场景#2-
Person
IdentifierType
在不同的命名空间中

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
如果POJO和Enum位于不同的名称空间中,则应生成两个XML模式

标识类型

package forum14778338;

public enum IdentifierType {

    FOO,
    BAR

}
我已将
@XmlType
注释添加到
IdentifierType
枚举中,以将其放在不同的命名空间中

package forum14778338;

import javax.xml.bind.annotation.*;

@XmlEnum
@XmlType(namespace="foo")
public enum IdentifierType {

    FOO,
    BAR

}
输出


更新-问题已修复

感谢您为此问题输入以下错误

这已经在EclipseLink 2.4.2和2.5.0流中修复。您可以从2013年2月12日开始,每晚从以下网站下载一次修复程序:


我无法重现您看到的问题。以下是我到目前为止所做的尝试

场景#1-
人物
标识类型
在同一命名空间中

package forum14778338;

public enum IdentifierType {

    FOO,
    BAR

}
如果POJO和Enum位于同一名称空间中,则只会生成一个XML模式

个人(POJO)

标识类型

package forum14778338;

public enum IdentifierType {

    FOO,
    BAR

}
jaxb.properties

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
演示

package forum14778338;

import java.io.IOException;
import javax.xml.bind.*;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Person.class);

        jc.generateSchema(new SchemaOutputResolver() {

            @Override
            public Result createOutput(String namespaceURI, String suggestedFileName)
                    throws IOException {
                StreamResult result = new StreamResult(System.out);
                result.setSystemId(suggestedFileName);
                return result;
            }

        });
    }

}
输出


场景#2-
Person
IdentifierType
在不同的命名空间中

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
如果POJO和Enum位于不同的名称空间中,则应生成两个XML模式

标识类型

package forum14778338;

public enum IdentifierType {

    FOO,
    BAR

}
我已将
@XmlType
注释添加到
IdentifierType
枚举中,以将其放在不同的命名空间中

package forum14778338;

import javax.xml.bind.annotation.*;

@XmlEnum
@XmlType(namespace="foo")
public enum IdentifierType {

    FOO,
    BAR

}
输出



在哪一点导入XML架构?如果您指的是从XML模式生成类,那么MOXy将使用引用实现中的XJC组件来实现这一点。我正在从这些类生成模式。只有在我使用Sun实现时才出现导入,这正是我所希望的?另外,您使用的是EclipseLink MOXy的哪个版本?我使用的是EclipseLink MOXy 2.4.0。我将在一分钟内为模型添加代码。我已经添加了带有代码的答案。它看起来像您正在做的吗?您在哪一点导入XML模式?如果您指的是从XML模式生成类,那么MOXy将使用引用实现中的XJC组件来实现这一点。我正在从这些类生成模式。只有在我使用Sun实现时才出现导入,这正是我所希望的?另外,您使用的是EclipseLink MOXy的哪个版本?我使用的是EclipseLink MOXy 2.4.0。我将在一分钟内为模型添加代码。我已经添加了带有代码的答案。看起来像你在做什么吗?非常感谢你的回答。我试图减少我的代码,但当代码非常小时,我无法重新创建问题。我发现它发生在我的项目中,其中包含许多类。请允许我尝试重新创建并在一个较小的项目中指出问题,我会给你回复。嗨,我发现了问题。identifierType类位于另一个包中,该包不包含
package info.java
文件,因此JAXB生成两个模式。一旦我在所有包中放入
package info.java
,它只生成一个模式。然而,当MOXy生成两个模式时,它不会导入另一个模式,这与Sun实现不同