3

次のコードを使用して、クラスをシリアル化します。

public String serialize(T oObject)
{
    mMarshaller = getJAXBContext().createMarshaller();
    mMarshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "UTF-8");
    ByteArrayOutputStream strm = getOutputStream();
    mMarshaller.marshal(oObject, strm);
    return strm.toString();
}

しかし、generaetd XML を見ると、そこに名前空間があります。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<mapEntry>
    <key xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">
    Key
    </key>
    <value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">
     oValue
     </value>
 </mapEntry>

これを削除する方法、または JAXB にこれを追加しないように指示する方法はありますか? 私は今朝ずっとこれを見ていて、グーグルで見つけたいくつかのことを試しましたが、何も役に立ちませんでした.

ここでこのスレッドを見つけました:名前空間なしでマーシャリングする方法? しかし、問題は、受け入れられた回答が部分的にしかリストされておらず、これが役立つかどうかわからないことです。XMLStreamWriterはインターフェイスであり、そのためだけにストリーム ライター全体を実装したくありません。ByteArrayOutputStreamXMLWriter が必要とするような、他のすべての関数を実装する必要なしにを拡張する方法はありますか?

4

1 に答える 1

2

この使用例では、属性のために名前空間http://www.w3.org/2001/XMLSchema-instancehttp://www.w3.org/2001/XMLSchema名前空間が取り込まれています。xsi:typeJAXB 実装がプロパティ タイプを と見なしているため、xsi:type属性が取り込まれていますObject。解決策は、プロパティが型指定されていないことを確認することObjectです。

XML 表現は、java.util.Map( http://blog.bdoughan.com/2013/03/jaxb-and-javautilmap.htmlを参照) の表現の一部のように見えます。これはあなたのユース ケースですか、それとも別のオブジェクト モデルがありますか?

于 2013-06-20T10:44:34.497 に答える