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 つのソース ファイルからスキーマを生成しています [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) [スキーマゲン] com.sun.tools.jxc.model.nav.APTNavigator$2.onClassType(APTNavigator.java:456) [スキーマゲン] com.sun.istack.tools で.APTTypeVisitor.apply(APTTypeVisitor.java:27) [スキーマ生成] com.sun.tools.jxc.model.nav.APTNavigator.getBaseClass(APTNavigator.java:109) [スキーマ生成] com.sun.tools.jxc.model で.nav.APTNavigator.getBaseClass(APTNavigator.

文字列に切り替えるとエラーが発生するため、列挙型がエラーの原因であることはわかっています。列挙型が同じ名前空間または異なる名前空間にある上記の例でスキーマを生成するにはどうすればよいですか?

4

1 に答える 1

0

schemagenは、 javac タスクによって定義されたほとんどの属性をサポートします。

include または exclude 要素を使用してみましたか (未テスト)?

<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 に答える