Web服务有时会提供
形式的元素<artist>
<name>name</name>
</artist>
有时候喜欢
<artist>name</artist>
我无法控制网络服务,因此无法更改此
我将结果读入JAXB模型。是否可以在JAXB中对此不一致进行建模,我的模型目前仅代表第一个。
答案 0 :(得分:4)
如果您能够在将Web服务消息传递给JAXB之前拦截它,您可以将其(例如使用XSLT)转换为适用于当前JAXB模型的形式。如果您不能这样做,那么处理起来有点难看,但您可以尝试将这两种消息形式建模为混合内容,从而允许您将内容表示为字符串或包含该字符串的元素。
例如:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"content"
})
@XmlRootElement(name = "artist")
public class Artist {
@XmlElementRef(name = "name", type = JAXBElement.class, required = false)
@XmlMixed
protected List<Serializable> content;
public List<Serializable> getContent() {
if (content == null) {
content = new ArrayList<Serializable>();
}
return this.content;
}
}
@XmlRegistry
public class ObjectFactory {
private final static QName NAME_QNAME = new QName("", "name");
public ObjectFactory() {}
public Artist createArtist() {
return new Artist();
}
@XmlElementDecl(namespace = "", name = "name", scope = Artist.class)
public JAXBElement<String> createArtistName(String value) {
return new JAXBElement<String>(NAME_QNAME, String.class, Artist.class, value);
}
}