2012-08-06 15 views
9

jaxbでは以下の質問が可能かどうかはわかりませんが、とにかく尋ねます。Jaxbは、ルート要素を持たない子要素をマーシャリングできますか?

特定のプロジェクトでは、定義されたスキーマを持つjaxbを使用してxmlファイルの次の構造を作成しています。 AAAとBBB、AAAが@XmlRootElementとして生成された:

<aaa> 
    <bbb> 
     more inner children here 
    </bbb> 
    <bbb> 
     more inner children here 
    </bbb> 
</aaa> 

我々はまた、クラスを作成し、JAXBの自動クラス生成を使用しています。

新しいプロジェクトで同じスキーマを使用したいと考えています。これは以前のプロジェクトと互換性があります。 私がしたいのは、単一のbbbオブジェクトだけをXMLにマーシャリングするために、スキーマの変更を行わずに同じjaxb生成クラスを使用することです。マーシャラーは私が@XmlRootElementが定義されていないことを叫ぶよう

<bbb> 
    <inner child1/> 
    <inner child2/> 
    ... 
</bbb> 

私は現在、そうすることはできませんよ。

JAXBContext jc = JAXBContext.newInstance("generated"); 
Marshaller marshaller = jc.createMarshaller(); 
marshaller.marshal(bbb, writer); 

だから我々は次の結果を得るでしょう。

実際には、スキーマを2つのスキーマ(bbbのみとaaaがbbbをインポートするもの)に分ける場合を避けようとしています。

ありがとうございます!

+3

は、私がこの記事で解決策を見つけることができました[JAXBと断片化されたマーシャリング] [1] [1]:http://stackoverflow.com/questions/9295385/jaxb-fragmented-marshalling?lq=1 –

答えて

11

私は3年で多分遅れるが、あなたが今までそのような何かを試してみました:ここ

public static String marshal(Bbb bbb) throws JAXBException { 
    StringWriter stringWriter = new StringWriter(); 

    JAXBContext jaxbContext = JAXBContext.newInstance(Bbb.class); 
    Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 

    // format the XML output 
    jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

    QName qName = new QName("com.yourModel.bbb", "bbb"); 
    JAXBElement<Bbb> root = new JAXBElement<Bbb>(qName, Bbb.class, bbb); 

    jaxbMarshaller.marshal(root, stringWriter); 

    String result = stringWriter.toString(); 
    LOGGER.info(result); 
    return result; 
} 

は私がrootElementせずにアンマーシャリング/マーシャリングする必要があるときに私が使用しての記事です: http://www.source4code.info/2013/07/jaxb-marshal-unmarshal-with-missing.html

それは、私のためにかなりうまく動作します。私は答えを探している他の失われた魂のためにこの応答を書いています。

すべてのベスト:)

-1

私は多分後半5年間としています:)しかし、あなたが今までそのような何かを試してみました: :

StringWriter stringWriter = new StringWriter(); 
JAXB.marshal(bbb, stringWriter); 
String bbbString = stringWriter.toString(); 
関連する問題