私はこの頻繁に引用されるブログ投稿からxsi:typeを使用するための指示に従っています:
http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using-xsitype.html
基本的に私はこれを持っています:
public abstract class ContactInfo {
}
public class Address extends ContactInfo {
private String street;
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
}
@XmlRootElement
public class Customer {
private ContactInfo contactInfo;
public ContactInfo getContactInfo() {
return contactInfo;
}
public void setContactInfo(ContactInfo contactInfo) {
this.contactInfo = contactInfo;
}
}
そしてこのテスト:
@Test
public void contactTestCase() throws JAXBException, ParserConfigurationException, IOException, SAXException {
Customer customer = new Customer();
Address address = new Address();
address.setStreet("1 A Street");
customer.setContactInfo(address);
JAXBContext jc = JAXBContext.newInstance(Customer.class, Address.class, PhoneNumber.class);
StringWriter writer = new StringWriter();
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(customer, writer);
String s = writer.toString();
System.out.append(s);
StringInputStream sis = new StringInputStream(s);
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder db = documentBuilderFactory.newDocumentBuilder();
Document doc = db.parse(sis);
Unmarshaller um = jc.createUnmarshaller();
JAXBElement result = um.unmarshal(doc, Customer.class);
Customer f = (Customer) result.getValue();
writer = new StringWriter();
marshaller.marshal(customer, writer);
s = writer.toString();
System.out.append(s);
}
そして、私はこの結果を得ます:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer>
<contactInfo xsi:type="address" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<street>1 A Street</street>
</contactInfo>
</customer>
javax.xml.bind.UnmarshalException: Unable to create an instance of blog.inheritance.ContactInfo
JAXBのデフォルトの実装であるjaxb-impl-2.1.2を試しましたが、このバグに基づいて、jaxb-impl-2.2.6-b38.jarを試しました。どれも機能しません。
これは機能しないはずですか、それともいくつかのセットアップがありませんか?