5

JAXBコンパイラにXMLスキーマの特定の要素をJavaクラス定義でfinalとして宣言させる方法を知りたいです。また、コンストラクターが欲しいのと同じように、さまざまなコンストラクターを制御できるようにしたいと思います。クラスに含まれるパラメーターの完全なリストと、JAXBに必要なデフォルトのプライベートコンストラクターを使用してオブジェクトを作成できます。

何か助けはありますか?

ありがとう。

これが私がやろうとしていることの例です:

<xs:complexType name="mycomplex">
    <xs:all>
        <xs:element name="myboolean" type="xs:boolean"/>
    </xs:all>
</xs:complexType>

これで、生成されたコードは次のようになります。

public class mycomplex
{
        protected boolean myboolean;

        public boolean getMyboolean() { return myboolean; }
        public void setMyboolean(boolean b) { this.myboolean = b; }
}

しかし、次のようにスキーマを編集したいと思います。

public class mycomplex
{
        protected final boolean myboolean;

        public mycomplex(boolean b) { this.myboolean = b; }

        public boolean getMyboolean() { return myboolean; }
}

これは達成できますか?

4

3 に答える 3

0

JAXB仕様はそのようなクラスへのマッピングをサポートしていないため、そのようなクラスを生成する標準のJAXBの方法はありません。

次のコードを使用して、setメソッドを使用しないようにすることができます。パブリックのデフォルトコンストラクターがある限り、必要に応じてコンストラクターを追加できます。

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;

@XmlAccessorType(XmlAccessType.FIELD)
public class mycomplex    
{    
        protected final boolean myboolean;    

        public boolean getMyboolean() { return myboolean; }    
}    

上記で説明したクラスをデフォルト以外のコンストラクターとfinalとマークされたフィールドで使用する場合は、XmlAdapterを作成する必要があります。

于 2010-07-26T17:57:28.753 に答える
0

私はこれを別の方法で解決しました。作成されたJavaソースコードファイルを編集し、必要なものを追加/削除するツールを作成しています。詳細については、これを参照してください:EclipseASTの使用

于 2010-07-28T15:21:21.320 に答える
0

同様の問題があり、次のライブラリが見つかりました: http ://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#immutable

そして今ではすべてがとてもシンプルに見えます;)

于 2010-08-18T22:31:31.917 に答える