JAXB:限定属性禁用默认名称空间xmlns="&引用;?

JAXB:限定属性禁用默认名称空间xmlns="&引用;?,jaxb,jaxb2,moxy,Jaxb,Jaxb2,Moxy,当我使用@XmlSchema(attributeFormDefault=XmlNsForm.QUALIFIED,…) 或者@xmltattribute(namespace=“sample.com/y”,…) JAXB忽略@XmlSchema(namespace=“sample.com/x”,…) 而不是: <a xmlns="sample.com/y" xmlns:ns0="sample.com/y"> <b ns0:att=""/> </a> 生成

当我使用
@XmlSchema(attributeFormDefault=XmlNsForm.QUALIFIED,…)

或者
@xmltattribute(namespace=“sample.com/y”,…)

JAXB忽略
@XmlSchema(namespace=“sample.com/x”,…)

而不是:

<a xmlns="sample.com/y" xmlns:ns0="sample.com/y">
  <b ns0:att=""/>
</a>

生成如下内容:

<ns1:a xmlns:ns1="sample.com/x" xmlns:ns0="sample.com/y">
  <ns1:b ns0:att=""/>
</ns1:a>

这是预期的行为吗?有什么方法可以纠正这个问题吗?

正在根据属性形式限定(如下所示)不同地处理元素的前缀限定

名称空间限定没有错,但我同意在可能的情况下使用默认名称空间更好。您可以使用以下错误跟踪此问题的进度:

A

package forum6808921;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class A {

    private String b;

    public String getB() {
        return b;
    }

    public void setB(String b) {
        this.b = b;
    }

}
演示

package forum6808921;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(A.class);

        A a = new A();
        a.setB("Hello World");

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(a, System.out);
    }

}
没有attributeFormDefault设置的包信息

@XmlSchema(
        namespace = "sample.com/x"
        , elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED
        )
package forum6808921;

import javax.xml.bind.annotation.*;
@XmlSchema(
        namespace = "sample.com/x"
        , elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED
        , attributeFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED
        )
package forum6808921;

import javax.xml.bind.annotation.*;
输出:

输出:


你好,世界

感谢您确认此问题。
@XmlSchema(
        namespace = "sample.com/x"
        , elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED
        , attributeFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED
        )
package forum6808921;

import javax.xml.bind.annotation.*;
<?xml version="1.0" encoding="UTF-8"?>
<ns0:a xmlns:ns0="sample.com/x">
   <ns0:b>Hello World</ns0:b>
</ns0:a>