Java 为什么我能';不使用xmlns属性?
我有甲级:Java 为什么我能';不使用xmlns属性?,java,xml,jaxb,attributes,Java,Xml,Jaxb,Attributes,我有甲级: @XmlRootElement(name = "A") @XmlAccessorType(XmlAccessType.FIELD) public class A { @XmlAttribute(name = "xmlns") private String xmlnsAttr; public String getXmlnsAttr() { return xmlnsAttr; } public void setXmlnsAttr
@XmlRootElement(name = "A")
@XmlAccessorType(XmlAccessType.FIELD)
public class A {
@XmlAttribute(name = "xmlns")
private String xmlnsAttr;
public String getXmlnsAttr() {
return xmlnsAttr;
}
public void setXmlnsAttr(String xmlnsAttr) {
this.xmlnsAttr = xmlnsAttr;
}
}
如果xmlnsAttr的属性名为“b”(或任何其他名称,但不是“xmlns”),则可以。但如果name=“xmlns”我有问题:
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.w3.org/2000/09/xmldsig#", local:"A"). Expected elements are <{}A>
javax.xml.bind.UnmarshaleException:意外元素(uri:http://www.w3.org/2000/09/xmldsig#“,本地:“A”)。预期的要素是
测试:
@Test
public void test() throws Exception {
StringReader reader = new StringReader("<A xmlns=\"http://www.w3.org/2000/09/xmldsig#\"></A>");
JAXBContext jc = JAXBContext.newInstance(A.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
A a = (A) unmarshaller.unmarshal(reader);
assert a.getXmlnsAttr() != null;
}
@测试
public void test()引发异常{
StringReader=新的StringReader(“
及
附言:如果我加上
@XmlSchema(namespace = "http://www.w3.org/2000/09/xmldsig#")
package <my package>;
@XmlSchema(命名空间=”http://www.w3.org/2000/09/xmldsig#")
包裹
我将遇到断言问题(a.getXmlnsAttr()为空)。使用带有名称空间的前缀,可以解决这个问题`xmlns:prefix=\'`,尽管您应该研究为什么默认名称空间会给您一个错误。@CrazySabPath我应该用没有前缀的xmlns解析元素。请参阅示例27,根据w3规范,您应该这样做,但这并不意味着jaxb可以完美地实现它。