1

jaxb 抽象型と関連する XML ドキュメントの使用に関して、XML ドキュメントに抽象型への参照を含めることはできません。つまり、XML は具象型を使用する必要があります。

例 (ここから取得):

無効: < transport xmlns="http://cars.example.com/schema"/>

有効: < transport xmlns="http://cars.example.com/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Car"/>

(transport は抽象的です)

Q. "xsi:type" 値を適切にインクルード / ポピュレートするように Jaxb にアンマーシャリングするように指示するにはどうすればよいですか?

ところで、私の jaxb クラスはすべて同じパッケージにあり、私の JaxbContext はこのパッケージに対して構成されています。

4

1 に答える 1

1

次のことができます。

@XmlTypeアノテーションを使用して型名を指定できます。

import javax.xml.bind.annotation.XmlType;

@XmlType(name="Car")
public class Car {

}

デモ

XML 要素の Java タイプが である場合はいつでも、ObjectJAXB 実装は要素をxsi:type属性で修飾します。以下では、このために のインスタンスを活用しますJAXBElement

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

public class Demo {

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

        Car car = new Car();
        JAXBElement<Object> jaxbElement = new JAXBElement(new QName("transport"), Object.class, car); 

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

}

出力

以下は、デモ コードを実行した結果の出力です。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<transport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Car"/>
于 2013-06-24T13:23:21.560 に答える