2017-05-05 1 views
0

xsdファイルからクラスを生成しました。JAXBで生成されるクラスフィールドは抽象的です

このクラスには、抽象クラスのフィールドが含まれています。この抽象クラスには、2つの異なる実装があります。 Impl1CLassとImpl2Classを呼び出してみましょう。

私はxsdスキーマを変更できません。生成されたクラスは変更できません。

JAXBマーシャル、このクラスと抽象フィールドがNULL値を持っているとき、私がする必要があるのは、私はこのような何かを取得する必要がありますされています。生成されたクラスに

<dep xsi:type="Impl1Class" xsi:nil="true"/> 

ティ・フィールドは次のようになります。

protected Dep dep; 

Depは抽象クラスです。

は、だから私は、私は抽象クラスとしてBoundTypeでXmlAdapterのを作成しようとしました

(Impl1Class)これがnilであると種類が特定のものであることを設定する必要があるとのValueTypeがJAXBElementのですが、それはreuiresので、運がなかったデフォルト以外JAXBElementにはそのようなコンストラクタはありません。xsi:nil = "true"のときは、xsi:typeと入力してください。どうやってやるの?

ここで生成されたクラスの任意の注釈

protected DepartmentKey department; 

答えて

0

あなたが電話をしながらセッターメソッドを使用してnullを設定することができずに、ターゲットがクラスフィールドに

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(
    name = "DepartmentKey" 
) 
@XmlSeeAlso({GroupDepartmentKey.class, EnterpriseDepartmentKey.class}) 
public abstract class DepartmentKey { 
    public DepartmentKey() { 
    } 
} 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(
    name = "GroupDepartmentKey", 
    propOrder = {"serviceProviderId", "groupId", "name"} 
) 
public class GroupDepartmentKey extends DepartmentKey { 
    @XmlElement(
     required = true 
    ) 
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class) 
    protected String serviceProviderId; 
    @XmlElement(
     required = true 
    ) 
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class) 
    protected String groupId; 
    @XmlElement(
     required = true 
    ) 
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class) 
    protected String name; 
    ...... 
} 

Impl1Class impl1Class = new Impl1Class(); 
imple1Class.setDep(null); 

セッターメソッドは使用できますか?そうでない場合は、Impl1Classをサブクラス化し、をnullに設定する必要があります。

希望すると便利です。

+0

ソリリー、私はあなたを得ませんでした。私はセッターを持っていません。ですから、あなたはImpl1Class(Depクラスのサブインスタンスです)を拡張し、Setを追加してDepを自分自身に設定することを提案しますか? – Dmitriy

+0

@Dmitriy DepとImpl1Classのコードを共有できますか?どのクラスがDepクラスのラッパーであっても、Depをnullに設定できます。それは私の答えが意味するものです。 –

+0

私は変更された質問 – Dmitriy

関連する問題