Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我能';不使用xmlns属性?_Java_Xml_Jaxb_Attributes - Fatal编程技术网

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可以完美地实现它。