3

如何从引用不同包中的枚举的 JAXB 对象生成模式?

下面是一个例子:

枚举类

package com.example.one

public enum EnumExample {
    VALUE_ONE
    VALUE_TWO
}

JAXB 类

package com.example.two

public class Example {

private EnumExample enumExample;

    @XMLElement(name="enumExample", required=true)
    public EnumExample getEnumExample() {
        return enumExample
    }

    public void setEnumExample() {
        this.enumExample = enumExample;
    }
}

包信息.java

@javax.xml.bind.annotation.XmlSchema(namespace = "http://example.com", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 
package com.example.two;

蚂蚁目标

<path id="glassfish.schemagen.classpath">
    <pathelement location="/apps/glassfish/lib/webservices-tools.jar" />
</path>

<taskdef name="schemagen" classname="com.sun.tools.jxc.SchemaGenTask">
    <classpath refid="glassfish.schemagen.classpath" />
</taskdef>

<schemagen srcdir="${src.dir}/com/example/two" destdir="xsd">
    <schema namespace="http://exmaple.com" file="example.xsd" />
</schemagen>

当我运行上面的示例时,我得到以下信息:

[schemagen] 异常的package-info.java 路径:package-info.java [schemagen] 从7个源文件生成schema [schemagen] 注解处理时遇到的问题;[schemagen] 请参阅下面的堆栈跟踪以获取更多信息。[schemagen] java.lang.NullPointerException [schemagen] at com.sun.tools.jxc.model.nav.APTNavigator$2.onDeclaredType(APTNavigator.java:428) [schemagen] at com.sun.tools.jxc.model.nav .APTNavigator$2.onClassType(APTNavigator.java:402) [schemagen] 在 com.sun.tools.jxc.model.nav.APTNavigator$2.onClassType(APTNavigator.java:456) [schemagen] 在 com.sun.istack.tools .APTTypeVisitor.apply(APTTypeVisitor.java:27) [schemagen] 在 com.sun.tools.jxc.model.nav.APTNavigator.getBaseClass(APTNavigator.java:109) [schemagen] 在 com.sun.tools.jxc.model .nav.APTNavigator.getBaseClass(APTNavigator.

我知道是枚举导致了错误,因为如果我切换到字符串,它就会消失。如何使用上面的示例生成模式,其中枚举位于相同的命名空间或不同的命名空间中?

4

1 回答 1

0

schemagen supports most of the attributes defined by the javac task

Have you tried using include or exclude elements (untested)?

<schemagen srcdir="${src.dir}/com/example" destdir="xsd">
    <schema namespace="http://exmaple.com" file="example.xsd" />
    <include name="one/EnumExample.java"/>
    <include name="two/Example.java"/>
</schemagen>
于 2012-09-27T00:03:39.547 回答