確認すべき点がいくつかあります。
- クラス
JAXBContext
を意識していますか?クラスの作成または追加にB
使用するクラスに含めることができます。JAXBContext
@XmlSeeAlso({B.class})
A
B
クラスに対応する型の名前B
ですか?デフォルトでは になりますb
。@XmlType
注釈を使用して名前を指定できます。
あ
package forum13712986;
import javax.xml.bind.annotation.XmlSeeAlso;
@XmlSeeAlso({B.class})
public class A {
}
B
package forum13712986;
import javax.xml.bind.annotation.XmlType;
@XmlType(name="B") // Default name is "b"
public class B extends A {
}
デモ
package forum13712986;
import java.io.StringReader;
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(A.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
String xml = "<A xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='B'/>";
StreamSource source = new StreamSource(new StringReader(xml));
JAXBElement<A> jaxbElement = unmarshaller.unmarshal(source, A.class);
System.out.println(jaxbElement.getValue().getClass());
}
}
出力
class forum13712986.B