我已经创建了一个JAXB对象,并且试图将其中的xml字符串解组。我面临的问题是,当我将namespace
属性放入@XmlRootElement
和发送的xml文档中时,正在创建JAXB对象,但它为空。如果删除命名空间,它将起作用。所以这就是我的意思
我的JAXB对象:
@XmlRootElement(name = "incident", namespace = "http://www.ba.com/schema/BAserviceDeskAPI/incident")
@XmlAccessorType(XmlAccessType.FIELD)
public class Incident {
@XmlElement
private String eventTitle;
public Incident() {
}
public String getEventTitle() {
return eventTitle;
}
public void setEventTitle(String eventTitle) {
this.eventTitle = eventTitle;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Incident [");
builder.append("eventTitle=");
builder.append(eventTitle);
builder.append("]");
return builder.toString();
}
}
我的主:
public static void main(String[] args) throws JAXBException {
String s = "<incident xmlns=\"http://www.ba.com/schema/BAserviceDeskAPI/incident\">"
+ "<eventTitle>Test Title from BAwrapper</eventTitle>"
+ "</incident>";
JAXBContext jaxbContext = JAXBContext.newInstance(Incident.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Incident incident = (Incident) jaxbUnmarshaller.unmarshal(new ByteArrayInputStream(s.getBytes(StandardCharsets.UTF_8)));
System.out.println(incident.toString());
}
}
输出:
Incident [eventTitle=null]
如果我, namespace = "http://www.ba.com/schema/BAserviceDeskAPI/incident"
从@XmlRootElement
和xmlns=\"http://www.ba.com/schema/BAserviceDeskAPI/incident\"
从发送的xml中删除和,则会得到以下输出
Incident [eventTitle=Test Title from BAwrapper]
任何想法为什么会发生这种情况?
谢谢
指定的名称空间@XmlRootElement
仅适用于该元素。如果希望将其应用于已映射到的所有元素,则可以使用@XmlSchema
注释在包级别进行操作。
包信息.java
@XmlSchema(
namespace = "http://www.ba.com/schema/BAserviceDeskAPI/incident",
elementFormDefault = XmlNsForm.QUALIFIED)
package example;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
欲获得更多信息
我已经在我的博客上写了有关JAXB和名称空间限定的更多信息:
将名称空间设置为@XmlRootElement时,解组失败且没有错误
对于JAXB,我们(JSR-222专家组)决定,如果存在未映射的内容,则默认情况下,解组不会失败。为什么?因为很多XML文档都包含额外的内容,所以事情总是会失败。如果您确实希望看到这些错误,则可以在ValidationEventHandler
上指定一个Unmarshaller
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句