2012-10-03 6 views
6

正確にはJAXBElement Booleanとは何ですか、これをどのようにして "true"のブール値に設定できますか?JAXBElement <Boolean>対ブール

方法:

public void setIncludeAllSubaccounts(JAXBElement<Boolean> paramJAXBElement) 
    { 
    this.includeAllSubaccounts = paramJAXBElement; 
    } 

これませないコンパイル:

returnMessageFilter.setIncludeAllSubaccounts(true); 
+0

このメソッドが['JAXBElement'](http://docs.oracle.com/javaee/5/api/javax/xml/bind/JAXBElement.html)を予期している場合、なぜあなたは' true'を渡そうとしていますか? 、ブール値? – NullUserException

+1

問題が発生している場所のコードとスタックトレースを含めることはできますか? –

+1

JAXBElementを作成します。例えば、 'JAXBElement jaxtrue = new JaxBElement(qname、Boolean.TYPE、Boolean.TRUE);'を渡して – NullUserException

答えて

8

JAXBElementは、JAXB(JSR-222)の実装はすることができないであろう、あなたのモデルの一部として生成されます値だけに基づいて何をすべきかを教えてください。 nullを表すものではありませんbooleanbooleanので、生成されたプロパティがすることはできません

<xsd:element 
    name="includeAllSubaccounts" type="xsd:boolean" nillable="true" minOccurs="0"/> 

:あなたの例では、おそらくのような要素を持っていました。プロパティBooleanを作成することができますが、不足している要素とxsi:nilで設定された要素をどのように区別していますか? JAXBElementのの出番です完全な例については、以下を参照してください。

フー

package forum12713373; 

import javax.xml.bind.JAXBElement; 
import javax.xml.bind.annotation.*; 

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Foo { 

    @XmlElementRef(name="absent") 
    JAXBElement<Boolean> absent; 

    @XmlElementRef(name="setToNull") 
    JAXBElement<Boolean> setToNull; 

    @XmlElementRef(name="setToValue") 
    JAXBElement<Boolean> setToValue; 

} 

のObjectFactory

package forum12713373; 

import javax.xml.bind.JAXBElement; 
import javax.xml.bind.annotation.*; 
import javax.xml.namespace.QName; 

@XmlRegistry 
public class ObjectFactory { 

    @XmlElementDecl(name="absent") 
    public JAXBElement<Boolean> createAbsent(Boolean value) { 
     return new JAXBElement(new QName("absent"), Boolean.class, value); 
    } 

    @XmlElementDecl(name="setToNull") 
    public JAXBElement<Boolean> createSetToNull(Boolean value) { 
     return new JAXBElement(new QName("setToNull"), Boolean.class, value); 
    } 

    @XmlElementDecl(name="setToValue") 
    public JAXBElement<Boolean> createSetToValue(Boolean value) { 
     return new JAXBElement(new QName("setToValue"), Boolean.class, value); 
    } 

} 

デモ

package forum12713373; 

import javax.xml.bind.*; 

public class Demo { 

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

     ObjectFactory objectFactory = new ObjectFactory(); 

     Foo foo = new Foo(); 
     foo.absent = null; 
     foo.setToNull = objectFactory.createSetToNull(null); 
     foo.setToValue = objectFactory.createSetToValue(false); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(foo, System.out); 
    } 

} 
NullUserExceptionさんのコメントへ

出力

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<foo> 
    <setToNull xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
    <setToValue>false</setToValue> 
</foo> 
1

おかげで、私は1つのラインでこれを実装することができました。それは少し違っているので、私は他の人の利益のためにそれを掲示すると思った。

returnMessageFilter.setIncludeAllSubaccounts(new JAXBElement<Boolean>(new QName("IncludeAllSubaccounts"), 
Boolean.TYPE, Boolean.TRUE)); 

QNameはXmlElementタグ名です。

また、輸入に必要な:

import javax.xml.bind.JAXBElement; 

編集

ベターブレーズが提案されているようJAXBElementを返しObjectFactoryクラスに便利なメソッドを使用します。

+1

FYI - 生成されたモデルの一部として、適切な 'QName'で必要な' JAXBElement'を作成する便利なメソッドを含む 'ObjectFactory'クラスがあります。 –

+1

ああ、あります。それは私が青から1つを作成する必要があったように右のように見えませんでした。ありがとうございました! – Jade

関連する問題